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等 电子工业出版社