lms的c语言程序,关于LMS算法的一个很简单的程序 - 信息科学 - 小木虫 - 学术 科研 互动社区...

请大神帮我看看我写的几行代码,MSD的变化太小,与文献对不上,明明很简单的,哎。。。

内容如下:

输入信号和噪声是方差分别为1和10^-3的零均值的高斯白噪声,时变稀疏系统有16个抽头,取第五个抽头值为1,其余为0,步长mu=0.05,迭代500次

画出MSD与迭代次数的学习曲线。

我写的程序:

%% 初始化

clc,clear all;

mu=0.05;                                          % 步长

N=16;                                               % 信道时域系数个数

input_signal_variance=1;                   % 输入信号方差

noise_variance=10^-3;                      % 噪声方差

inter=500;                                         % 迭代次数分别为500

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%前500次迭代

w=zeros(N,1);                                     % 初始时刻,稀疏信道脉冲响应

w_initial=w;

w_initial(5,1)=1;                                 % 第5个抽头值为1

w_opt=w_initial;                                 % 记录所要得到的稀疏系数向量w~(n),便于求MSD,MSE

%% 产生零均值,方差为1/10^-3的高斯噪声x(n)和v(n)

% 产生高斯分布的N*1的输入信号x(n)

b=randn(N,1);

b=b/std(b);

b=b-mean(b);

c=0;

d=sqrt(input_signal_variance);

x=c+d*b;

% 产生高斯分布的噪声v(n)

t=randn(inter_3,1);

t=t/std(t);

t=t-mean(t);

c=0;

f=sqrt(noise_variance);

v=c+f*t;

%% 未迭代

sum=0;

MSD=[];

inter=0;

for n=1:N                                      %求MSD

error=(abs(w(n)-w_opt(n)))^2;

sum=sum+error;

end

MSD(inter+1)=sum;

%% 开始迭代--LMS

for inter=1:inter

y=w'*x+v(inter);                               % 输出信号y(n)

e=w_opt'*x-y;                                       % 误差

w=w+mu*e*x;                                    % 更新公式

sum=0;

for n=1:N                                           %求MSD

error=(abs(w(n)-w_opt(n)))^2;

sum=sum+error;

end

MSD(inter+1)=sum;

end

inter=0:inter;

plot(inter,MSD);

axis([0 inter 0 1]);

grid on;

xlabel('interation');

ylabel('MSD');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值