QPSK调制与解调-MATLAB基带仿真
仿真步骤
产生一定长度的值为0或1的随机序列 s ( t ) s(t) s(t)。将 s ( t ) s(t) s(t)映射到QPSK星座图上的星座点。产生I/Q两路高斯白噪声,将调制后的信号通过AWGN信道,得到输出信号 r ( t ) r(t) r(t)。利用最小距离判决准则实现检测,统计误符号数。绘制仿真误符号率与理论误符号率曲线,进行对比分析。
QPSK发送端星座图:
格雷码排布。
若使用非格雷码排布,误比特率会升高,对误符号率无影响。
QPSK相干解调:
最小距离判决准则:
s ^ ( t ) = arg min 1 ≤ m ≤ M ∥ r ( t ) − s m ( t ) ∥ 2 2 \hat{s}(t)=\underset{1 \leq m \leq M}{\arg \min}{\|r(t)-s_m(t)\|_2^{2}} s^(t)=1≤m≤Margmin∥r(t)−sm(t)∥22
QPSK理论误符号率:
P e = 2 Q ( 2 E b N 0 ) [ 1 − 1 2 Q ( 2 E b N 0 ) ] P_e=2Q(\sqrt{\frac{2 \mathcal{E}_{b}}{N_{0}}})\left[1-\frac{1}{2} Q(\sqrt{\frac{2 \mathcal{E}_{b}}{N_{0}}})\right] Pe=2Q(N02Eb )[1−21Q(N02Eb )]
仿真结果:
MATLAB基带仿真程序:
clcclearclose all% Title: QPSK调制与解调 %% Data: .03.28 %% Author: K.X.Song % M = 4; % 调制阶数L_data = 1000000; % 数据长度L_symbol = L_data/log2(M); % 符号长度data = round(rand(1,L_data)); % 原始数据EbN0_dB = 0:12;% Eb/N0 dB形式EbN0 = 10.^(EbN0_dB/10);% Eb/N0Eb = 1/log2(M);% 每比特能量N0 = Eb ./ EbN0; % 噪声功率error = zeros(1,length(EbN0_dB)); % 预置错误符号个数ser = zeros(1,length(EbN0_dB)); % 预置仿真误符号率tser_BPSK = zeros(1,length(EbN0_dB)); % 预置BPSK理论误符号率tser_QPSK = zeros(1,length(EbN0_dB)); % 预置QPSK理论误符号率% QPSK调制(格雷码排布)send = zeros(1,L_symbol);% 预设发送信号send_set = [1,1j,-1,-1j];% 发射端星座点for q = 1:L_symbolif (data(2*q-1:2*q) == [0,0])send(q) = send_set(1);% 00 => 1elseif (data(2*q-1:2*q) == [0,1])send(q) = send_set(2);% 01 => 1jelseif (data(2*q-1:2*q) == [1,1])send(q) = send_set(3);% 11 => -1elsesend(q) = send_set(4);% 10 => -1jendendfor q = 1:length(EbN0_dB)noise = sqrt(N0(q)/2)*randn(1,L_symbol) + 1j*sqrt(N0(q)/2)*randn(1,L_symbol); % AWGNreceive = send + noise; % 接收信号detect = zeros(1,L_symbol); % 预置检测信号distance = zeros(1,M); % 解调:距离检测 for t = 1:L_symbolfor w = 1:Mdistance(w) = norm(receive(t) - send_set(w))^2;% 接收信号到所有星座点的距离endpos = find(distance == min(distance));% 最小距离星座点的位置detect(t) = send_set(pos); % 解调后的符号if (detect(t) ~= send(t))error(q) = error(q) + 1;% 统计错误符号数endendser(q) = error(q)/L_symbol; % QPSK仿真误符号率tser_BPSK(q) = qfunc(sqrt(2*EbN0(q)));% BPSK理论误比特率tser_QPSK(q) = 2*qfunc(sqrt(2*EbN0(q)))*(1-qfunc(sqrt(2*EbN0(q)))/2); % QPSK理论误符号率endfiguresemilogy(EbN0_dB,ser,'o',EbN0_dB,tser_BPSK,'k',EbN0_dB,tser_QPSK,'b');% 画图grid on;% 坐标轴开启axis([0 10 10^-5 10^-1]) % 限制作图范围xlabel('Eb/N0 (dB)'); % 横坐标ylabel('SER'); % 纵坐标legend('QPSK仿真误符号率','BPSK理论误符号率','QPSK理论误符号率'); % 图例