📄 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 + -