📄 simupe_qpsk.m
字号:
%File_C6: simuPe_Qpsk.m
function [p]=simuPe_Qpsk(snr_in_dB)
%**** 对于给定信噪比的通信系统,估计差错概率 ****
%数据调制采用QPSK
% snr_in_dB:给定信噪比, dB为单位
%p:差错概率控制值
%**** 参数设置部分 ****
m=10;
E=1; %信号能量归一化
SNR=10^(snr_in_dB/10); %计算信噪比值
sgma=sqrt(E/(2*SNR)); %计算给定信噪比条件下信道加性白噪声的标准差
s11=-j;s10=-1;s00=j;s01=1;%定义QPSK信号:4种可能的取值
N=10000;
%产生待发送的二进制比特数据流:长度为2N
signal=rand(1,2*N);
qpsk=zeros(1,N); %定义经过调制后的信号序列
%产生调制后的信号序列qpsk
for i=1:N
if signal(2*i-1)<0.5
if signal(2*i)<0.5
qpsk(i)=s00;
else qpsk(i)=s01;
end;
else
if signal(2*i)<0.5
qpsk(i)=s10;
else qpsk(i)=s11;
end;
end;
end;
%用蒙特卡罗仿真估计差错概率
numoferr=0; %差错计数器初始化
%传输N个数据符号,统计符号差错个数
for i=1:N
%产生信道的复值加性白噪声
n=gngauss(sgma,m)+j*gngauss(sgma,m);
%接收机接收到的信号:考虑信道的加性白噪声
r=qpsk(i)+n;
%计算r在四种可能的qpsk信号上的投影
d11=real(r*conj(s11));
d10=real(r*conj(s10));
d00=real(r*conj(s00));
d01=real(r*conj(s01));
%判决投影最大值
d_max=max([d11 d10 d00 d01]);
%检测判决接收到的QPSK信号
if (d_max==d11)
decis_qpsk=s11;
elseif (d_max==d10)
decis_qpsk=s10;
elseif (d_max==d00)
decis_qpsk=s00;
else
decis_qpsk=s01;
end;
%检测器判决结果与发送器发送的qpsk信号进行比较
if(decis_qpsk~=qpsk(i))
numoferr=numoferr+i; %差错计数器累加1
end;
end;
%计算差错概率的估计值
p=numoferr/N;
%End of script file
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -