?? yufengx.m
字號:
%信源為單極性歸零碼,取樣點數(shù)自己定義
global dt df t f N T %定義全局變量
close all %關(guān)閉以前的應(yīng)用窗口
clear Eb_N0 Pe
k=input('取樣點數(shù)=2^k, k=[13]'); %采樣點數(shù)自定義,默認(rèn)為2^13
if k==[], k=13; end
%Rt=input('占空比[0:1](默認(rèn)0.5,為1則是NRZ碼)');
%if Rt==[],Rt=0.5;
%end;
N=2^k; %總的取樣點數(shù)
L=32; %L為每個碼元的取樣點數(shù)
M=N/L; %M碼元總數(shù)
Rb=2; %碼元速率Rb=2Mb/s
Ts=1/Rb; %碼元寬度Ts
dt=Ts/L; %時域取樣間隔
df=1/(N*dt);%頻域取樣間隔
T=N*dt; %時間截斷長度
Bs=N*df/2; %帶寬
Na=2; %示波器掃描寬度為2個碼元
t=linspace(-T/2,T/2,N); %頻域橫坐標(biāo)
f=linspace(-Bs,Bs,N)+eps;%時域橫坐標(biāo)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% BPSK
%升余弦
alpha=0; %理想低通
hr1=sin(pi*t/Ts)./(pi*t/Ts);
hr2=cos(alpha*pi*t/Ts)./(1-(2*alpha*t/Ts).^2);
hr=hr1.*hr2;
HR=abs(t2f(hr));
GT=sqrt(HR);
GR=GT;
%。。。。。。。。。。。。。載波
A=1;
fc=1/Ts;
m=A*cos(2*pi*fc*t);
for loop1=1:15
Eb_N0(loop1)=2*(loop1-1); %Eb/N0 in dB
eb_n0(loop1)=10^(Eb_N0(loop1)/10);
Eb=1;
n0=Eb/(4*eb_n0(loop1)); %信道的噪聲譜密度
sita=n0*Bs; %信道中噪聲功率
n_err=0; %誤碼計數(shù)
for loop2=1:5
a=sign(randn(1,M)); %產(chǎn)生隨機(jī)碼
s=zeros(1,N);
for ii=1:Ts/dt;
s(ii+[0:M-1]*L)=a; %將信源變成雙極性不歸零碼
end
S=t2f(s); %信源信號的傅式變換
s1=s.*m; %經(jīng)調(diào)制后的PSK信號
S1=t2f(s1);
n_ch=sqrt(sita)*randn(size(t)); %信道噪聲
s2=s1+n_ch; %加噪聲后的信號
sr=s2.*m; %解調(diào)
SR=t2f(sr);
y0=real(f2t(t2f(sr).*GR)); %通過接收濾波器
Y0=t2f(y0);
y=y0(L/2:L:N);
y=sign(y);%抽樣判決
n_err=n_err+length(find(y~=a));
end
Pe1(loop1)=n_err/(M*loop2);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% QPSK
A=1;
fc=1/Ts;
m=A*cos(2*pi*fc*t);
n=-A*sin(2*pi*fc*t);
for loop1=1:15 %誤碼率曲線
Eb_N0(loop1)=2*(loop1-1); %Eb/N0 in dB
eb_n0(loop1)=10^(Eb_N0(loop1)/10);
Eb=0.25;
n0=Eb/(eb_n0(loop1)); %信道的噪聲譜密度
sita=n0*Bs; %信道中噪聲功率
n_err=0; %誤碼計數(shù)
for loop2=1:5
a=sign(randn(1,M)); %產(chǎn)生隨機(jī)碼
i=zeros(1,M); %串并轉(zhuǎn)換
q=zeros(1,M);
y0=zeros(1,M);
s=zeros(1,N);
I=zeros(1,N);
Q=zeros(1,N);
y=zeros(1,N);
for nn=1:M/2
i(2*nn-1)=a(2*nn);
q(2*nn-1)=a(2*nn-1);
i(2*nn)=i(2*nn-1);
q(2*nn)=i(2*nn-1);
end;
for ii=1:Ts/dt;
s(ii+[0:M-1]*L)=a; %將信源變成不歸零碼
I(ii+[0:M-1]*L)=i;
Q(ii+[0:M-1]*L)=q;
end
S=t2f(s); %信源信號的傅式變換
Ia=I.*m; %兩路分別調(diào)制
Qa=Q.*n;
st=Ia+Qa; %并串轉(zhuǎn)換
n_ch=sqrt(sita)*randn(size(t)); %信道噪聲
st=st+n_ch; %加噪聲
Iaa=st.*m; %對兩路信號分別解調(diào)
Qaa=st.*n;
Ir=real(f2t(t2f(Iaa).*GR)); %分別通過濾波器
Qr=real(f2t(t2f(Qaa).*GR));
%sr=Ir+Qr;
yi=Ir(L/2:L:N); %抽樣判決
yq=Qr(L/2:L:N);
yi=sign(yi);
yq=sign(yq);
bc=ones(1,L); %定義復(fù)制的次數(shù)
yii=yi(bc,:); %將a的第一行復(fù)制L次,生成L*M矩陣
ei=reshape(yii,1,L*M); %將c重排成1*L*M數(shù)組
yqq=yq(bc,:); %將a的第一行復(fù)制L次,生成L*M矩陣
eq=reshape(yqq,1,L*M); %將c重排成1*L*M數(shù)組
for nn=1:M/2 %并串轉(zhuǎn)換
y0(2*nn)=yi(2*nn);
y0(2*nn-1)=yq(2*nn-1);
end;
for ii=1:L;
y(ii+[0:M-1]*L)=y0; %變成不歸零碼
end
n_err=n_err+length(find(y0~=a));
end
Pe2(loop1)=n_err/(M*loop2);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FSK
A=1;
f1=1/Ts;
f2=2/Ts;
m=A*cos(2*pi*f1*t);%z載波
n=-A*cos(2*pi*f2*t);
for loop1=1:15
Eb_N0(loop1)=2*(loop1-1); %Eb/N0 in dB
eb_n0(loop1)=10^(Eb_N0(loop1)/10);
Eb=1;
n0=Eb/(4*eb_n0(loop1)); %信道的噪聲譜密度
sita=n0*Bs; %信道中噪聲功率
n_err=0; %誤碼計數(shù)
for loop2=1:5
a=round(rand(1,M)); %產(chǎn)生隨機(jī)碼
b=a-1;
s=zeros(1,N);
ss=zeros(1,N);
for ii=1:Ts/dt;
s(ii+[0:M-1]*L)=a; %將信源變成單極性不歸零碼
ss(ii+[0:M-1]*L)=b;
end
S=t2f(s); %信源信號的傅式變換
s1=s.*m;
s2=ss.*n;
st=s1+s2;%經(jīng)調(diào)制后的FSK信號
ST=t2f(st);
n_ch=sqrt(sita)*randn(size(t)); %信道噪聲
stt=st+n_ch; %加噪聲后的信號
sr1=stt.*m; %解調(diào)
sr2=stt.*(-n);
SR=t2f(sr1);
y1=real(f2t(t2f(sr1).*GR)); %通過接收濾波器
y2=real(f2t(t2f(sr2).*GR)); %通過接收濾波器
Y1=t2f(y1);
y11=y1(L/2:L:N);
y22=y2(L/2:L:N);
y=y11-y22;
y=(sign(y)+1)/2;;%抽樣判決
n_err=n_err+length(find(y~=a));
end
Pe3(loop1)=n_err/(M*loop2);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16QAM
A=1;
fc=1/Ts;
m=A*cos(2*pi*fc*t);
n=-A*sin(2*pi*fc*t); % lianggezaibo
for loop1=1:15 %誤碼率曲線
Eb_N0(loop1)=2*(loop1-1); %Eb/N0 in dB
eb_n0(loop1)=10^(Eb_N0(loop1)/10);
Eb=0.25;
n0=Eb/(eb_n0(loop1)); %信道的噪聲譜密度
sita=n0*Bs; %信道中噪聲功率
n_err=0; %誤碼計數(shù)
for loop2=1:5
a=round(rand(1,M)); %產(chǎn)生隨機(jī)碼
for l3=1:L;
s(l3+[0:M-1]*L)=a; %將輸出信號變成雙極性不歸零碼
end
S=t2f(s);
i=zeros(1,M/2); %串并轉(zhuǎn)換
q=zeros(1,M/2);
I=zeros(1,N); %串并轉(zhuǎn)換
Q=zeros(1,N);
i=a(1:2:M-1);
q=a(2:2:M);
ii=zeros(1,M/4); %串并轉(zhuǎn)換
qq=zeros(1,M/4);
yii=zeros(1,M/2); %串并轉(zhuǎn)換
yqq=zeros(1,M/2);
y=zeros(1,M);
for l1=1:2:(M/2-1);
if i(l1)-i(l1+1)==1,
ii((l1+1)/2)=1;
elseif i(l1)-i(l1+1)==-1
ii((l1+1)/2)=-1;
elseif i(l1)==0
ii((l1+1)/2)=-3;
else ii((l1+1)/2)=3;
end
if q(l1)-q(l1+1)==1,
qq((l1+1)/2)=1;
elseif q(l1)-q(l1+1)==-1
qq((l1+1)/2)=-1;
elseif q(l1)==0
qq((l1+1)/2)=-3;
else qq((l1+1)/2)=3;
end
end
for l2=1:4*Ts/dt;
I(l2+[0:M/4-1]*4*L)=ii;
Q(l2+[0:M/4-1]*4*L)=qq;
end;
Ia=I.*m; %兩路分別調(diào)制
Qa=Q.*n;
st=Ia+Qa; %并串轉(zhuǎn)換--矩形星座
ST=t2f(st); %信源信號的傅式變換
n_ch=sqrt(sita)*randn(size(t)); %信道噪聲
st=st+n_ch; %加噪聲
Iaa=st.*m; %對兩路信號分別解調(diào)
Qaa=st.*n;
Ir=real(f2t(t2f(Iaa).*GR)); %分別通過濾波器
Qr=real(f2t(t2f(Qaa).*GR));
yi=Ir(2*L:4*L:N); %抽樣判決
yq=Qr(2*L:4*L:N);
for l2=1:2:M/2-1
k1=abs(yi((l2+1)/2)+1);
k2=abs(yi((l2+1)/2)+0.5);
k3=abs(yi((l2+1)/2)-0.5);
k4=abs(yi((l2+1)/2)-1);
k=[k1,k2,k3,k4];
p1=abs(yq((l2+1)/2)+1);
p2=abs(yq((l2+1)/2)+0.5);
p3=abs(yq((l2+1)/2)-0.5);
p4=abs(yq((l2+1)/2)-1);
p=[p1,p2,p3,p4];
if k1==min(k)
yii(l2)=0;yii(l2+1)=0;
elseif k2==min(k)
yii(l2)=0;yii(l2+1)=1;
elseif k3==min(k)
yii(l2)=1;yii(l2+1)=0;
elseif k4==min(k)
yii(l2)=1;yii(l2+1)=1;
end
if p1==min(p)
yqq(l2)=0;yqq(l2+1)=0;
elseif p2==min(p)
yqq(l2)=0;yqq(l2+1)=1;
elseif p3==min(p)
yqq(l2)=1;yqq(l2+1)=0;
elseif p4==min(p)
yqq(l2)=1;yqq(l2+1)=1;
end
end
y(1:2:M-1)=yii;
y(2:2:M)=yqq;
n_err=n_err+length(find(y~=a));
end
Pe4(loop1)=n_err/(M*loop2);
end
figure(1)
semilogy(Eb_N0,Pe1,'r');
hold on
semilogy(Eb_N0,Pe2,'y');
hold on
semilogy(Eb_N0,Pe3,'b');
hold on
semilogy(Eb_N0,Pe4,'g');
axis([0,14,1e-4,1])
xlabel('Eb/N0')
ylabel('Pe')
title('誤碼率曲線')
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -