?? lms.m
字號:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 該程序實現時域LMS算法,并用統計的方法仿真得出不同步長下的學習曲線
% W為信道參數,u為迭代步長
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function LMS(W,u)
% 初始化參數
g=200; % 統計仿真次數為g
N=1000; % 輸入信號抽樣點數N,也為迭代次數
M=11; % 時域抽頭LMS算法濾波器階數
d=6; % 信號延遲
ee=zeros(g,N-M+1); % 將每次獨立循環的誤差結果存于矩陣ee中,以便后面對其平均
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 產生信道序列
h=zeros(1,3); % 信道序列初始化
for n=1:3
h(n)=0.5*(1+cos(2*pi/W*(n-2))); % 信道序列
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 獨立循環算法
for q=1:g
out = randint(1,N); % 產生隨機0、1序列
I = (out-0.5).*2; % 得到原始信號I
xx=conv(h,I); % 原始信號通過信道后的信號
x=awgn(xx,30,'measured'); % 給信號加上方差為0.001的白噪聲
xn=x(1:N); % 被噪聲污染的輸入信號
yd=zeros(1,N); % 期望輸出信號yd初始化
yd((d+1):N)=I(1:(N-d)); % yd為I延遲7個單位
w=zeros(1,M); % 設置抽頭加權初值
e=zeros(1,N); % 誤差信號初始化
% 用LMS算法迭代濾波
for i=M:N
XN=xn((i-M+1):(i));
y(i)=w*XN';
e(i)=yd(i)-y(i);
w=w+u*e(i)*XN;
end
ee(q,:)=(e(M:N)).^2; % 存儲誤差平方序列
end
for b=1:(N-M+1)
bi(b)=sum((ee(:,b)))/g; % 求誤差平方值的的統計平均
end
t=1:(N-M+1);
semilogy(t,bi); % 平均學習曲線
title('MSE學習曲線');
xlabel('迭代次數');
ylabel('均方誤差');
hold on
% EOF
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -