?? 4dbpsk系統的源碼.txt
字號:
說明,下載了一些有關4dbpsk系統的設計實現源碼
下載文件列表包含以下一些文件(不知全是4dpsk的,還是只有4dpsk\dpsk4.m是):
Pack : 659364dpsk.rar
4dpsk\cm_dpske.m
4dpsk\cm_sm34.m
4dpsk\dpsk4.m
4dpsk\gngauss.m
4dpsk\Qfunct.m
4dpsk
cm_dpske.m
function[enc_comp]=cm_dpske(E,M,mapping,sequence)
%[enc_comp]=cm_dpske(E,M,mapping,sequence)
% CM_DPSKE以微分方式編碼一個序列
% E是平均能量,M是星座點的數目
% 而mapping是一個定義星座點如何分布的向量
% sequence是未編碼的二進制數據序列
k=log2(M);
N=length(sequence);
%如果N不可為k整除,填充零使其可被k整除
remainder=rem(N,k);
if (remainder~=0),
for i=N+1:N+k-remainder,
sequence(i)=0;
end;
N=N+k-remainder;
end;
theta=0;
for i=1:k:N,
index=0;
for j=i:i+k-1,
index=2*index+sequence(j);
end;
index=index+1;
theta=mod(2*pi*mapping(index)/M+theta,2*pi);
enc_comp((i+k-1)/k,1)=sqrt(E)*cos(theta);
enc_comp((i+k-1)/k,2)=sqrt(E)*sin(theta);
end;
cm_sm34.m
function[p]=cm_sm34(snr_in_dB)
%[p]=cm_sm34(snr_in_dB)
% CM_SM34求出以dB為單位的給定信噪比的比特誤碼率和符號誤碼率
N=5000;
E=1; %每符號能量
snr=10^(snr_in_dB/10); %信噪比
sgma=sqrt(E/(4*snr)); %噪聲方差
%隨后為數據源的產生
for i=1:2*N,
temp=rand; %在區間(0,1)間的一個均勻隨機變量
if (temp<0.5),
dsource(i)=0;
else
dsource(i)=1;
end;
end;
%隨后為數據源的差分編碼
mapping=[0 1 3 2];
M=4;
[diff_enc_output]=cm_dpske(E,M,mapping,dsource);
%接收信號
for i=1:N
[n(1) n(2)]=gngauss(sgma);
r(i,:)=diff_enc_output(i,:)+n;
end;
%判決、誤碼率的計算
numoferr=0;
prev_theta=0;
for i=1:N,
theta=angle(r(i,1)+j*r(i,2));
delta_theta=mod(theta-prev_theta,2*pi);
if ((delta_theta7*pi/4)),
deris=[0 0];
elseif (delta_theta<3*pi/4),
deris=[0 1];
elseif (delta_theta<5*pi/4),
deris=[1 1];
else
deris=[1 0];
end;
prev_theta=theta;
%如果判決不對,計錯器加一
if ((deris(1)~=dsource(2*i-1)) | (deris(2)~=dsource(2*i))),
numoferr=numoferr+1;
end;
end;
p=numoferr/N;
dpsk4.m
clear all
echo on
SNRindB1=0:2:12;
SNRindB2=0:0.1:12;
for i=1:length(SNRindB1),
smld_err_prb(i)=cm_sm34(SNRindB1(i)); %仿真誤碼率
end;
for i=1:length(SNRindB2),
SNR=exp(SNRindB2(i)*log(10)/10); %信噪比
theo_err_prb(i)=2*Qfunct(sqrt(SNR)); %理論符號誤碼率
end;
%隨后為繪圖曲線
semilogy(SNRindB1,smld_err_prb,'*');
hold
semilogy(SNRindB2,theo_err_prb);
gngauss.m
function[gsrv1,gsrv2]=gngauss(m,sgma)
% m--mean, sgma--standard deviation
if nargin==0,
m=0;sgma=1;
elseif nargin==1,
sgma=m;m=0;
end;
u=rand;
z=sgma*(sqrt(2*log(1/(1-u)))); %a Rayleigh distributed random variable
u=rand;
gsrv1=m+z*cos(2*pi*u);
gsrv2=m+z*sin(2*pi*u);
Qfunct.m ????????????????????
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -