1 信道
信道是通信系统不可缺少的部分之一。信道是将来自发送端的信号传送到接收端的理媒质,可以分为有线信道和无线信道。信道的质量影响着信号的接收和解调,这种影响体现在两个方面:一方面信号在实际信道中传输时,由于信道特性不理想会引起信号波形失真。另一方面信道中在在各种噪声会干扰信号的传输。信道通常可以分为加性高斯白噪声信道、多径 Rayleigh 衰落信道和 Rician 衰落信道等。
2 加性高斯白噪声信道
信号在信道传输的过程中,不可避免地会受到各种干扰,这些干扰统称为“噪声”。加性高斯白噪声(Additive White Gaussian Noise,AWGN)是最常见的一种噪声,它存在于各种传输媒质中,包括有线信道和无线信道。加性高斯白噪声表现为信号围绕平均值的一种机波动过程。加性高斯白噪声的均值为0,方差是噪声功率的大小。一般情况下,噪声功越大,信号的波动幅度就越大,接收端接收到的信号的误比特率就越高。在研究通信系统的提码率与信道质量的关系时,一般先研究它在AWGN 信道下的性能,然后再把它推广到具有快衰落的复杂情况。
msg_rx = awgn(msg_tx, SNR(ii), 'measured'); % AWGN信道
3 Rayleigh信道
Rayleigh信道是一种经典的无线信道模型,常用于描述没有直射路径(非视距,NLoS)且多径传播显著的无线通信环境,例如城市中的复杂环境。它假设接收到的信号是多个反射信号的叠加,信道增益服从Rayleigh分布。
在仿真过程中,假设传输比特数为:num_symbols,经过Rayleigh信道,可以表示为:
h_rayleigh = (1/sqrt(2)) * (randn(1, length(msg_tx)) + 1i * randn(1, length(msg_tx)));% Rayleigh信道
msg_tx_rayleigh = h_rayleigh .* msg_tx+noise; % 信号经过Rayleigh信道
4 仿真结果
1.该程序用Matlab实现了基带信号调制的方式实现QPSK调制和解调过程,用scatter polt画出可视化的散点图
2.该程序模拟了QPSK调制经过AWGN信道下的误码率和误比特率的性能
3.该程序模拟了QPSK调制在AWGN和Rayleigh信道下的误码率和误比特率性能对比
%% author:闲鱼/b站 ID:【不喜欢MIMO】
clear; % 清除工作区的所有变量
clc; % 清除命令窗口的内容
% 参数初始化
nsamp = 2; % 每符号的采样数
numsymbol = 1e6; % 符号数目
ts = 1 / (nsamp * numsymbol); % 每采样点时间间隔
t = (0:nsamp*numsymbol-1) * ts; % 时间向量
M = 4; % 调制阶数 (QPSK)
grayencod = [0 1 3 2]; % Gray编码表,用于降低误码率
SNR = 0:8; % 信噪比范围 (dB)
EbN0 = 10.^(SNR/10);
% 遍历每个信噪比点,进行信号调制、传输与解调
for ii = 1:length(SNR)
% 生成随机符号信息
msg = randi([0 3], 1, numsymbol); % 生成均匀分布的随机符号 (0-3)
% Gray编码
msg_gr = grayencod(msg + 1); % 对符号进行Gray编码
% QPSK调制
msg_tx = pskmod(msg_gr, M); % QPSK调制
msg_tx = rectpulse(msg_tx, nsamp); % 矩形脉冲成型,增加采样率
noise = sqrt(1/(2*EbN0(ii))) * (randn(1, length(msg_tx)) + 1i*randn(1,length(msg_tx)));
% Rayleigh信道
h_rayleigh = (1/sqrt(2)) * (randn(1, length(msg_tx)) + 1i * randn(1, length(msg_tx))); % Rayleigh信道
msg_tx_rayleigh = h_rayleigh .* msg_tx+noise; % 信号经过Rayleigh信道
% AWGN信道
msg_rx_awgn = awgn(msg_tx, SNR(ii), 'measured'); % 仅AWGN信道
msg_rx_rayleigh = awgn(msg_tx_rayleigh, SNR(ii), 'measured'); % Rayleigh + AWGN信道
% 信号下采样
msg_rx_down_awgn = intdump(msg_rx_awgn, nsamp); % AWGN信号下采样
msg_rx_down_rayleigh = intdump(msg_rx_rayleigh./h_rayleigh, nsamp); % Rayleigh信号下采样
% QPSK解调
msg_gr_demod_awgn = pskdemod(msg_rx_down_awgn, M); % AWGN信道解调
msg_gr_demod_rayleigh = pskdemod(msg_rx_down_rayleigh, M); % Rayleigh信道解调
% 逆Gray编码
[dummy, graydecod] = sort(grayencod); % 构造逆Gray编码表
graydecod = graydecod - 1; % 调整索引到符号范围
msg_demod_awgn = graydecod(msg_gr_demod_awgn + 1); % AWGN信道逆Gray解码
msg_demod_rayleigh = graydecod(msg_gr_demod_rayleigh + 1);% Rayleigh信道逆Gray解码
% 误码率 (BER) 和符号错误率 (SER) 计算
[errorBit, BER_awgn(ii)] = biterr(msg, msg_demod_awgn, log2(M)); % AWGN信道 BER
[errorBit, BER_rayleigh(ii)] = biterr(msg, msg_demod_rayleigh, log2(M)); % Rayleigh信道 BER
[errorSym, SER_awgn(ii)] = symerr(msg, msg_demod_awgn); % AWGN信道 SER
[errorSym, SER_rayleigh(ii)] = symerr(msg, msg_demod_rayleigh); % Rayleigh信道 SER
end
scatterplot(msg_tx(1:5000)); %画出发射信号前10000个元素星座图
title('发射信号星座图');
xlabel('同相分量');
ylabel('正交分量');
scatterplot(msg_rx_awgn(1:5000)); %画出接收信号前10000个元素星座图
title('接收信号星座图');
xlabel('同相分量');
ylabel('正交分量');
hold off;
% 绘制BER和SER的曲线
figure;
semilogy(SNR,BER_awgn,'-ro',SNR,SER_awgn,'-r*'); %画出BER和SER随SNR变化的曲线
legend('BER','SER');
title('QPSK在AWGN信道下的性能-闲鱼ID【不喜欢MIMO】');
xlabel('信噪比(dB)');
ylabel('SER and BER');
figure;
semilogy(SNR, BER_awgn, '-ro', SNR, SER_awgn, '-r*', ...
SNR, BER_rayleigh, '-ko', SNR, SER_rayleigh, '-k*', 'LineWidth', 0.75);
legend('AWGN信道BER', 'AWGN信道SER', 'AWGN+Rayleigh衰落BER', 'AWGN+Rayleigh衰落SER', 'Location', 'southwest');
title('QPSK在AWGN和Rayleigh信道下的性能-闲鱼ID【不喜欢MIMO】');
xlabel('SNR (dB)');
ylabel('SER and BER');