?? ask_lms_6_14_.m
字號:
% n0個碼源 5_2號修改
close all
clear
clc
fc=400; %載波
fs=2000; %采樣頻率
n0=500; %訓(xùn)練序列長度
delay_num=5;%延時
X=randint(1,n0); %產(chǎn)生隨機(jī)訓(xùn)練序列
figure(1)
stem(X),grid
title('初始訓(xùn)練碼元序列')
xlabel('點數(shù)');ylabel('碼元');
x=[];
for i=1:n0
for j=1:fs/10 %每個碼源持續(xù)0.1s
x=[x X(i)];
end
end
figure(2)
k=linspace(0,n0,n0*fs/10);
plot(k,x)
axis([0,n0,-2,2])
title('基帶信號')
xlabel('點數(shù)');ylabel('基帶碼元');
k=linspace(0,n0/10,n0*fs/10);
wave=cos(2*pi*fc*k); % 載波fc
sig = x.*wave; %調(diào)制信號
figure(3)
plot(k,sig)
title('2ASK信號')
xlabel('時間');ylabel('調(diào)制信號');
%多徑信道
k=1:fs;
h(k)=0;
h(1)=1;
h(0.4*fs)=0.4; % 改變時延與衰減
h(0.8*fs)=0.8; % 改變時延與衰減
k=linspace(0,1,fs);
figure(4);
stem(k,h);
title('多徑信道');
xlabel('時間');ylabel('碼元幅值');
J=conv(sig,h); %卷積輸出
J=J(1:n0/10*fs);
nvar = 0.01; % Noise variance
noise = sqrt(nvar)*randn(1,n0/10*fs); % Noise
n = J + noise; % The noise corrupted sine wave.
k=linspace(0,n0/10,n0/10*fs);
figure(5);
plot(k,n);
title('疊加噪聲');
xlabel('時間');ylabel('碼元幅值');
%相干解調(diào)
p=n.*wave;
k=linspace(0,n0/10,n0/10*fs);
figure(6);
plot(k,p);
title('相干解調(diào)');
xlabel('時間');ylabel('碼元幅值');
N=80;
b1=fir1(N,20*2/fs,'low');
l=filter(b1,1,p); %包絡(luò)檢波
k=linspace(0,n0/10,n0/10*fs);
figure(9);
plot(k,l);
hold on
plot(k,x,'r');
title('包絡(luò)檢波')
xlabel('時間');ylabel('包絡(luò)幅值');
u=[];
for i=0:n0-1
if [l(fs/10*i+0.3*fs/10)+l(fs/10*i+0.7*fs/10)]/2 > 0.4
u(i+1)=1;
else
u(i+1)=0; %每隔fs/10個點采集一個信號,共n0個點, 構(gòu)成橫向濾波器輸入信號
end
end
%期望信號
for i=0:n0-1
dx(i+1)=x(fs/10*i+0.5*fs/10);
end
k=linspace(1,n0,n0);
w0(k)=0; % 11個迭代權(quán)系數(shù)
w1(k)=1;
w2(k)=0;
w3(k)=1;
w4(k)=0;
w5(k)=1;
w6(k)=0;
w7(k)=0;
w8(k)=1;
w9(k)=0;
w10(k)=0;
y(k)=0;
u0=0.01; % 初始迭代步長
for i=11:n0
y(i)=u(i)*w0(i)+u(i-1)*w1(i)+u(i-2)*w2(i)+u(i-3)*w3(i)+u(i-4)*w4(i)+u(i-5)*w5(i)+u(i-6)*w6(i)+u(i-7)*w7(i)+u(i-8)*w8(i)+u(i-9)*w9(i)+u(i-10)*w10(i);
e(i)=dx(i-delay_num)-y(i);
w0(i+1)=w0(i)+2*u0*e(i)*u(i);
w1(i+1)=w1(i)+2*u0*e(i)*u(i-1);
w2(i+1)=w2(i)+2*u0*e(i)*u(i-2);
w3(i+1)=w3(i)+2*u0*e(i)*u(i-3);
w4(i+1)=w4(i)+2*u0*e(i)*u(i-4);
w5(i+1)=w5(i)+2*u0*e(i)*u(i-5);
w6(i+1)=w6(i)+2*u0*e(i)*u(i-6);
w7(i+1)=w7(i)+2*u0*e(i)*u(i-7);
w8(i+1)=w8(i)+2*u0*e(i)*u(i-8);
w9(i+1)=w9(i)+2*u0*e(i)*u(i-9);
w10(i+1)=w10(i)+2*u0*e(i)*u(i-10);
end
n=linspace(1,n0,n0);
figure(13);
stem(n,y);
title('橫向濾波器輸出');
xlabel('點數(shù)');ylabel('幅值');
e1=e.*e;
figure(14);
plot(n,e1);
title('誤差曲線');
figure(15);
plot(n,10*log(e1));
title('誤差曲線');
y_data=y;
for i=0:n0-1
if y_data(i+1)>0.5
y_data(i+1)=1;
else
y_data(i+1)=0;
end
end
count=0;
for i=11:n0
if y_data(i)==dx(i-delay_num);
count=count+1;
else
count=count;
end
end
count
count/(n0-10)
title(['誤碼率為',num2str(1-count/(n0-10))])
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -