当前位置:首页 > 代码 > 正文

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站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/8235.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载