变步长LMS自适应滤波算法的MATLAB程序

变步长LMS自适应滤波算法的MATLAB程序,第1张

clear all

close all

N=10%滤波器阶数

sample_N=500%采样点数

A=1%信号幅度

snr=10%信噪比

t=1:sample_N

length_t=100%期望信号序列长度

d=A*sin(2*pi*t/length_t)%期望信号猜李腊

M=length(d)%M为接收数据长度

x=awgn(d,snr)%经过信道(加噪声)

delta=1/(10*N*(A^2))%计算能够使LMS算法收敛的delta

y=zeros(1,M)

h=zeros(1,N)%LMS滤波器系数

h_normalized=zeros(1,N)%归一化LMS滤波器系数

y1=zeros(1,N)

for n=N:M %系数调整LMS算法

x1=x(n:-1:n-N+1)

%LMS算法

y(n)=h*x1'

e(n)=d(n)-y(n)

h=h+delta*e(n)*x1

%NLMS算法扰森

y_normalized(n)=h_normalized*x1'

e_normalized(n)=d(n)-y_normalized(n)

h_normalized=h_normalized+e_normalized(n)*x1/(x1*x1')

end

error=e.^2%LMS算穗滑法每一步迭代的均方误差

error_normalized=e_normalized.^2%NLMS算法每一步迭代的均方误差

for n=N:M %利用求解得到的h,与输入信号x做卷积,得到滤波后结果

x2=x(n:-1:n-N+1)

y1(n)=h*x2'

y2(n)=h_normalized*x2'

end

subplot(411)

plot(t,d)

axis([1,sample_N,-2,2])

subplot(412)

plot(t,x)

subplot(413)

plot(t,y)

subplot(414)

plot(t,y_normalized)

figure(2)

plot(t,error,'r',t,error_normalized,'b')

matlab for循环的时候本质是类似如下的 *** 作

for j=A

xxx

end

A就源旦是一个向量。j遍历向量A里的每个元素。雹尘扰

你这里的这个向量就是1:i:40,这个向量在开始进行for循环的时候兄行,就定死了。这个时候i=1,所以就是1:1:40,就是[1 2 3 ... 40]你后面再去改这个i,不会影响这个向量了。

你想改变步长就用while循环吧。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12398604.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存