LMS频域实现中, 将参考信号分割成N长(自适应滤波器的阶数)的块, 权系数的更新每N个样点进行一次, 而每次的更新是由N个误差信号样点累加结果控制的, 这既保证了与时域LMS算法有相同的收敛速度, 同时可以利用快速技术, 用序列的循环卷积来计算线性卷积, 从而大幅度地减少运算量。
对每N点的输入序列,FLMS算法需要5个2*N点的FFT(包含IFFT)计算和2个2*N点的复数相乘。每个N点需要N/2*log2(N)个复数乘法, 对于实输人序列由于的对称特性, 以又可以将运算量减半。对于时域的LMS算法, 共需要个2*N^2实数乘法。每个复数乘法按4个实数乘法计算, 则FLMS的运算量与LMS的运算量的比值为:
f(N) = (5*log2(N) + 13) / N
下面直接给出LMS和FLMS的Matlab程序。
lms滤波函数:
function [h,y,e] = lmsFunc(x,d,u,N)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%lms滤波函数 edit by lxy /2017.04.28 /http://www.52matlab.com
%input x: 信号序列
%input d: 期望信号序列
%input u: 步长
%input N: 滤波器阶数
%output h: 估计的fir滤波器系数
%output y: 滤波后输出信号
%output e: 误差序列
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
M = length(x);
y = zeros(1,M);
h = zeros(1,N);
e = zeros(1,M);
for k = N:M
procx = x(k:-1:k-N+1);
y(k) = h*procx';
lms算法输出数据画不出频谱图_时域LMS和频域LMS算法比较
最新推荐文章于 2023-07-09 14:52:02 发布
本文介绍了LMS(Least Mean Squares)算法和FLMS(Frequency Domain LMS)算法的原理和在频谱分析中的应用。通过Matlab程序展示了两种算法的滤波效果,并指出FLMS在运算量上的优势,但可能在算法起始阶段误差较大,建议根据实际情况结合LMS算法使用。
摘要由CSDN通过智能技术生成