lmsmatlab代码(lstmmatlab代码)
admin 发布:2022-12-19 12:39 121
本篇文章给大家谈谈lmsmatlab代码,以及lstmmatlab代码对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
变步长LMS自适应滤波算法的MATLAB程序
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实现频域块LMS算法
先对t离散化,然后FFT,再画个幅频和相频就可以了。
不过貌似你这个式子有点问题,randn产生1*1024的高斯噪声已经指定了s的维数了,所以t必须去1024个离散值,限定了t的取值了。
你可以参考下面的程序,建议你看懂之后自己编一下。
这是对sin(x)求幅频相频
%用fft求幅频相频
clc;%清空
clearall;%清除所有变量
closeall;%关闭所有窗口
A=10;%振幅
fw=50;%固有频率
phi=pi/3;%相位
step=1000;
t=0:1/step:10*pi;%时间t
y=A*sin(2*pi*fw*t+phi);%正弦函数y
f=step*(0:256)/512;%频率
subplot(3,1,1);%三行一列第一幅图
plot(t,y);%绘制图形
xlabel('t/s','fontsize',13);%横坐标显示t/s,字号13
ylabel('y','fontsize',13);%纵坐标显示y,字号13
title('正弦函数曲线','fontsize',13);%显示标题
Y=fft(y,512);%对y进行傅里叶变换
subplot(3,1,2);%三行一列第二幅图
plot(f,abs(Y(1:257)));%绘制图形
xlabel('f/Hz','fontsize',13);%横坐标显示f/Hz,字号13
ylabel('幅值','fontsize',13);%纵坐标显示幅值,字号13
title('幅频特性曲线','fontsize',13);%显示标题
[value,index]=max(abs(Y));%将abs(Y)最大值点的横坐标、纵坐标分别赋给
value和index
text(f(index),value,sprintf('maxpiont=(%f,%f)',f(index),value),'fonts
ize',13);%显示最大值点坐标
subplot(3,1,3);%三行一列第三幅图
plot(f,angle(Y(1:257))*180/pi);%绘制图形
xlabel('f/Hz','fontsize',13);%横坐标显示f/Hz,字号13
ylabel('相位/°','fontsize',13);%纵坐标显示相位/°,字号13
title('相位特性曲线','fontsize',13);%显示标题
matlab关于LMS程序
你好,
根据你的代码操作,你把这句
y = W(:,k-1).' * x; % 滤波器的输出
改成:
y = W(:,k-1)* x; % 滤波器的输出
另外,还是同样的问题,
yn(k) = W(:,end).'* x;
改成:
yn(k) = W(:,end)* x;
这样应该可以了
MATLAB实现LMS学习算法
clc;
clear all;
load msesample;
n1=length(x1);
n2=length(x2);
x=[x1;x2];
e=ones(length(x),1);
y=[e x];
b=e;
%b=rand(length(x),1);
yita=1;
eps=0.01;
yy=inv(y'*y)*y';
result=yy*b;
for i=n2:length(x)
y(i,:)=y(i,:).*(-1);
end
a=[1;2;1];
an=zeros(3,100);
an(:,1)=a;
flat=zeros(length(x),1);
n=1;
while(n=100)
for i=1:length(x)
if y(i,:)*an(:,n)=b(i)
an(:,(n+1))=an(:,n)+y(i,:)'*(b(i)-y(i,:)*an(:,n))*yita/n;
end
end
if abs(an(:,(n+1))-an(:,n))=eps
break;
else
n=n+1;
end
end
n
w=an(:,n)
ne=0;
for i=1:length(x)
if y(i,:)*wb(i)
ne=ne+1;
end
end
ne
pe=ne/length(x)
subplot(1,2,1)
plot(x1(:,1),x1(:,2),'bo',x2(:,1),x2(:,2),'ro');
hold on
syms xa xb;
g=w(1)+w(2)*xa+w(3)*xb;
ezplot(g);
title('最小均方误差判决')
legend('第一类样本','第二类样本')
gtext(strcat('错误率为:',num2str(pe)),'Fontsize',8)
subplot(1,2,2)
hold on
i=1:n;
plot(i,an(:,i));
title('权向量')
xlabel('迭代次数')
ylabel('权向量取值')
lmsmatlab代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于lstmmatlab代码、lmsmatlab代码的信息别忘了在本站进行查找喔。
版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;
相关推荐
- 05-09网页代码,网页代码快捷键
- 05-06单页网站的代码(完整的网页代码)[20240506更新]
- 05-06个人主页图片代码(个人主页图片代码怎么弄)[20240506更新]
- 05-06提取微信名片代码(微信名片信息提取)[20240506更新]
- 05-06php后台权限管理代码(php管理员权限)[20240506更新]
- 05-06付费观看代码php(付费观看代码)[20240506更新]
- 05-06在线html执行代码(html怎么运行)[20240506更新]
- 05-06源代码管理资源管理器(资源管理器运行代码)[20240506更新]
- 05-06代码源软件库(程序代码库)[20240506更新]
- 05-06点击弹出密码代码(点击弹出密码代码错误)[20240506更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接