lms算法输出数据画不出频谱图_时域LMS和频域LMS算法比较

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';

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值