LabVIEW fpga中的LMS实现(高吞吐量个性化)

时间:2015-10-22 11:00:07

标签: arrays audio signal-processing fpga labview

不得不对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仅支持一维数组操作。

  1. 尽管自适应过滤器工具包托盘在myRIO FPGA高吞吐量特性中可用,但我无法在myRIO Target上安装Adaptive Filter Toolkit。!!!

    3.在MyLMS程序中:x:输入向量(数组),y:所需信号,nr_c:滤波器系数数,步长:步长。我希望你理解其余的程序:)

  2. 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
    

1 个答案:

答案 0 :(得分:1)

我绝不是LabVIEW FGPA专家,但我认为您在VHDL中会遇到非常类似的限制。

无论如何,访问子阵列的典型技术是using rotate and replace subset(参见Joel_G的帖子)。有关FPGA约束和功能的更多信息,请参阅帮助文档:Array Palette Details (FPGA Module)

相关问题