MATLAB的QPSK误比特率性能仿真程序
时间: 2023-06-27 16:07:23 浏览: 165
以下是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信道发送信号,接收端接收信号后进行解调,把估计的比特序列转成码元序列,最后计算误码率并绘制误码率曲线。其中,理论误码率是通过公式计算得到,仿真误码率是通过模拟得到的。
阅读全文