变步长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');
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');
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询