2PSK调制解调及误码率仿真 - MATLAB实现

本文介绍了2PSK调制解调的基本原理,并使用MATLAB对其进行了仿真,包括信号生成、调制、加噪、解调、判决等步骤,最后绘制了2PSK系统的误码率曲线。

1. 2PSK基本原理

2PSK(Binary Phase Shift Keying)即二进制相移键控,是一种数字调制方式。它使用两个相位差为180°的正弦波来表示数字信号的'0'和'1'。

2. MATLAB仿真

2.1 主程序matlabclear allclose all

a = 1; % 载波振幅fc = 2; % 载波频率(Hz)SNRindB1 = -5:1:12; % SNR取值范围SNRindB2 = -5:0.2:12; % SNR取值范围N_sample = 100; % 每个码元的采样点数N = 10000; % 码元数Ts = 1; % 码元宽度

d = sign(rand(1,N)-0.5+eps); % 产生双极性二进制码元df = 0.01;

simu_err_prb = zeros(1,length(SNRindB1));theo_err_prb = zeros(1,length(SNRindB2));theo_err_prb1 = zeros(1,length(SNRindB2));

% 计算理论误码率for i = 1:length(SNRindB2) SNR = 10^(SNRindB2(i)/10); % 计算普通接收机的理论误码率 theo_err_prb(i) = 0.5erfc(sqrt(SNR)); % 计算最佳接收机理论误码率 theo_err_prb1(i) = 0.5erfc(sqrt(2*SNR)); end

% 计算普通2PSK接收机实际误码率for i = 1:length(SNRindB1) [numoferr, panjue, desingal, t] = bpskberr(a, fc, SNRindB1(i), N_sample, N, Ts, d, df); simu_err_prb(i) = numoferr;end

% 画误码率曲线图semilogy(SNRindB2, theo_err_prb, SNRindB1, simu_err_prb, 'o', SNRindB2, theo_err_prb1, '*');axis([-5 12 0.00000001 1]);xlabel('SNR in dB');ylabel('Prb of Err');legend('蒙特卡洛仿真误码率', '2psk接收机实际误码率', '最佳接收机理论误码率');

2.2 2PSK误码率计算子程序matlabfunction [numoferr, panjue, desingal, t] = bpskberr(A, fc, snr, N_sample, N, Ts, d, df) % 求误码率 % -------------------系统仿真参数 % A: %载波振幅 % fc: %载波频率(Hz) % snr: %信噪比 % N_sample: % 每个码元的采样点数 % N: % 码元数 % Ts: % 码元宽度 % d:输入二进制代码 % df:频率分辨率 % -------------------输出(返回)参数 % numoferr: %误码率 % panjue: 恢复的二进制代码1用1表示,0用-1表示 % desingal: %恢复的数字基带信号 % t: 时域采样时序 % ----------------------生成调制信号 B = 1/Ts; f_start = fc-B; f_cutoff = fc+B; fs = fcN_sample; % 采样频率 ts = Ts/fs; % 采样时间间隔 t = 0:ts:NTs-ts; Lt = length(t); % 产生二进制信源 dd = sigexpand((d+1)/2, fcN_sample); gt = ones(1, fcN_sample); % NRZ波形 d_NRZ = conv(dd, gt); d_sjx = 2d_NRZ-1; % 生成双极性NRZ信号 % 对数字基带信号进行2PSK调制 ht = Asin(2pifct); % 载波 s_2psk = d_sjx(1:Lt).ht; % 生成2PSK信号 % 生成高斯白噪声 snr_lin = 10^(snr/10); signal_energy = 0.5A^2Ts; % 求出接收信号平均能量 noise_power = (signal_energyfs)/(snr_lin4); % 求出噪声方差(噪声均值为0) noise_std = sqrt(noise_power); % 求出噪声均方差 noise = noise_std.randn(1,Lt); % 以噪声均方差作为幅度产生高斯白噪声 % 将已调信号送入信道 r = s_2psk(1:Lt) + noise(1:Lt); % 叠加了噪声的已调信号,相当于将已调信号送入理想信道 [rf, r, df1, f] = T2F(r, ts, df, fs); % 在接收端先通过带通滤波器 [H, f] = bp_f(length(rf), f_start, f_cutoff, df1, fs, 1); DEM = H.rf; % 滤波器输出的功率谱 [dem] = F2T(DEM, fs); % 滤波器的输出信号波形 der = dem(1:Lt).ht; % 混频 [derf, der, df1, f] = T2F(der, ts, df, fs); % 再经过低通滤波器 [LPF, f] = lp_f(length(derf), B, df1, fs, 1); DM = LPF.derf; % 理想低通滤波器输出的功率谱 [dm] = F2T(DM, fs); % 理想低通滤波器的输出信号 % 最后对LPF输出信号抽样判决 panjue = zeros(1,N); % 建立存储判决值的矩阵 % 抽样判决,规则:大于等于0判1,小于0判-1 for i = 1:N if dm(fcN_sample(i-1)+fcN_sample/2+1) >= 0 % 抽样判决时刻 panjue(i) = 1; else panjue(i) = -1; end end % 生成判决出的基带信号波形 dd1 = sigexpand(panjue, fcN_sample); gt1 = ones(1, fc*N_sample); % NRZ波形 desinga = conv(dd1, gt1); desingal = desinga(1:Lt); % 统计误码数 numoferr = sum(abs(panjue-d)/2)/N; % 计算出错误码元数end

3. 仿真结果

运行程序后,可以得到2PSK系统在不同信噪比下的误码率曲线图。

4. 总结

本文通过MATLAB仿真,实现了2PSK调制解调过程,并绘制了误码率曲线。通过仿真,可以更加直观地理解2PSK的工作原理,并分析其性能。


原文地址: https://www.cveoy.top/t/topic/pUY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录