当前位置: 首页 > news >正文

QPSK调制在瑞利、高斯和莱斯信道下的MATLAB仿真

QPSK调制在不同信道条件下性能仿真的MATLAB实现

%% QPSK在瑞利、高斯和莱斯信道下的仿真
clear; close all; clc;%% 仿真参数设置
numBits = 1e6;              % 传输的比特数
SNR_dB = 0:2:20;           % 信噪比范围(dB)
numSNR = length(SNR_dB);    % 信噪比点数% 莱斯信道参数
K_dB = 3;                   % 莱斯K因子(dB)
K = 10^(K_dB/10);           % 线性K因子%% 初始化误码率存储
BER_AWGN = zeros(1, numSNR);
BER_Rayleigh = zeros(1, numSNR);
BER_Rician = zeros(1, numSNR);%% 主仿真循环
for snr_idx = 1:numSNRfprintf('处理 SNR = %d dB...\n', SNR_dB(snr_idx));% 当前SNR值SNR = 10^(SNR_dB(snr_idx)/10);% 初始化误码计数器error_AWGN = 0;error_Rayleigh = 0;error_Rician = 0;%% 数据生成和调制% 生成随机二进制数据data_bits = randi([0 1], 1, numBits);% QPSK调制modulated_symbols = qpsk_modulate(data_bits);%% 信道传输% 高斯白噪声信道received_AWGN = awgn_channel(modulated_symbols, SNR);% 瑞利衰落信道received_Rayleigh = rayleigh_channel(modulated_symbols, SNR);% 莱斯衰落信道received_Rician = rician_channel(modulated_symbols, SNR, K);%% 解调和误码率计算% 高斯信道decoded_bits_AWGN = qpsk_demodulate(received_AWGN);error_AWGN = sum(data_bits ~= decoded_bits_AWGN);% 瑞利信道decoded_bits_Rayleigh = qpsk_demodulate(received_Rayleigh);error_Rayleigh = sum(data_bits ~= decoded_bits_Rayleigh);% 莱斯信道decoded_bits_Rician = qpsk_demodulate(received_Rician);error_Rician = sum(data_bits ~= decoded_bits_Rician);%% 存储误码率BER_AWGN(snr_idx) = error_AWGN / numBits;BER_Rayleigh(snr_idx) = error_Rayleigh / numBits;BER_Rician(snr_idx) = error_Rician / numBits;
end%% 理论误码率计算
% 高斯信道的理论QPSK误码率
theory_BER_AWGN = 0.5 * erfc(sqrt(10.^(SNR_dB/10)/sqrt(2)));% 瑞利信道的理论误码率
theory_BER_Rayleigh = 0.5 * (1 - sqrt(10.^(SNR_dB/10)./(1 + 10.^(SNR_dB/10))));%% 绘制结果
figure('Position', [100, 100, 1200, 800]);% 误码率曲线
subplot(2,2,1);
semilogy(SNR_dB, BER_AWGN, 'bo-', 'LineWidth', 2, 'MarkerSize', 6);
hold on;
semilogy(SNR_dB, BER_Rayleigh, 'rs-', 'LineWidth', 2, 'MarkerSize', 6);
semilogy(SNR_dB, BER_Rician, 'g^-', 'LineWidth', 2, 'MarkerSize', 6);
semilogy(SNR_dB, theory_BER_AWGN, 'b--', 'LineWidth', 1.5);
semilogy(SNR_dB, theory_BER_Rayleigh, 'r--', 'LineWidth', 1.5);
grid on;
xlabel('信噪比 (dB)');
ylabel('误码率 (BER)');
title('QPSK在不同信道下的性能比较');
legend('高斯信道(仿真)', '瑞利信道(仿真)', '莱斯信道(仿真)', ...'高斯信道(理论)', '瑞利信道(理论)', 'Location', 'southwest');
set(gca, 'FontSize', 12);% 星座图展示 (选择SNR=10dB的情况)
snr_demo = 10;
demo_SNR = 10^(snr_demo/10);% 生成演示数据
demo_bits = randi([0 1], 1, 1000);
demo_symbols = qpsk_modulate(demo_bits);% 高斯信道星座图
subplot(2,2,2);
demo_received_AWGN = awgn_channel(demo_symbols, demo_SNR);
plot(real(demo_received_AWGN), imag(demo_received_AWGN), 'b.');
hold on;
plot(real(demo_symbols), imag(demo_symbols), 'ro', 'MarkerSize', 8, 'LineWidth', 2);
grid on;
axis equal;
xlabel('同相分量 (I)');
ylabel('正交分量 (Q)');
title('高斯信道星座图');
legend('接收符号', '发送符号');
set(gca, 'FontSize', 10);% 瑞利信道星座图
subplot(2,2,3);
demo_received_Rayleigh = rayleigh_channel(demo_symbols, demo_SNR);
plot(real(demo_received_Rayleigh), imag(demo_received_Rayleigh), 'r.');
hold on;
plot(real(demo_symbols), imag(demo_symbols), 'bo', 'MarkerSize', 8, 'LineWidth', 2);
grid on;
axis equal;
xlabel('同相分量 (I)');
ylabel('正交分量 (Q)');
title('瑞利信道星座图');
legend('接收符号', '发送符号');
set(gca, 'FontSize', 10);% 莱斯信道星座图
subplot(2,2,4);
demo_received_Rician = rician_channel(demo_symbols, demo_SNR, K);
plot(real(demo_received_Rician), imag(demo_received_Rician), 'g.');
hold on;
plot(real(demo_symbols), imag(demo_symbols), 'bo', 'MarkerSize', 8, 'LineWidth', 2);
grid on;
axis equal;
xlabel('同相分量 (I)');
ylabel('正交分量 (Q)');
title('莱斯信道星座图');
legend('接收符号', '发送符号');
set(gca, 'FontSize', 10);%% 显示性能比较表格
fprintf('\n=== QPSK在不同信道下的性能比较 ===\n');
fprintf('SNR(dB)\t高斯信道\t瑞利信道\t莱斯信道\n');
fprintf('------------------------------------------------\n');
for i = 1:numSNRfprintf('%d\t%.2e\t%.2e\t%.2e\n', ...SNR_dB(i), BER_AWGN(i), BER_Rayleigh(i), BER_Rician(i));
end%% QPSK调制函数
function modulated_symbols = qpsk_modulate(bits)% 将比特流重组为2比特一组reshaped_bits = reshape(bits, 2, []);% 映射到QPSK星座点% 映射规则: 00 -> 1+j, 01 -> 1-j, 11 -> -1-j, 10 -> -1+jI = 1 - 2 * reshaped_bits(1, :);      % 同相分量Q = 1 - 2 * reshaped_bits(2, :);      % 正交分量modulated_symbols = (I + 1j * Q) / sqrt(2);  % 归一化功率
end%% QPSK解调函数
function decoded_bits = qpsk_demodulate(symbols)% 判决I_decision = real(symbols) < 0;Q_decision = imag(symbols) < 0;% 重组为比特流decoded_bits = zeros(1, 2*length(symbols));decoded_bits(1:2:end) = I_decision;decoded_bits(2:2:end) = Q_decision;
end%% 高斯白噪声信道
function received_signal = awgn_channel(signal, SNR_linear)% 计算信号功率signal_power = mean(abs(signal).^2);% 计算噪声功率noise_power = signal_power / SNR_linear;% 生成复高斯噪声noise = sqrt(noise_power/2) * (randn(size(signal)) + 1j*randn(size(signal)));% 添加噪声received_signal = signal + noise;
end%% 瑞利衰落信道
function received_signal = rayleigh_channel(signal, SNR_linear)% 生成瑞利衰落系数 (独立同分布)% 实部和虚部都是零均值、方差为0.5的高斯分布h = (randn(size(signal)) + 1j*randn(size(signal))) / sqrt(2);% 信号通过衰落信道faded_signal = signal .* h;% 计算信号功率signal_power = mean(abs(faded_signal).^2);% 计算噪声功率noise_power = signal_power / SNR_linear;% 生成复高斯噪声noise = sqrt(noise_power/2) * (randn(size(signal)) + 1j*randn(size(signal)));% 添加噪声received_signal = faded_signal + noise;% 理想信道估计下的均衡received_signal = received_signal ./ h;
end%% 莱斯衰落信道
function received_signal = rician_channel(signal, SNR_linear, K)% K: 莱斯K因子 (直射路径功率/散射路径功率)% 莱斯信道的确定性部分 (直射路径)deterministic_part = sqrt(K/(K+1));% 莱斯信道的随机部分 (散射路径)random_part = sqrt(1/(2*(K+1))) * (randn(size(signal)) + 1j*randn(size(signal)));% 总信道系数h = deterministic_part + random_part;% 信号通过衰落信道faded_signal = signal .* h;% 计算信号功率signal_power = mean(abs(faded_signal).^2);% 计算噪声功率noise_power = signal_power / SNR_linear;% 生成复高斯噪声noise = sqrt(noise_power/2) * (randn(size(signal)) + 1j*randn(size(signal)));% 添加噪声received_signal = faded_signal + noise;% 理想信道估计下的均衡received_signal = received_signal ./ h;
end%% 额外的分析:不同K因子对莱斯信道的影响
figure('Position', [100, 100, 1000, 600]);K_dB_values = [-10, 0, 5, 10];  % 不同的K因子(dB)
colors = ['r', 'g', 'b', 'm'];
styles = {'-', '--', ':', '-.'};for k_idx = 1:length(K_dB_values)K_dB = K_dB_values(k_idx);K_linear = 10^(K_dB/10);BER_Rician_varyingK = zeros(1, numSNR);for snr_idx = 1:numSNRSNR = 10^(SNR_dB(snr_idx)/10);% 生成测试数据test_bits = randi([0 1], 1, 10000);test_symbols = qpsk_modulate(test_bits);% 莱斯信道传输received_symbols = rician_channel(test_symbols, SNR, K_linear);% 解调decoded_bits = qpsk_demodulate(received_symbols);% 计算误码率BER_Rician_varyingK(snr_idx) = sum(test_bits ~= decoded_bits) / length(test_bits);endsemilogy(SNR_dB, BER_Rician_varyingK, [colors(k_idx) styles{k_idx}], ...'LineWidth', 2, 'DisplayName', sprintf('K = %d dB', K_dB));hold on;
end% 添加高斯和瑞利作为参考
semilogy(SNR_dB, BER_AWGN, 'k-', 'LineWidth', 3, 'DisplayName', '高斯信道');
semilogy(SNR_dB, BER_Rayleigh, 'k--', 'LineWidth', 3, 'DisplayName', '瑞利信道');grid on;
xlabel('信噪比 (dB)');
ylabel('误码率 (BER)');
title('不同K因子下莱斯信道的QPSK性能');
legend('Location', 'southwest');
set(gca, 'FontSize', 12);

仿真说明

1. 信道模型

  1. 高斯信道 (AWGN)

    • 只有加性高斯白噪声
    • 性能最好,作为参考基准
  2. 瑞利信道

    • 模拟多径衰落环境,无直射路径
    • 性能最差,需要更高的SNR
  3. 莱斯信道

    • 包含一个直射路径和多个散射路径
    • 性能介于高斯和瑞利之间

2. 关键参数

  • K因子: 莱斯信道中直射路径与散射路径的功率比
    • K = 0: 退化为瑞利信道
    • K → ∞: 接近高斯信道

3. 仿真输出

  1. 误码率曲线: 比较三种信道在不同SNR下的性能
  2. 星座图: 展示信号在三种信道中的分布
  3. 性能表格: 数值化的误码率比较
  4. K因子分析: 展示不同K值对莱斯信道性能的影响

4. 运行结果分析

  • 高斯信道性能最佳
  • 瑞利信道由于衰落影响性能最差
  • 莱斯信道性能取决于K因子大小
  • K因子越大,莱斯信道越接近高斯信道

参考代码 MATLAB的QPSK在瑞利、高斯和莱斯信道下仿真 www.youwenfan.com/contentcsk/65524.html

展示了QPSK调制在不同无线信道环境下的性能特性,对于理解无线通信系统设计有重要参考价值。

http://www.dtcms.com/a/541322.html

相关文章:

  • Spring 事件实战及进阶特性
  • Three.js 核心技术:相机(正交 / 透视)、动画与资源加载、音视频播放、事件绑定等解析
  • 搭建公司内部网站网络营销方案的制定
  • centos yum源和epel源更换
  • 西宁平台网站建设杭州商城网站建设
  • 2.3、智能入侵检测:基于机器学习的网络流量异常发现
  • DDD本质论:从哲学到数学,再到工程实践的完整指南之实践篇
  • 中国制造网建站陕西省交通建设集团西长分公司网站
  • MFC 使用自定义光标
  • LeetCode 79. 单词搜索
  • 网站建设维护需要懂哪些知识漂亮网页模板
  • 大模型框架选型:LangChain 与 LlamaIndex、Haystack 的核心差异对比
  • 关注公众号平台seo案例视频教程
  • SPL量化工作台使用教程-1-数据和画图
  • 【QT】窗口
  • 脑科学支持的Python学习法:每天2小时碎片化训练,用‘神经可塑性’打败拖延症“
  • 长春网站业务哪个公司好网页设计师女生工资
  • 南昌做网站开发的公司有哪些竞价推广论坛
  • 行业首发!Spring AI Alibaba + Nacos 支持分布式 Multi-Agent 构建
  • 海口建设网站建立网站需要钱吗
  • Linux上的exec函数族详解
  • 产品推荐|千眼狼全新第二代背照式制冷sCMOS相机上市,再次刷新灵敏度和噪声极限
  • 常见协议格式
  • 境外网站可以备案吗长沙网站排名优化费用
  • h5游戏免费下载:上山打老虎
  • 力扣面试经典150题打卡
  • 网站设计就业压力官方网站开发招标须知
  • Android开发常见报错及解决方法(详细版)
  • 做网站内容火星人网页设计培训
  • 免费微网站_自助建站海外直播tiktok