在讲频域分块LMS之前建议大家回顾一个时域分块LMS算法

时域分块LMS:

Block  LMS的误差计算 和 权重更新公式中,

:输出信号是输入信号与滤波器系数的线性卷积

:更新梯度是误差信号与输入信号的线性相关

对于线性卷积和线性相关的运算量较大,特别是在当回声路径很长且复杂,并且回声延迟较高时,时域自适应滤波算法中的线性卷积线性相关运算量较大,导致计算复杂度升高,我们更愿意把这两个信号变换到频域,通过频域相乘的方式来取代时域复杂度相当高的卷积或相关运算。所以我们把时域自适应滤波算法,衍生到频域自适应滤波算法。

预备知识:线性卷积(相关)和圆周(循环)卷积(相关)之间的关系

  1. 一般的,如果两个有限长序列的长度为N1和N2,且满足N1≥N2,则有圆周卷积 N1−N2+1个点,与线性卷积的结果一致。
  2. 一般的,如果两个有限长序列的长度为N1和N2,且满足N1≥N2,则有圆周相关 N1−N2+1个点,与线性相关的结果一致。
  3. 时域中的圆周卷积对应于其离散傅里叶变换的乘积
  4. 时域中的圆周相关对应于其离散傅里叶变换共轭谱的乘积
  5. 在利用循环卷积计算线性卷积时,为了防止混叠,首先要将输入信号长度N1和滤波器系数长度N2,补零至长度大于等于L(L=N1−N2+1)

因此我们需要将分块LMS自适应滤波算法中的线性卷积线性相关 通过快速傅里叶变换(FFT)转换到频域来实现。这样实现的分块LMS自适应滤波算法称为频域块LMS自适应滤波算法(FDAF,Frequency-Domain Block Least Mean Square Adaptive Filter)。FDAF算法将长度为L的自适应滤波器分成FFT长度的整数倍个子块,对输入信号的每个子块进行频域内的LMS算法。

第一步:计算线性卷积

利用FFT计算线性卷积的方法有:

  • 重叠存储法(overlap save method,更常用)
  • 重叠相加法(overlap add method)

我们这里以overlap save method为例,为了确保能得到N个点的线性卷积输出信号,我们至少要保证有N个点的线性卷积和圆周卷积的结果一致(预备知识)

由于N1≥N2 (输入信号长度N1通常大于滤波器的阶数N2),且N2=N (滤波器的阶数为N),那么要求每次参与运算的输入信号长度N1至少为2N−1(N1=N+N2-1=2N+1),为了计算FFT方便,我们令输入信号的长度为:N1=2N,那么我们FFT的长度也为2N

为了构造长度为2N的数据,我们需要在每个N阶滤波器后面N补零

要求线性卷积(预备知识1),我们就需要求圆周卷积后N1−N2+1个点,根据预备知识3,我们只需要求离散傅里叶变换的乘积就能得到圆周卷积的结果,接下来我们分别计算输入信号向量和滤波器系数向量的FFT:

第二步:计算线性相关

根据预备知识2,4可知,需要求线性相关,我们可以通过获得圆周相关来获得。因此我们需要求输入信号的共轭谱与误差信号谱的乘积

输入信号X(k)在上一步处理卷积运算是已经求得。

第三步:滤波器系数更新

注意:

  • 第一,滤波器系数直接在频域更新,所以需要将梯度向量再次变换到频域;
  • 第二,由于滤波器系数向量后面补了N 个零 ,为了保证结果的正确性梯度向量也需要在后面补 N 个零。

  • 优点

    • 降低了时域自适应滤波器的计算复杂度
    • 提高了收敛速度
  • 缺点
    • 增加了延迟(需要通过频域滤波器延迟期望信号)
    • 增加了内存需求(需要同时存储激励信号和期望信号)

如前所述,回声消除等应用回波路径较长,会导致较大的延迟和存储需求。该缺点可以通过诸如多延迟自适应滤波器之类的方法来克服。在这种方法中,块大小可以小于所需的时域自适应滤波器,并且可以应用每个频点中的自适应滤波器来代替单个系数。因此,可以减轻FDAF的缺点,同时保持降低的计算复杂性和提高的收敛速度。

对于长脉冲响应,传统FDAF在数值上比时域自适应滤波更有效,但是由于输入帧大小必须是指定滤波器长度的倍数,因此它具有高延迟。对于许多实际应用程序来说,这可能是不可接受的。通过使用分区的FDAF可以减少延迟,该方法将过滤器脉冲响应分为较短的部分,将FDAF应用于每个部分,然后合并中间结果。在这种情况下,帧大小必须是分区(块)长度的倍数,从而大大减少了长脉冲响应的等待时间。

MATLAB代码如下:

% 参考:https://github.com/CharlesThaCat/acoustic-interference-cancellation
function [en, yk, W] = myFDAF(d,x,mu,mu_unconst, M, select)
% 参数:
% d                输入信号(麦克风语音)
% x                远端语音
% mu                约束 FDAF的步长
% mu_unconst        不受约束的 FDAF的步长
% M                 滤波器阶数
% select;            选择有约束或无约束FDAF算法
%
% 参考:
% S. Haykin, Adaptive Filter Theory, 4th Ed, 2002, Prentice Hall
% by Lee, Gan, and Kuo, 2008
% Subband Adaptive Filtering: Theory and Implementation
% Publisher: John Wiley and Sons, Ltdx_new = zeros(M,1);     % 将新块的M个样本初始化为0
x_old = zeros(M,1);     % 将旧块的M个样本初始化为0AdaptStart = 2*M;       % 在获得2M个样本块后开始自适应
W = zeros(2*M,1);       % 将2M个滤波器权重初始化为0
d_block = zeros(M,1);   % 将期望信号的M个样本初始化为0power_alpha = 0.5;        % 常数以更新每个frequency bin的功率
power = zeros(2*M,1);   % 将每个bin的平均功率初始化为0
d_length = length(d);             % 输入序列的长度
en = [];                       % 误差向量
window_save_first_M = [ones(1,M), zeros(1,M)]';  % 设置向量以提取前M个元素 (2M,1)for k = 1:d_lengthx_new = [x_new(2:end); x(k)];         % 开始的输入信号块 (2M,1)d_block = [d_block(2:end); d(k)];     % 开始的期望信号快 (M,1)if mod(k,M)==0                        % If iteration == block length, x_blocks = [x_old; x_new];        % 2M样本的输入信号样本块 (2M,1)x_old = x_new;if k >= AdaptStart                % 频域自适应滤波器% 将参考信号转换到频域Xk = fft(x_blocks);     % (2M,1)% FFT[old block; new block]% Old block 包含M个先前的输入样本 (u_old)% New 包含M个新的输入样本 (u_new)% 计算滤波器估计信号Yk = Xk.*W;                  % 输入和权重向量的乘积(2M,1)*(2M,1)=(2M,1)temp = real(ifft(Yk));            % IFFT 输出的实部 (2M,1)yk = temp(M+1:2*M);               % 抛弃前M个元素,保留后M个元素 (M,1)% 计算误差信号error = d_block-yk;              % 误差信号块 (M,1)Ek = fft([zeros(1,M),error']');   % 在FFT之前插入零块以形成2M块(2M,1)% 更新信号功率估算power = (power_alpha.*power) + (1 - power_alpha).*(abs(Xk).^2); % (2M,1)% 计算频域中的梯度和权重更新if select == 1gradient = real(ifft((1./power).*conj(Xk).* Ek));   % (2M,1)gradient = gradient.*window_save_first_M;   % 去除后一个数据块,并且补零 (2M,1)W = W + mu.*(fft(gradient));    % 权重是频域的 (2M,1)elsegradient = conj(Xk).* Ek;   %  (2M,1)W = W + mu_unconst.*gradient;    % (2M,1)enden = [en; error];             % 更新误差块endend
end

学习速率如何选取

我们在推导频域自适应滤波方法的时候,为了简化问题,将每一个frequency bin 上的学习速率均设为常数μ。

在实际工程应用中,用的更多的一种方法是,对第m个 frequency bin ,利用输入信号在这个频点的功率 对学习速率Pm(k)进行归一化:

频点功率Pm(k)通常采用迭代的方式求得:

参考链接:

https://www.cnblogs.com/LXP-Never/p/11773190.html

自适应滤波器原理——频域分块LMS算法(FDAF)相关推荐

  1. 4)自适应滤波(一)[LMS算法]

    目录 一.LMS算法 1.滤波器--改变信号频谱 模拟滤波器: 数字滤波器: 2.自适应滤波器简介 自适应滤波器: 非自适应滤波器: 自适应滤波器应用: 自适应滤波场景: 自适应滤波处理逻辑(处理非平 ...

  2. 自适应滤波器:维纳滤波器3——GSC算法及语音增强

    本文转载自:http://www.cnblogs.com/xingshansi/p/6621185.html 前言 仍然是西蒙.赫金的<自适应滤波器原理>第四版第二章,首先看到无约束维纳滤 ...

  3. 自适应滤波器:最小均方误差(LMS)滤波器

    自适应算法所采用的最优准则有最小均方误差(LMS)准则,最小二乘(LS)准则.最大信噪比准则和统计检测准则等,其中最小均方误差(LMS)准则和最小二乘(LS)准则是目前最为流行的自适应算法准则. x( ...

  4. 自适应滤波器原理——新息过程

    10.1 标量随机变量的递归最小均方估计 新息概念:计算递归估计过程. 定义前向预测误差: ├f(n−1)(n)=y(n)−ŷ (n|Y(n−1))n=1,2,...├f(n−1)(n)=y(n)− ...

  5. 自适应滤波器原理第四版计算机实验,自适应滤波器原理(中文第4版)答案

    代码片段和文件信息 属性            大小     日期    时间   名称 ----------- ---------  ---------- -----  ---- 文件      5 ...

  6. LMS自适应滤波器算法及其改进

    -- 年初DSP课程期末设计时为了答辩做的PPT,内容背的滚瓜烂熟,给老师留下了深刻的印象,想必整个系也没有第二个人像我这么上心了,因此最后决定把PPT放到博客上:此外因为不希望PPT上有太多字,所以 ...

  7. 自适应滤波器算法综述以及代码实现

    作者:凌逆战 文章地址:自适应滤波器算法综述以及代码实现 - 凌逆战 - 博客园 并不是每个自适应滤波器的的代码我都实现了,我需要一定的时间,一有时间我就会来更新代码,记得关注我,如果有问题记得反馈 ...

  8. 【老生谈算法】matlab实现LMS算法的自适应滤波算法源码——自适应滤波

    基于matlab的LMS算法的自适应滤波 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]基于LMS的MATLAB大作业.do ...

  9. 自适应滤波器:递归最小二乘(RLS)

    本文转载自:http://www.cnblogs.com/xingshansi/p/6664478.html 前言 西蒙.赫金的<自适应滤波器原理>第四版第九章:递归最小二乘(Recurs ...

最新文章

  1. TL-ER5120路由器配置文档
  2. typedef的用法
  3. Linux打开txt文件乱码的解决方法
  4. java md5.computehash_c# – ObjectDisposedException使用MD5 ComputeHash时
  5. sap生产工单报工_【案例】MES系统助力亨通电缆车间生产效率提升25%
  6. 阻止默认事件,浏览器滚动回弹,
  7. 小米首登福布斯2000榜单 排名426位!
  8. RecycleView添加适配器的监听事件
  9. 编程修养 阅读笔记三
  10. Visualize real-time data streams with Gnuplot
  11. 曝光!人工智能行业薪酬到底有多高?
  12. vue项目之不一样的axios封装(+防抖函数)
  13. android 关闭服务代码,android – 调用stopService方法时,服务不会停止
  14. wpa_supplicant中配置TTLS网络的phase2参数
  15. Adobe PDF 虚拟打印机Acrobat Distiller 9.0 错误的解决
  16. Java调用WebService接口实现发送手机短信验证码功能,java 手机验证码,WebService接口调用
  17. u盘上传百度网盘照片显示服务器错误,百度云上传文件失败怎么办-百度云上传文件失败的解决方法 - 河东软件园...
  18. 【愚公系列】2022年06月 ASP.NET Core下CellReport报表工具基本介绍和使用
  19. 5W2H工作法,使工作更有条理,生活更好梳理
  20. 与文本内容无关的说话人识别概述——从特征到超矢量

热门文章

  1. 海天酱油开展品质革命,让中国美味走出国门
  2. Beaglebone Black学习(一)
  3. getParameters failed (empty parameters) 问题解决
  4. 计算机技能测试题五,计算机技能测试题一
  5. 关于path变量配置出现LRE的问题
  6. java设计运动会成绩_java毕业设计_springboot框架的运动会成绩管理
  7. canvas 图像旋转与翻转姿势解锁
  8. Java 堆内存泄漏分析的一个例子
  9. easyui linkbutton设置不可点击
  10. 计算机晚会安排,计算机与信息工程学院2019年迎新晚会举行