D8PSK相干收发系统误码率非理想因素的影响
一、D8PSK通信系统的基本结构
D8PSK是差分八相移键控(differential 8-phase shift keying)的简称,是一种典型的多相移键控的调整方式,具有较强的抗干扰性能,相比BPSK(二相移键控)和QPSK(四相移键控)具有更高的信道利用率,常用于卫星通信及航空通信等场合。
D8PSK通信系统框图如下

二、关键步骤讲解
1. 格雷码与相位对应关系
|
八进制数 |
二进制数 |
相位 |
|
0 |
000 |
0 |
|
1 |
001 |
1π/4 |
|
3 |
011 |
2π/4 |
|
2 |
010 |
3π/4 |
|
6 |
110 |
4π/4 |
|
4 |
100 |
5π/4 |
|
5 |
101 |
6π/4 |
|
7 |
111 |
7π/4 |
2. 差分相位与绝对相位的关系

3. 成形滤波器的作用
在数据编码进行映射和投影之后,两路正交数据均为离散序列,频谱覆盖整个频域空间,经过成形滤波器之后,可以压缩频带,减少码间干扰。
4. 上采样的好处
可以压缩频谱,抑制谐波,提高信噪比。上采样M倍后使频谱压缩为原来的1/M,低通滤波可以去除右端周期频带。
5. 下采样的好处
可以拓宽频谱,降低数据速率,减小数据流量。下采样M倍后使频谱拓展为原来的M倍,提前低通滤波可以消除频率混叠。
三、相干解调时的误差分析
测试参数
载波频率 21.4MHz
符号速率 10.5KHz
码元速率 31.5KHz
相干解调
1. 信噪比影响
不管其他三个变量如何变化,随着信噪比的提高,误码率总是近似成指数级下降。
中频采样率较低(欠采样)时

中频采样率较高(过采样)时

接收机频偏较大时

接收机相偏较大时

2. ADC采样频率影响
在频偏较大的情况下,提高ADC采样率可以显著降低误码率,但一旦采样率达到10M sps,则采样率对降低误码率的贡献不再明显。


3. 频偏影响
在采样率较低时,减小频偏可以显著降低误码率

当采样率足够时,减小频偏对降低误码率左右不大

4. 相偏影响
整体而言,相偏对误码率影响较小


5.小结
A 无论在何种情况下,提高信噪比对减小误码率都是有作用的
B 提高采样率对于抑制频偏作用明显,但到一定程度之后,就不再有贡献
C 对于载波中频欠采样的情况,降低发射-接收间的频偏仍然可以将误码率减小到理想水平
D D8PSK这种调制方式对相偏不敏感
四、Matlab程序
%%
% my_d8psk.m
% 根据给定参数分析d8psk误码率
function err_rate = my_d8psk(Fc_t,fre_sigle_t,Ns_t,fs_mf_t,snr_r,fr_err_r,phi_err_r)
%% 参数说明
% err_rate -- 误码率,比值
% Fc_t -- 载波频率,单位Hz
% fre_sigle_t -- 符号速率,单位Hz
% Ns_t -- 符号个数
% fs_mf_t -- 中频采样频率,单位Hz
% snr_r -- 传输信道叠加信噪比,单位dB
% fr_err_r -- 接收机频偏,单位ppm
% phi_err_r -- 接收机相偏,单位ppm
%% 基本参数
Fc = Fc_t;
fre_sigle = fre_sigle_t;
fre_bits = 3*fre_sigle; %码元速率,单位Hz
N_s = Ns_t;
N_b = 3 * N_s; %码元个数
fs_mf = fs_mf_t; %中频采样频率,发射机DAC和接收机ADC相同
%% 差分码元生成
% 1.原始编码
data = randi([0 7],1,N_s); %产生一行八进制随机数
abs_ang = zeros(1,N_s); %绝对相位
diff_ang = zeros(1,N_s); %相对相位
% 2.差分映射 格雷码
for n=1 : 1 : N_s
if data(1,n) == 0 % 000
diff_ang(1,n) = 0;
elseif data(1,n) == 1 % 001
diff_ang(1,n) = pi/4;
elseif data(1,n) == 3 % 011
diff_ang(1,n) = 2*pi/4;
elseif data(1,n) == 2 % 010
diff_ang(1,n) = 3*pi/4;
elseif data(1,n) == 6 % 110
diff_ang(1,n) = 4*pi/4;
elseif data(1,n) == 7 % 111
diff_ang(1,n) = 5*pi/4;
elseif data(1,n) == 5 % 101
diff_ang(1,n) = 6*pi/4;
elseif data(1,n) == 4 % 100
diff_ang(1,n) = 7*pi/4;
end
end
% 3.绝对相位
abs_ang(1,1) = diff_ang(1,1);
for n=2 : 1 : N_s
abs_ang(1,n) = mod((abs_ang(1,n-1) + diff_ang(1,n)),2*pi); % phi(k) - phi(k-1) = delta_phi
% abs_ang(1,n) = (abs_ang(1,n-1) + diff_ang(1,n)); % phi(k) - phi(k-1) = delta_phi
end
%% 基带信号
% 1.生成i-q正交数据
I = cos(abs_ang);
Q = sin(abs_ang);
% % 星座图
% scatter(I,Q);axis equal;
% grid on
% 3.插值
I10 =upsample(I,10);
Q10 =upsample(Q,10);
% 3.脉冲成形
beta=0.6; %r=0时是矩形
span=length(I10);
sps=10;
h = rcosdesign(beta,span,sps);
% 4.滤波
I10_f=conv(I10,h,'same');
Q10_f=conv(Q10,h,'same');
%% 插值
I100 =upsample(I10_f,10);
Q100 =upsample(Q10_f,10);
% 滤波
h_t1 =fir1(127,1/10);
I_f =conv(I100,h_t1,'same');
Q_f =conv(Q100,h_t1,'same');
%% 调制
% 1.生成载波
t = 0:1/fs_mf:(length(I_f)-1)/fs_mf; % 采样深度N_s
ref_cos = cos(2*pi*Fc .*t);
ref_sin = -sin(2*pi*Fc .*t);
% 2.合成
s = ref_cos .* I_f + ref_sin .* Q_f;
%% 信道模拟 - 加噪声 频偏
snr_t = snr_r; % dB
s_in = awgn(s,snr_t,'measured');
%% 接收
fr_err = fr_err_r*1e-6; % 频率偏差
phi_err = phi_err_r*1e-6; % 相位偏差
Fc_r = Fc * (1+fr_err);
phi_r = phi_err*2*pi;
%% 解调
% 1.本振信号
lo_cos = 2*cos(2*pi*Fc_r .* t + phi_r);
lo_sin = -2*sin(2*pi*Fc_r .* t + phi_r);
% 2.相乘
A = s_in .* lo_cos;
B = -s_in .* lo_sin;
% 3.匹配滤波
A_f=conv(A,h,'same');
B_f=conv(B,h,'same');
%% 抽取 - 先滤波
% 1.低通滤波
h_r1 =fir1(127,1/10);
A_f1 =conv(A_f,h_r1,'same');
B_f1 =conv(B_f,h_r1,'same');
% 2.抽取10倍
A10 = downsample(A_f1,10);
B10 = downsample(B_f1,10);
% 3.低通滤波
h_r1 =fir1(127,1/10);
A100_f =conv(A10,h_r1,'same');
B100_f =conv(B10,h_r1,'same');
% 3.抽取100倍
A = downsample(A100_f,10);
B = downsample(B100_f,10);
% %星座图
% figure
% scatter(A,B);axis equal;
% grid on
%% 角度换算
% 结算角度到[0,2*pi]
r_abs_ang = [];
for n=1 : 1 : N_s
r_abs_ang(1,n) = atan2(A(1,n),B(1,n)) + pi; % atan2 值域为 [-pi,pi]
end
%% 差分译码
r_diff_ang = [];
r_diff_ang(1,1) = r_abs_ang(1,1);
for n=2 : 1 : N_s
r_diff_ang(1,n) = mod((r_abs_ang(1,n) - r_abs_ang(1,n-1)),2*pi);
end
%% 判决 - 最大似然估计
rt1 = [];
r_code = 0;
for m=1:1:length(r_diff_ang)
% theta = r_diff_ang(1,m);
% rho = sqrt(A(1,m)^2+B(1,m)^2);
% polarplot(theta,rho,'ko');hold on; % 极坐标绘点
% 0
if (r_diff_ang(1,m) < pi/8) || (r_diff_ang(1,m) > 15*pi/8)
r_code = 0;
% pi/4
elseif (r_diff_ang(1,m) > pi/8) && (r_diff_ang(1,m) <= 3*pi/8)
r_code = 1;
% 2*pi/4
elseif (r_diff_ang(1,m) > 3*pi/8) && (r_diff_ang(1,m) <= 5*pi/8)
r_code = 3;
% 3*pi/4
elseif (r_diff_ang(1,m) > 5*pi/8) && (r_diff_ang(1,m) <= 7*pi/8)
r_code = 2;
% 4*pi/4
elseif (r_diff_ang(1,m) > 7*pi/8) && (r_diff_ang(1,m) <= 9*pi/8)
r_code = 6;
% 5*pi/4
elseif (r_diff_ang(1,m) > 9*pi/8) && (r_diff_ang(1,m) <= 11*pi/8)
r_code = 7;
% 6*pi/4
elseif (r_diff_ang(1,m) > 11*pi/8) && (r_diff_ang(1,m) <= 13*pi/8)
r_code = 5;
% 7*pi/4
elseif (r_diff_ang(1,m) > 13*pi/8) && (r_diff_ang(1,m) <= 15*pi/8)
r_code = 4;
end
rt1(1,m) = r_code;
end
% % %% 解算后极坐标绘图
% % ax = gca;
% % ax.ThetaDir = 'counterclockwise'; % 逆时针
% % ax.ThetaAxisUnits = 'radians'; % 单位 弧度
% % ax.ThetaMinorGrid = 'off'; % 角度次网格隐藏
% % ax.RGrid = 'off'; % 半径网格隐藏
% % % 角度分度值表
% % ax.ThetaTick = [pi/8 3*pi/8 5*pi/8 7*pi/8 9*pi/8 11*pi/8 13*pi/8 15*pi/8];
%% 误码率计算
err = 0;
for m=1:1:length(r_diff_ang)
if(rt1(1,m) ~= data(1,m))
err = err + 1;
end
end
% 码率为符号速率 3倍
err_rate = err/N_s;
% str = sprintf('符号误码率为 %f%%\n',err_rate*100);
% disp(str);
end
综合分析误码率
%%
% my_d8psk_sim.m
% 分析相关因素对d8psk误码率的影响
clc;
close all;
clear all;
%% 常量
Fc_t = 21.4e6; %载波频率21.4 MHz
fre_sigle_t = 10.5e3; %符号速率10.5KHz
Ns_t = 300; %符号个数
% 绘图点数
NN = 50;
%% 控制变量
fs_mf0 = 1e6; %采样频率,MHz
snr0 = 3; %经过信号后的信噪比,dB
fr_err0 = 10; %接收机频偏,ppm
phi_err0 = 10; %接收机相偏,ppm
fs_mf_t = fs_mf0;
snr_r = snr0;
fr_err_r = fr_err0;
phi_err_r = phi_err0;
%% SNR 影响分析
snr_min = 0;
snr_max = 100;
snr_arry = snr_min : (snr_max-snr_min) / (NN-1) :snr_max;
err_rate = zeros(1,NN);
for n = 1:1:NN
snr_r = snr_arry(1,n);
err_rate(1,n) = my_d8psk(Fc_t,fre_sigle_t,Ns_t,fs_mf_t,snr_r,fr_err_r,phi_err_r)*100;
end
figure;
plot(snr_arry,err_rate,'-d');
txt1 = sprintf('中频采样率:%03.2f MHz\n接收机频偏:%02.2f ppm\n接收机相移:%02.2f ppm',fs_mf_t/1e6,fr_err_r,phi_err_r);
text(0.15*max(snr_arry),0.75*max(err_rate),txt1);
title('信道SNR对于误码率影响');
xlabel('SNR/dB');
ylabel('误码率/%');
snr_r = snr0;
%% 中频采样率影响分析
fs_mf_min = 1e6;
fs_mf_max = 100e6;
fs_mf_arry = fs_mf_min : (fs_mf_max-fs_mf_min) / (NN-1) :fs_mf_max;
err_rate = zeros(1,NN);
for n = 1:1:NN
fs_mf_t = fs_mf_arry(1,n);
err_rate(1,n) = my_d8psk(Fc_t,fre_sigle_t,Ns_t,fs_mf_t,snr_r,fr_err_r,phi_err_r)*100;
end
figure;
plot(fs_mf_arry,err_rate,'-d');
txt1 = sprintf('接收信噪比: %03.02fdB\n接收机频偏:%02.2f ppm\n接收机相移:%02.2f ppm',snr_r,fr_err_r,phi_err_r);
text(0.15*max(fs_mf_arry),0.75*max(err_rate),txt1);
title('接收机采样速率对误码率的影响');
xlabel('采样率/sps');
ylabel('误码率/%');
fs_mf_t = fs_mf0;
%% 接收频偏分析
fr_err_min = -50;
fr_err_max = 50;
fr_err_arry = fr_err_min : (fr_err_max-fr_err_min) / (NN-1) :fr_err_max;
err_rate = zeros(1,NN);
for n = 1:1:NN
fr_err_r = fr_err_arry(1,n);
err_rate(1,n) = my_d8psk(Fc_t,fre_sigle_t,Ns_t,fs_mf_t,snr_r,fr_err_r,phi_err_r)*100;
end
figure;
plot(fr_err_arry,err_rate,'-d');
txt1 = sprintf('中频采样率:%03.2f MHz\n接收信噪比: %03.02fdB\n接收机相移:%02.2f ppm',fs_mf_t/1e6,snr_r,phi_err_r);
text(-30,0.75*max(err_rate),txt1);
title('接收机频偏对误码率的影响');
xlabel('频率误差/ppm');
ylabel('误码率/%');
fr_err_r = fr_err0;
%% 接收相偏分析
phi_err_min = -50;
phi_err_max = 50;
phi_err_arry = phi_err_min : (phi_err_max-phi_err_min) / (NN-1) :phi_err_max;
err_rate = zeros(1,NN);
for n = 1:1:NN
phi_err_r = phi_err_arry(1,n);
err_rate(1,n) = my_d8psk(Fc_t,fre_sigle_t,Ns_t,fs_mf_t,snr_r,fr_err_r,phi_err_r)*100;
end
figure;
plot(phi_err_arry,err_rate,'-d');
txt1 = sprintf('中频采样率:%03.2f MHz\n接收信噪比: %03.02fdB\n接收机频偏:%02.2f ppm\n',fs_mf_t/1e6,snr_r,fr_err_r);
text(-30,0.75*max(err_rate),txt1);
title('接收机相偏对误码率的影响');
xlabel('相位误差/ppm');
ylabel('误码率/%');
phi_err_r = phi_err0;
五、参考资料
https://zhuanlan.zhihu.com/p/47258287 贼详细的8PSK调制与解调详细过程
《数字通信-基础与应用》 第二版【美】Bernard Sklar 电子工业出版社
《现代通信系统(MATLAB版)》 第三版 【美】John G.Proakis等 电子工业出版社

浙公网安备 33010602011771号