不得不对labVIEW FPGA在阵列实现中的局限性感到惊讶。我在labview中没有足够的经验来发表评论,但我发现使用数组非常困难!! 我正在进行主动噪音消除项目。我需要从两个麦克风收集音频数据@ 40k采样率和每帧100个采样(至少),并通过扬声器@ 40k采样率输出音频。为此,我正在使用FPGA高吞吐量的myRIO 1900。
目前,我正在尝试在LabVIEW FPGA平台上实现LMS算法。我已经在下面附上了MATLAB代码,我想要实现它!
直到数组初始化很好,但涉及到临时矢量操作。喜欢:
x_temp(1:nr_c-1)=x_temp(2:nr_c);
x_temp(nr_c)=x(i);
我疯了!这该怎么做 ? LabVIEW不允许我们正确地索引1D数组(我们只能提取数组的一个特定元素而不是数组的一部分,我可以用子数组函数提取x_temp(1:nr_c)但是如何提取x_temp(2:nr_c)?? )
请帮助我如何使用上述基本语句操作'x_temp'向量。
PS:1.LabVIEW FPGA仅支持一维数组操作。
尽管自适应过滤器工具包托盘在myRIO FPGA高吞吐量特性中可用,但我无法在myRIO Target上安装Adaptive Filter Toolkit。!!!
3.在MyLMS程序中:x:输入向量(数组),y:所需信号,nr_c:滤波器系数数,步长:步长。我希望你理解其余的程序:)
MyLMS.m:
function [y_hat,e,w] = MyLms(step, nr_c, x, y)
%intializing all vectors
coeffs=zeros(1,nr_c);
x_temp=zeros(1,nr_c);
y_hat=zeros(length(x),1);
e=zeros(length(x),1);
for i=1:length(x)
%temporary vector formation
x_temp(1:nr_c-1)=x_temp(2:nr_c);
x_temp(nr_c)=x(i);
%LMS algorithm iterations
y_hat(i) = x_temp * coeffs';
e(i)= y(i) - y_hat(i);
coeffs = coeffs+step*e(i)*x_temp;
end
答案 0 :(得分:1)
我绝不是LabVIEW FGPA专家,但我认为您在VHDL中会遇到非常类似的限制。
无论如何,访问子阵列的典型技术是using rotate and replace subset(参见Joel_G的帖子)。有关FPGA约束和功能的更多信息,请参阅帮助文档:Array Palette Details (FPGA Module)。