文章目录
- 前言
- 一、MATLAB仿真代码
- 二、仿真结果
前言
QPSK信号在AWGN和Rayleigh衰落信道下的性能仿真MATLAB代码。
一、MATLAB仿真代码
代码如下:
nSamp = 8; % 矩形脉冲的采样点数
nSymbol = 1000000; % 传输的符号数
ts = 1/(nSymbol*nSamp); % samples的时间序列
% t = (0:nSymbol*nSamp-1)*ts;M = 4; % QPSK的调制阶数
k = log2(M); % 每个QPSK符号包含的比特数
SNR = -3:5; % 传输矩形脉冲成形信号,使用SNR (dB)
graycode = [0 1 3 2]; % Gray编码映射表BER_g = zeros(size(SNR)); % 初始化AWGN信道BER向量
SER_g = zeros(size(SNR)); % 初始化AWGN信道SER向量
BER_r = zeros(size(SNR)); % 初始化Rayleigh衰落信道BER向量
SER_r = zeros(size(SNR)); % 初始化Rayleigh衰落信道SER向量% 生成Rayleigh衰落信道
fd = 10; % 最大多普勒频率,单位Hz
sinNum = 10; % 正弦波的数量
h = Jakes_Rayleigh(fd, sinNum, ts, nSymbol*nSamp); % 生成Rayleigh衰落%% QPSK信道仿真
for p=1:length(SNR)msg = randi([0 M-1], 1, nSymbol); % 生成随机符号msg_gr = graycode(msg+1); % Gray编码映射msg_tx = pskmod(msg_gr, M); % QPSK调制msg_tx = rectpulse(msg_tx, nSamp); % 矩形脉冲成形(插相同的值)% 使用AWGN信道msg_rx = awgn(msg_tx, SNR(p), 'measured'); % 未衰落信号通过AWGN信道msg_rx_down = intdump(msg_rx, nSamp); % 未衰落信号匹配滤波相干解调,intdump函数在一个符号周期内对信号msg_rx取平均值msg_gr_demod = pskdemod(msg_rx_down, M); % QPSK解调msg_demod = graycode(msg_gr_demod+1); % Gray编码逆映射[~, BER_g(p)] = biterr(msg, msg_demod, k); % 计算BER[~, SER_g(p)] = symerr(msg, msg_demod); % 计算SERmsg_tx1 = h .* msg_tx; % 信号通过Rayleigh衰落信道msg_rx1 = awgn(msg_tx1, SNR(p), 'measured'); % 衰落信号通过AWGN信道msg_rx_down1 = intdump(msg_rx1,nSamp); % 衰落信号匹配滤波相干解调msg_gr_demod1 = pskdemod(msg_rx_down1,M); % QPSK解调msg_demod1 = graycode(msg_gr_demod1+1); % Gray编码逆映射[~, BER_r(p)] = biterr(msg,msg_demod1,k); % 计算BER[~, SER_r(p)] = symerr(msg, msg_demod1); % 计算SER
end%% 画图
figure()
semilogy(SNR,BER_g,'b-o',SNR,SER_g,'b-*',SNR,BER_r,'r-d',SNR,SER_r,'r-x')
grid on
legend('AWGN信道BER','AWGN信道SER', ...'Rayleigh+AWGN信道BER','Rayleigh+AWGN信道SER', ...'Location','southwest')
title('QPSK在AWGN和Rayleigh衰落信道下的性能')
xlabel('信噪比(dB)')
ylabel('误比特率和误符号率')