当前位置:文档之家› QDPSK理论误码率与实际误码率matlab仿真程序

QDPSK理论误码率与实际误码率matlab仿真程序

QDPSK理论误码率与实际误码率matlab仿真程序
QDPSK理论误码率与实际误码率matlab仿真程序

%%dpsk格雷码矩形

%%等效基带调制

clc;

clear all;

close all;%%关闭所有窗口,比如之前画的图

nsymbol = 1e6;%%每种信噪比下符号数的发送符号数,10^6个数errornumber = zeros(1,10);

errorratio = zeros(1,10);

dataa = randi([0,1],1,2*nsymbol);%%产生1行,2*nsymbol列均匀分布的随机数datab = zeros(1,2*nsymbol);

data_mod1 = zeros(1,nsymbol);%%各参量初始化

data_mod2 = zeros(1,nsymbol);

data_demod1 = zeros(1,nsymbol);

data_demod2 = zeros(1,nsymbol);

s_receive1 = zeros(1,nsymbol);

s_receive2 = zeros(1,nsymbol);

datab_receive = zeros(1,2*nsymbol);

dataa_receive = zeros(1,2*nsymbol);

datab(1) = xor(0,dataa(1));%%给定初始相位

for l = 2:(2*nsymbol)%%逻辑运算

datab(l) = xor(dataa(l),datab(l-1));

end

for i = 1:nsymbol %%格雷码调制到星座图的映射

if datab(2*i-1)==0 && datab(2*i)==0

data_mod1(i) = 1;

data_mod2(i) = 1;

elseif datab(2*i-1)==0 && datab(2*i)==1

data_mod1(i) = -1;

data_mod2(i) = 1;

elseif datab(2*i-1)==1 && datab(2*i)==1

data_mod1(i) = -1;

data_mod2(i) = -1;

elseif datab(2*i-1)==1 && datab(2*i)==0

data_mod1(i) = 1;

data_mod2(i) = -1;

end

end

SNR_dB = 1:10;%%%信噪比dB形式

SNR = 10.^(SNR_dB/10);%%信噪比转化为线性值

for loop= 1:10

sigma = sqrt(1/SNR(loop));%%%根据符号功率求噪声功率

s_receive1 = data_mod1+sigma * randn(1,length(data_mod1));

s_receive2 = data_mod2+sigma * randn(1,length(data_mod2));%%添加复高斯白噪声

for k = 1:nsymbol%%反映射

if s_receive1(k)>0 && s_receive2(k)>0

data_demod1(k) = 0;

data_demod2(k) = 0;

elseif s_receive1(k)<0 && s_receive2(k)>0

data_demod1(k) = 0;

data_demod2(k) = 1;

elseif s_receive1(k)<0 && s_receive2(k)<0

data_demod1(k) = 1;

data_demod2(k) = 1;

elseif s_receive1(k)>0 && s_receive2(k)<0

data_demod1(k) = 1;

data_demod2(k) = 0;

end

datab_receive(2*k-1) = data_demod1(k);

datab_receive(2*k) = data_demod2(k);

end

dataa_receive(1) = xor(0,datab_receive(1));

for n = 2:(2*nsymbol)

dataa_receive(n) = xor(datab_receive(n),datab_receive(n-1));

end

for m = 1:nsymbol

if (dataa_receive(2*m-1) ~= dataa(2*m-1))||(dataa_receive(2*m) ~= dataa_receive(2*m))%%统计误码个数

errornumber(loop) = errornumber(loop)+1;

end

end

errorratio(loop) = errornumber(loop)/nsymbol; %%计算误码率

end

ser_theory = 1-(1-qfunc(sqrt(SNR))).^2;%理论误码率,注意Q函数和误差函数的对应关系semilogy(SNR_dB,errorratio,'-k*',SNR_dB,ser_theory,'-ro');

title('DPSK信号在AWGN信道下的性能(格雷码)');

xlabel('信噪比/dB');ylabel('误码率');

legend('误码率','理论误码率');

grid on;%%坐标线

相关主题
文本预览
相关文档 最新文档