(7)MATLAB:QPSK理论误符号率和理论误比特率


前言

本文给出QPSK的理论误符号率与理论误比特率公式,并给出MATLAB代码实现,画出性能曲线。


一、QPSK系统的平均误码率

QPSK最佳接收的平均误符号率(用Ps表示)由下式给出:

在这里插入图片描述

其中,Q(x)为Q函数。
注意:公式中的Eb/N0取线性值。下文代码中需要将分贝值转换为线性值,用于画出性能曲线。

二、QPSK系统的平均误比特率

计算QPSK最佳接收的平均误比特率(用Pb表示)一般有两种方法:

1.根据误码率计算从QPSK符号(四进制)译为比特串的比特错误率。

对于多进制调制而言,若比特到符号的映射采用格雷编码,且假设符号错误只发生在相邻符号之间,这意味着一个错误符号中只包含一个比特错误。由于一个QPSK调制符号包含两个传输比特,所以对于采用格雷编码的QPSK最佳接收,有

在这里插入图片描述

2.使用最佳接收的误比特率计算公式。

对于QPSK最佳接收,其平均误比特率也可由下式给出:

在这里插入图片描述

其中,erfc(x)为互补误差函数。Q函数与互补误差函数的关系如下:
在这里插入图片描述

在这里插入图片描述

三、MATLAB代码实现与结果

1.代码实现

QPSK系统的理论误符号率和理论误比特率的MATLAB代码实现如下:

clc
close all
clear all

%% QPSK理论误符号率
EbNodBVec = 0:2:12;                           % Eb/No values to simulate in dB

EbNoLin = 10.^(EbNodBVec/10);                 % converting EbNo from dB to linear scale
q = qfunc(sqrt(2*EbNoLin));

% 误符号率
theorSER = 2 * q .* (1-q/2);                  % Digital Communication

%% QPSK理论误比特率
% 误比特率(由误符号率导出)
theorBER = theorSER./2;                       % Digital Communication

% 误比特率(由理论公式得出)
% theorBER = q;                               % 使用Q函数
% theorBER = 0.5 .* erfc(sqrt(EbNoLin));      % 使用互补误差函数

%% 使用库函数berawgn得到QPSK的误比特率(BER)和误符号率(SER)
M = 4;                                        % 调制阶数Modulation order
[berQPSK, serQPSK] = berawgn(EbNodBVec,'psk',M,'nondiff');

%% 画图对比
figure();
semilogy(EbNodBVec,serQPSK,'o',    EbNodBVec,berQPSK,'*', ...
         EbNodBVec,theorSER,'b-',  EbNodBVec,theorBER,'r-');
legend('Theoretical Symbol error rate',                   'Theoretical Bit error rate', ...
       'Theoretical Symbol error rate(use berawgn)',      'Theoretical Bit error rate(use berawgn)', ...
       'Location','SouthWest');
xlabel('Eb/No (dB)');
ylabel('Error Probability');
title('Symbol and Bit Error Probability - QPSK');
grid on;

2.性能曲线画图

代码运行结果画图如下:

在这里插入图片描述


总结

MATLAB中可以使用berawgn函数得到AWGN信道的误比特率(BER)和误符号率(SER)。为了理解BER和SER的理论计算过程,本文给出了MATLAB代码实现,并通过和berawgn结果对比验证了一致性。

参考资料

1.北邮《通信原理》,周炯磐、庞沁华、续大我、吴伟陵、杨鸿文等
2.Digital Communication,Mehmet Şafak

以下是MATLAB中的QPSK比特率性能仿真程序: ```matlab clear all; close all; clc; Eb_N0_dB = [0:15]; %信噪比范围 for ii = 1:length(Eb_N0_dB) % 生成QPSK调制信号源(二进制信息流) m = [2*(rand(1,1000)>0.5)-1 + j*(2*(rand(1,1000)>0.5)-1)]/sqrt(2); % QPSK调制过程,每个符号1个比特 s = m; % 取得原始信号 n = 1/sqrt(2)*[randn(1,length(s)) + j*randn(1,length(s))]; % 产生噪声 % 信号通过AWGN信道 y = s + 10^(-Eb_N0_dB(ii)/20)*n; %接收端信号 % 解调器把接收到的信号映射回到星座图上 y_re = real(y); y_im = imag(y); ipHat = zeros(1,length(y)); ipHat(find(y_re>0 & y_im>0)) = 1; ipHat(find(y_re<0 & y_im>0)) = 2; ipHat(find(y_re<0 & y_im<0)) = 3; ipHat(find(y_re>0 & y_im<0)) = 4; % 把估计的比特序列转成码元序列 ipHat = ipHat-1; % 计算 nErr(ii) = size(find([m- ipHat]),2); end simBer = nErr/length(m); % 模拟得到的 theoryBer = 0.5*erfc(sqrt(10.^(Eb_N0_dB/10))); %理论 % 绘图 figure(1) semilogy(Eb_N0_dB,theoryBer,'bs-','LineWidth',2); hold on; semilogy(Eb_N0_dB,simBer,'mx-','LineWidth',2); axis([0 15 10^-5 1]) grid on legend('理论','仿真'); xlabel('Eb/No, dB'); ylabel(''); title('QPSK调制曲线'); ``` 程序中,首先设定了信噪比范围,生成QPSK调制信号源,接着通过AWGN信道发送信号,接收端接收信号后进行解调,把估计的比特序列转成码元序列,最后计算并绘制曲线。其中,理论是通过公式计算得到,仿真是通过模拟得到的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值