QPSK在MATLAB上实现调制解调的代码,包括星座图和误码率
时间: 2024-04-02 13:37:14 浏览: 135
以下是QPSK调制解调的MATLAB代码,包括星座图和误码率计算:
%% QPSK调制解调的MATLAB代码
clear all; clc;
%% 参数设置
N = 10^6; % 发送的比特数
EbN0_dB = -4:2:16; % 信噪比范围
M = 4; % 星座点数
k = log2(M); % 每个符号的比特数
num_errs = zeros(1,length(EbN0_dB)); % 记录每个信噪比下出错的比特数
num_bits = k*N; % 发送的比特数
%% QPSK调制
for ii = 1:length(EbN0_dB)
EbN0 = 10^(EbN0_dB(ii)/10); % 线性信噪比
EsN0 = EbN0 * k; % 符号信噪比
sigma = sqrt(1/EsN0); % 噪声标准差
s = 2*(rand(1,N)>0.5)-1 + 2i*(rand(1,N)>0.5)-1; % 生成发送符号序列
x = sqrt(1/2)*sigma*s; % QPSK调制
% 星座图
figure;
plot(x, 'b.'); hold on; grid on;
axis([-2 2 -2 2]); axis square;
title('QPSK Modulation');
xlabel('Real'); ylabel('Imaginary');
%% AWGN信道
y = x + sigma*(randn(1,N) + 1i*randn(1,N)); % 加入高斯白噪声
% 星座图
figure;
plot(y, 'r.'); hold on; grid on;
axis([-2 2 -2 2]); axis square;
title('QPSK Modulation with AWGN');
xlabel('Real'); ylabel('Imaginary');
%% QPSK解调
r = y/sqrt(2); % 同步并归一化
sr = real(r); si = imag(r); % 分离实部和虚部
bhat1 = (sr>=0); bhat2 = (si>=0); % 判决
% 解调比特串
bhat = [bhat1; bhat2];
bhat = bhat(:)';
%% 误码率计算
num_errs(ii) = sum(abs(bhat - s)>0);
end
%% 误码率曲线
BER = num_errs/num_bits; % 误码率
figure;
semilogy(EbN0_dB,BER,'k*--');
hold on; grid on;
xlabel('Eb/N0 (dB)'); ylabel('BER');
title('QPSK modulation with AWGN');
axis([-4 16 10^-5 1]);
阅读全文