?? apsk_modulation.asv
字號:
function [p]=APSK_modulation(snr_in_dB)
N=10240;
snr=10^(snr_in_dB/10); %信噪比
sgma=sqrt(42/(16*snr)); %噪聲標(biāo)準(zhǔn)方差
M=16;
K=4;
v=sqrt(-1);
alpha=2.75; %16APSK性能最優(yōu)時(shí)內(nèi)外半徑比,r1為內(nèi)半徑
P=12; % 信號功率設(shè)定
%sgma=sqrt(P/2/snr);
%在0到M間產(chǎn)生N個整數(shù)
x=randint(1,N,M)+1; %產(chǎn)生一組隨機(jī)數(shù)
%%%%%%%%%%%%%%%%%%%%%%%%%% 16APSK信源產(chǎn)生模塊 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%由相對半徑和功率限制計(jì)算內(nèi)、外圓半徑
r1=sqrt(P/(4+12*alpha*alpha));
r2=r1*alpha;
%星座
s_apsk=[r1*exp(v*(2*pi*1/4-pi/4));
r1*exp(v*(2*pi*2/4-pi/4));
r1*exp(v*(2*pi*3/4-pi/4));
r1*exp(v*(2*pi*4/4-pi/4));
r2*exp(v*(2*pi*1/12-pi/12));
r2*exp(v*(2*pi*2/12-pi/12));
r2*exp(v*(2*pi*3/12-pi/12));
r2*exp(v*(2*pi*4/12-pi/12));
r2*exp(v*(2*pi*5/12-pi/12));
r2*exp(v*(2*pi*6/12-pi/12));
r2*exp(v*(2*pi*7/12-pi/12));
r2*exp(v*(2*pi*8/12-pi/12));
r2*exp(v*(2*pi*9/12-pi/12));
r2*exp(v*(2*pi*10/12-pi/12));
r2*exp(v*(2*pi*11/12-pi/12));
r2*exp(v*(2*pi*12/12-pi/12))].';
%完成數(shù)據(jù)映射
for n=1:N
x_apsk(n)=s_apsk(x(n));
end
%%%%%%%%%%%%%% IFFT處理模塊 %%%%%%%%%%%%%%%%%%%%%
%reshape重新排列矩陣
% y_apsk=reshape(x_apsk,K,N/K);
% for n=1:N/K
% yy_apsk(:,n)=ifft(y_apsk(:,n),K);
% end
% z_apsk=reshape(yy_apsk,1,N);
%%%%%%%%%%%%%%%%%% 送放大器 %%%%%%%%%%%%%%%%%%%%%%
% for n=1:N
% HPA_apsk(n)=saleh(z_apsk(n));
% end
%接收信號
for i=1:N,
[n(1) n(2)]=gngauss(sgma);
Dey_apsk(i)=x_apsk(i)+n(1);
end;
%%%%%%%%%%%%%%%%%% 解調(diào)模塊 %%%%%%%%%%%%%%%%%%%%%%%
% Dez_apsk=reshape(Dey_apsk,K,N/K);
%
% for n=1:N/K
% Deyy_apsk(:,n)=fft(Dez_apsk(:,n),K);
% end
%
% Dew_apsk=reshape(Deyy_apsk,1,N);
%取幅度和相位
r_apk=abs(Dey_apsk);
q_apk=angle(Dey_apsk);
% 4+12APSK
%判別
for n=1:N
if r_apk(n)<(r1+r2)/2
if q_apk(n)<=pi/2&q_apk(n)>0
x_deapk(n)=s_apsk(1);
elseif q_apk(n)<=pi&q_apk(n)>pi/2
x_deapk(n)=s_apsk(2);
elseif q_apk(n)<=-pi/2&q_apk(n)>-pi
x_deapk(n)=s_apsk(3);
else x_deapk(n)=s_apsk(4);
end
else if q_apk(n)<=pi/6&q_apk(n)>0
x_deapk(n)=s_apsk(5);
elseif q_apk(n)<=pi/3&q_apk(n)>pi/6
x_deapk(n)=s_apsk(6);
elseif q_apk(n)<=pi/2&q_apk(n)>pi/3
x_deapk(n)=s_apsk(7);
elseif q_apk(n)<=2*pi/3&q_apk(n)>pi/2
x_deapk(n)=s_apsk(8);
elseif q_apk(n)<=5*pi/6&q_apk(n)>2*pi/3
x_deapk(n)=s_apsk(9);
elseif q_apk(n)<=6*pi/6&q_apk(n)>5*pi/6
x_deapk(n)=s_apsk(10);
elseif q_apk(n)<=-5*pi/6&q_apk(n)>-pi
x_deapk(n)=s_apsk(11);
elseif q_apk(n)<=-2*pi/3&q_apk(n)>-5*pi/6
x_deapk(n)=s_apsk(12);
elseif q_apk(n)<=-pi/2&q_apk(n)>-2*pi/3
x_deapk(n)=s_apsk(13);
elseif q_apk(n)<=-pi/3&q_apk(n)>-pi/2
x_deapk(n)=s_apsk(14);
elseif q_apk(n)<=-pi/6&q_apk(n)>-pi/3
x_deapk(n)=s_apsk(15);
else x_deapk(n)=s_apsk(16);
end
end
end
%The symerr function compares binary representations of elements in x with those in y. The output number is a scalar or vector that indicates the number of elements that differ.
%誤碼率統(tǒng)計(jì)
[num,rt]=symerr(x_apsk,x_deapk);
p=num/N;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -