请写出完成BPSK和QPSK调制在AWGN信道下的SNR-BER误码率性能评估的matlab代码
时间: 2024-03-26 07:34:13 浏览: 97
ofdm.rar_OFDM qpsk 误码率_OFDM_AWGN_Rayleigh_QPSK OFDM rayleigh_ofd
5星 · 资源好评率100%
以下是完成BPSK和QPSK调制在AWGN信道下的SNR-BER误码率性能评估的MATLAB代码:
```
clear all;
close all;
M = 2; % BPSK调制
%M = 4; % QPSK调制
N = 1000000; % 仿真次数
SNR_dB = 0:1:20; % 信噪比范围
SNR = 10.^(SNR_dB./10); % 信噪比
% 生成随机的二进制数据
data = randi([0 M-1], N, 1);
% BPSK调制
if M == 2
mod_data = 2*data - 1;
elseif M == 4 % QPSK调制
mod_data = 1/sqrt(2) * (2*data-1 + 1j*(2*randi([0 1], N, 1)-1));
end
BER = zeros(length(SNR), 1); % 存储误码率
% 仿真信道传输
for i = 1:length(SNR)
% 加性高斯白噪声
noise = sqrt(1./(2*SNR(i))) * (randn(N,1) + 1j*randn(N,1));
channel_output = mod_data + noise; % 信道输出
% BPSK解调
if M == 2
demod_data = sign(real(channel_output));
BER(i) = sum(demod_data ~= data)/N; % 误码率
elseif M == 4 % QPSK解调
demod_data = sign(real(channel_output)) + 1j*sign(imag(channel_output));
demod_data = demod_data/sqrt(2);
demod_data = (demod_data + 1)/2;
BER(i) = sum(demod_data ~= data)/N; % 误码率
end
end
% 绘制误码率曲线
semilogy(SNR_dB, BER);
xlabel('SNR (dB)');
ylabel('BER');
title('SNR-BER Performance of BPSK/QPSK in AWGN Channel');
grid on;
```
以上代码中,可以通过修改M的值来选择BPSK或QPSK调制方式,N为仿真次数,SNR_dB为信噪比范围,SNR为信噪比,data为随机生成的二进制数据,BER为存储误码率的数组。在仿真信道传输时,加入了高斯白噪声,并进行了解调和误码率计算。最后通过绘图展示了SNR-BER性能曲线。
阅读全文