matlab中lms m,LMS算法仿真(Matlab)
程序1:基本LMS算法
% 该程序实现时域LMS算法,并用统计的方法仿真得出不同步长下的收敛曲线
clear % 清空变量空间
g=100; % 统计仿真次数为g
N=1024; % 输入信号抽样点数N
k=128; % 时域抽头LMS算法滤波器阶数
pp=zeros(g,N-k); % 将每次独立循环的误差结果存于矩阵pp中,以便后
% 面对其平均
u=0.001; % 收敛因子
for
q=1:g
t=1:N;
a=1;
s=a*sin(0.5*pi*t); % 输入单频信号s
figure(1);
plot(t,real(s)); % 信号s时域波形
title('信号s时域波形');
xlabel('n');
ylabel('s');
axis([0,N,-a-1,a+1]);
xn=awgn(s,3);
% 加入均值为零的高斯白噪声,信噪比为3dB
% 设置初值
y=zeros(1,N); % 输出信号y
y(1:k)=xn(1:k); % 将输入信号xn的前k个值作为输出y的前k个值
w=zeros(1,k); % 设置抽头加权初值
e=zeros(1,N); % 误差信号
%
用LMS算法迭代滤波
for
i=(k+1):N
XN=xn((i-k+1):(i));
y(i)=w*XN';
e(i)=s(i)-y(i);
w=w+u*e(i)*XN;
end
pp(q,:)=(e(k+1:N)).^2;
end
for b=1:N-k
bi(b)=sum(pp(:,b))/g; % 求误差的统计平均
end
figure(2); % 算法收敛曲线
t=1:N-k;
plot(t,bi);
hold
off % 将每次循环的图形显示结果保存下来
程序2 归一化LMS算法
MATLAB程序实现如下:
1.
NLMS算法1次实验
% N=训练序列长度
% u=收敛因子
clear;
N=500;
db=20;
sh1=sqrt(10^(-db/10));
u=1;
error_s=zeros(1,N);
for loop=1:1
w=0.05*ones(1,11)';
V=sh1*randn(1,N );
K=randn(1,N)-0.5;
x=sign(K);
for
n=3:N;
M(n)=0.3*x(n)+0.9*x(n-1)+0.3*x(n-2);
end
z=M+V;
for
n=8:N;
d(n)=x(n-7);
end
a(1)=z(1)^2;
for
n=2:11;
a(n)=z(n).^2+a(n-1);
end
for
n=12:N;
a(n)=z(n).^2-z(n-11)^2+a(n-1);
end
for
n=11:N;
z1=[z(n)
z(n-1) z(n-2) z(n-3) z(n-4) z(n-5) z(n-6) z(n-7) z(n-8) z(n-9)
z(n-10)]';
y(n)=w'*z1;
e(n)=d(n)-y(n);
w=w+u./(eps+a(n)).*z1.*conj(e(n));
end
error_s=error_s
+e.^2;
end
w
error_s=error_s./1;
n=1:N;
plot(n,error_s);
xlabel('n
(当u=1;DB=20时)');
ylabel('e(n)^2');
title('NLMS算法1次实验误差平方的均值曲线');
2.NLMS算法20次实验
clear;
N=500;
db=20;
sh1=sqrt(10^(-db/10));
u=1;
error_s=zeros(1,N);
for loop=1:20
w=0.05*ones(1,11)';
V=sh1*randn(1,N );
K=randn(1,N)-0.5;
x=sign(K);
for
n=3:N;
M(n)=0.3*x(n)+0.9*x(n-1)+0.3*x(n-2);
end
z=M+V;
for
n=8:N;
d(n)=x(n-7);
end
a(1)=z(1)^2;
for
n=2:11;
a(n)=z(n).^2+a(n-1);
end
for
n=12:N;
a(n)=z(n).^2-z(n-11)^2+a(n-1);
end
for
n=11:N;
z1=[z(n)
z(n-1) z(n-2) z(n-3) z(n-4) z(n-5) z(n-6) z(n-7) z(n-8) z(n-9)
z(n-10)]';
y(n)=w'*z1;
e(n)=d(n)-y(n);
w=w+u./(eps+a(n)).*z1.*conj(e(n));
end
error_s=error_s
+e.^2;
end
w
error_s=error_s./20;
n=1:N;
plot(n,error_s);
xlabel('n
(当u=1;DB=20时)');
ylabel('e(n)^2');
title('NLMS算法20次实验误差平方的均值曲线');
基于LMS算法的系统辨识
clear
clc
ee=0;
fs=800;
det=1/fs;
f1=100;
f2=200;
t=0:det:2-det;
x=randn(size(t))+cos(2*pi*f1*t)+cos(2*pi*f2*t);
%未知系统
[b,a]=butter(5,150*2/fs);
d=filter(b,a,x);
%自适应FIR滤波器
N=5;
delta=0.06;
M=length(x);
y=zeros(1,M);
h=zeros(1,N);
for
n=N:M
x1=x(n:-1:n-N+1);
y(n)=h*x1';
e(n)=d(n)-y(n);
h=h+delta.*e(n).*x1;
end
X=abs(fft(x,2048));
Nx=length(x);
kx=0:800/Nx:(Nx/2-1)*(800/Nx);
D=abs(fft(d,2048));
Nd=length(D);
kd=0:800/Nd:(Nd/2-1)*(800/Nd);
Y=abs(fft(y,2048));
Ny=length(Y);
ky=0:800/Ny:(Ny/2-1)*(800/Ny);
figure(1);
subplot(3,1,1)
plot(kx,X(1:Nx/2));xlabel('Hz')
title('原始信号频谱')
subplot(3,1,2)
plot(kd,D(1:Nd/2))
title('经未知系统后信号频谱');xlabel('Hz')
subplot(3,1,3)
plot(ky,Y(1:Ny/2))
title('经自适应FIR滤波器后信号频谱');xlabel('Hz')
matlab中lms m,LMS算法仿真(Matlab)相关推荐
- matlab中emd函数,EMD算法的matlab程序介绍解析
<EMD算法的matlab程序介绍解析>由会员分享,可在线阅读,更多相关<EMD算法的matlab程序介绍解析(6页珍藏版)>请在人人文库网上搜索. 1.此版本为 ALAN 版 ...
- matlab中值滤波法算法,基于MATLAB中值滤波算法的优化与实现
总第238期2014年第4期 舰 船 电 子 工 程 Ship Electronic Engineering Vol.34No.437 基于 MATLAB中值滤波算法的优化与实现* 赵建春 刘力源 ( ...
- MATLAB 用LMS算法实现语音去噪,在Matlab中实现基于LMS算法语音信号去噪
ComputerKnowledgeand Technology 电脑知识与技术 第10卷第32期 (2014年11月) 本栏目责任编辑:谢媛媛软件设计开发 在Matlab中实现基于LMS算法语音信号去 ...
- (转载)基于TDOA声源定位算法仿真–MATLAB仿真
(转载)基于TDOA声源定位算法仿真–MATLAB仿真 转载自:https://blog.xxcxw.cn/archives/28 声源定位算法是利用麦克风阵列进行声音定位,属于宽带信号,传统的MUS ...
- MATLAB路面裂缝检测识别算法仿真
MATLAB路面裂缝检测识别算法仿真 在道路养护中,路面的裂缝是最常见的问题之一.对于路面裂缝的自动化检测和识别已经成为了一个研究热点.本文提出的基于MATLAB的路面裂缝检测识别算法能够减少人力.时 ...
- 信号分选SDIF算法仿真matlab
信号分选SDIF算法仿真matlab SDIF算法介绍 SDIF算法仿真 SDIF算法部分代码 SDIF算法介绍 序列差直方图法(SDIF)是一种基于CDIF的改进算法.SDIF与CDIF的主要区别是 ...
- matlab的数值计算方法,数值计算方法中的一些常用算法的Matlab源码
数值计算方法中的一些常用算法的Matlab源码,这些程序都是原创,传上来仅供大家参考,不足之处请大家指正,切勿做其它用途-- 说明:这些程序都是脚本函数,不可直接运行,需要创建函数m文件,保存时文件名 ...
- MATLAB 中的机械臂算法——运动学
MATLAB 中的机械臂算法--运动学 机械臂算法 MATLAB 在 2016 年就推出了 Robotics System Toolbox(RST),其中有很多关于机械臂方面的算法.而且随着客户需求的 ...
- matlab中 y =ft(x)的意思,matlab中y=fft(x)语句的意思
matlab傅里叶变换中fft(x,n),x,n分别是什么含义? fft(x,n)是一维快速傅里叶变换,x相当于信号,n是变换点数.离散傅里叶变换DFT的快速算法就是FFT. matlab中FFT函数 ...
- matlab中e用什么表示什么,matlab中e怎么表示
方法/步骤 1.自然数对数 log(x) 我们在MATLAB主窗口中输入a1=log(2.7183),回车,我们可以看到a1近似为1,e约等 于2. MATLAB中 如何输入对数函数? 方法/步骤 1 ...
最新文章
- brew gd php_PHPBrew 使用指南
- 浅析Unity中的Enlighten与混合光照
- 元气森林难撕“网红”标签
- windows2008文件服务器端口,windows server 2008 文件服务器不定期出现大量CLOSE_WAIT状态的连接,必须重启服务器,客户端才能访问共享。...
- Java ASM与Javassit
- 远控免杀专题6---Venom免杀
- jQuery——高级(js对象、json、ajax)
- 邀请和建议的回答_46
- do...while(); 语句在宏定义中的应用。
- [生活日记] 社会真的这么乱?尼姑也行骗,道德何在
- 动漫版宫心计:快看漫画VS动漫之家
- 【历史上的今天】3 月 1 日:个人计算机鼻祖问世;天涯社区上线;Shell 排序算法作者诞生
- PowerPoint.Application win32 操作ppt 复制 新建 插入图片
- 给ssh服务添加谷歌双重认证
- 常识介绍---什么是rss
- 如何修改默认的FTP帐号或密码
- FM,FMM,deepFFM模型总结,深度排序模型
- 论 Erda 的安全之道
- UTL_FILE详解
- 拼多多关键字搜索,拼多多商品列表,根据关键词取商品列表