導航:首頁 > 源碼編譯 > lms演算法的matlab程序

lms演算法的matlab程序

發布時間:2022-09-02 18:06:47

『壹』 如何用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);%顯示標題

『貳』 急求懂LMS演算法的MATLAB高手幫忙!!!萬分感激

clear all;
g=100;
N=256;
k=16;
pp=zeros(g,N-k);
u=0.01;
for q=1:g,
t=1:N;
a=1;
s=a*sin(0.05*pi*t);
figure(1);
subplot(3,1,1)
plot(t,real(s));
title('信號s時域波形');
xlabel('n');
ylabel('s');
axis([0,N,-a-1,a+1]);
xn=awgn(s,5);
y=zeros(1,N);
y(1:k)=xn(1:k);
w=zeros(1,k);
e=zeros(1,N);
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
subplot(3,1,2)
plot(t,real(xn));
title('信號s加雜訊後的時域波形');
subplot(3,1,3)
plot(t,real(y));
title('自適應濾波後的輸出時時域波形');
for c=1:N-k;
bi(c)=sum(pp(:,c))/g;
end;
figure(2);
T=1:N-k;
plot(T,bi,'b');
hold on
plot(T,bi,'b');

『叄』 matlab關於LMS演算法的程序

調試信息說的很明確了,xn的下標越界
第一個循環中 xn=xn(5:1) %xn是一個1*5的double陣(或者叫行向量)
第二次循環時 k=6, M=5 xn=xn(6:-1:2) %注意此時xn下標取值為1~5
因此在解釋執行xn=xn(6)時機器不知怎麼辦,於是就出錯了……

『肆』 基於RLS演算法和LMS的自適應濾波器的MATLAB程序

% RLS演算法
randn('seed', 0) ;
rand('seed', 0) ;
NoOfData = 8000 ; % Set no of data points used for training
Order = 32 ; % 自適應濾波權數
Lambda = 0.98 ; % 遺忘因子
Delta = 0.001 ; % 相關矩陣R的初始化
x = randn(NoOfData, 1) ;%高斯隨機系列
h = rand(Order, 1) ; % 系統隨機抽樣
d = filter(h, 1, x) ; % 期望輸出
% RLS演算法的初始化
P = Delta * eye ( Order, Order ) ;%相關矩陣
w = zeros ( Order, 1 ) ;%濾波系數矢量的初始化
% RLS Adaptation
for n = Order : NoOfData ;
u = x(n:-1:n-Order+1) ;%延時函數
pi_ = u' * P ;%互相關函數
k = Lambda + pi_ * u ;
K = pi_'/k;%增益矢量
e(n) = d(n) - w' * u ;%誤差函數
w = w + K * e(n) ;%遞歸公式
PPrime = K * pi_ ;
P = ( P - PPrime ) / Lambda ;%誤差相關矩陣
w_err(n) = norm(h - w) ;%真實估計誤差
end ;
% 作圖表示結果
figure ;
plot(20*log10(abs(e))) ;%| e |的誤差曲線
title('學習曲線') ;
xlabel('迭代次數') ;
ylabel('輸出誤差估計') ;
figure ;
semilogy(w_err) ;%作實際估計誤差圖
title('矢量估計誤差') ;
xlabel('迭代次數') ;
ylabel('誤差權矢量') ;

%lms 演算法
clear all
close all
hold off%系統信道權數
sysorder = 5 ;%抽頭數
N=1000;%總采樣次數
inp = randn(N,1);%產生高斯隨機系列
n = randn(N,1);
[b,a] = butter(2,0.25);
Gz = tf(b,a,-1);%逆變換函數
h= [0.0976;0.2873;0.3360;0.2210;0.0964;];%信道特性向量
y = lsim(Gz,inp);%加入雜訊
n = n * std(y)/(10*std(n));%雜訊信號
d = y + n;%期望輸出信號
totallength=size(d,1);%步長
N=60 ; %60節點作為訓練序列
%演算法的開始
w = zeros ( sysorder , 1 ) ;%初始化
for n = sysorder : N
u = inp(n:-1:n-sysorder+1) ;% u的矩陣
y(n)= w' * u;%系統輸出
e(n) = d(n) - y(n) ;%誤差
if n < 20
mu=0.32;
else
mu=0.15;
end
w = w + mu * u * e(n) ;%迭代方程
end
%檢驗結果
for n = N+1 : totallength
u = inp(n:-1:n-sysorder+1) ;
y(n) = w' * u ;
e(n) = d(n) - y(n) ;%誤差
end
hold on
plot(d)
plot(y,'r');
title('系統輸出') ;
xlabel('樣本')
ylabel('實際輸出')
figure
semilogy((abs(e))) ;% e的絕對值坐標
title('誤差曲線') ;
xlabel('樣本')
ylabel('誤差矢量')
figure%作圖
plot(h, 'k+')
hold on
plot(w, 'r*')
legend('實際權矢量','估計權矢量')
title('比較實際和估計權矢量') ;
axis([0 6 0.05 0.35])

『伍』 變步長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');

『陸』 請問您可不可以提供一個LMP演算法,也就是p范數LMS演算法的matlab程序呀我自己編的沒法收斂…

%% 初始化
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();
grid on;
xlabel('interation');
ylabel('MSD');

『柒』 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,:)*w<b(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('權向量取值')

『捌』 如何matlab編程模擬LMS演算法的自適應陷波器,並畫出幅頻曲線陷波的頻率值

N=400; %總采樣長度
t=0:N-1; %時間的變化范圍
s=sin(2*pi*t/20); %輸入信號
A=0.5; %干擾信號的幅值
fai=pi/3;%干擾信號的相移
n=A*cos(2*pi*t/10+fai);%干擾信號
x=s+n;%信號混合
subplot(2,2,1);%作第一子圖
plot(t,s);
subplot(2,2,2); %作第二子圖
plot(t,x);
x1=cos(2*pi*t/10);
x2=sin(2*pi*t/10);
%初始化
w1=0.1;
w2=0.1;
e=zeros(1,N);
y=0;
u=0.05;%迭代步長
for i=1:N
y=w1*x1(i)+w2*x2(i);
e(i)=x(i)-y;%誤差信號
w1=w1+u*e(i)*x1(i);%迭代方程
w2=w2+u*e(i)*x2(i);%迭代方程
end
subplot(2,2,3); %作第三子圖
plot(t,e);
subplot(2,2,4); %作第四子圖
plot(t,s-e);

『玖』 自適應濾波器LMS演算法對聲信號雜訊的濾除用MATLAB編程怎麼做啊

>> clear all;
g=100;
N=256;
k=16;
pp=zeros(g,N-k);
u=0.01;
for q=1:g,
t=1:N;
a=1;
s=a*sin(0.05*pi*t);
figure(1);
subplot(3,1,1)
plot(t,real(s));
title('信號s時域波形');
xlabel('n');
ylabel('s');
axis([0,N,-a-1,a+1]);
xn=awgn(s,5);
y=zeros(1,N);
y(1:k)=xn(1:k);
w=zeros(1,k);
e=zeros(1,N);
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
subplot(3,1,2)
plot(t,real(xn));
title('信號s加雜訊後的時域波形');
subplot(3,1,3)
plot(t,real(y));
title('自適應濾波後的輸出時時域波形');
for c=1:N-k;
bi(c)=sum(pp(:,c))/g;
end;
figure(2);
T=1:N-k;
plot(T,bi,'b');
hold on

閱讀全文

與lms演算法的matlab程序相關的資料

熱點內容
逆戰文件夾怎麼放 瀏覽:120
怎麼統一刪除文件夾raw文件 瀏覽:121
卡爾曼濾波演算法書籍 瀏覽:769
安卓手機怎麼用愛思助手傳文件進蘋果手機上 瀏覽:844
安卓怎麼下載60秒生存 瀏覽:803
外向式文件夾 瀏覽:240
dospdf 瀏覽:431
怎麼修改騰訊雲伺服器ip 瀏覽:392
pdftoeps 瀏覽:496
為什麼鴻蒙那麼像安卓 瀏覽:736
安卓手機怎麼拍自媒體視頻 瀏覽:186
單片機各個中斷的初始化 瀏覽:724
python怎麼集合元素 瀏覽:481
python逐條解讀 瀏覽:833
基於單片機的濕度控制 瀏覽:499
ios如何使用安卓的帳號 瀏覽:883
程序員公園采訪 瀏覽:812
程序員實戰教程要多長時間 瀏覽:979
企業數據加密技巧 瀏覽:135
租雲伺服器開發 瀏覽:814