曹宇飞 发表于 2015-1-9 16:45:42

LMS、LMS/DFT、LMS/DCT、卡尔曼滤波、AR谱分析和小波变换程序

通信方向的研究生必修课,现代数字信号处理中,处理信号几种常用的方法。不仅能加深对方法的理解,还能为初学MATLAB的同学提供上手的绝佳程序,欢迎大家积极讨论和下载!大牛们也可以补充更为科学的源程序!

程序较多,就只在下面贴上一部分代码,其他代码和源程序在附件中,供大家下载!ps:效果图在附近文档中有,这里po不上来,请原谅!



1、运用LMS基本算法以及LMS/DFT和LMS/DCT对含有噪声的信号进行处理,期望提取出有用信号。

LMS基本算法

clear all;

M=64;N=8*M;mu=0.001;

W=zeros(1,M);

signal=sin(2*pi*0.01*);

noise=randn(1,N);

x=signal+noise;

d=signal;

for k=1:length(x)-M+1;

y(k)=sum(W.*fliplr(x(k:M+k-1)));

e(k)=d(M+k-1)-y(k);

W=W+2*mu*e(k)*fliplr(x(k:M+k-1));

end

k=0:N-1;

subplot(121);plot(k,x);grid;

k=M-1:N-1;

subplot(122);plot(k,y);grid;






2、LMS/DFT算法

clear all;

M=64;N=8*M;mu=0.001;

W=zeros(1,M);

signal=sin(2*pi*0.01*);

noise=randn(1,N);

x=signal+noise;

d=signal;

X=zeros(1,M);P=zeros(1,M);

u=zeros(1,M);

delta=0.01;gamma=0.9;

for k=1:length(x)-M;

for m=1:M

X(m)=(exp(-i*2*pi*m/M)*X(m)+x(k+M)-x(k))/M^0.5;

P(m)=gamma*P(m)+(1-gamma)*X(m)*conj(X(m));

u(m)=X(m)/(P(m)+delta)^0.5;

end

y(k)=sum(W.*fliplr(u));

e(k)=d(M+k)-y(k);

W=W+2*mu*e(k)*fliplr(conj(u));

end

k=0:N-1;

subplot(121);plot(k,x);grid;

k=M:N-1;

subplot(122);plot(k,y);grid;






李金梁 发表于 2015-1-14 13:29:02

正在学习现代数字信号处理,不错!下个看看!

上一站,守护 发表于 2015-1-14 16:08:35

很好用,不错

西瓜大de籽 发表于 2015-12-12 14:42:34

谢谢楼主
页: [1]
查看完整版本: LMS、LMS/DFT、LMS/DCT、卡尔曼滤波、AR谱分析和小波变换程序