尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

QPSK调制在瑞利、高斯和莱斯信道下的MATLAB仿真
📅 发布时间:2026/6/19 17:14:51

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/contentcni/65524.html

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

相关新闻

  • uml总结
  • 在 2023 年屌爆了一整年的 shadcn/ui 用的 Headless UI 到底是何方神圣?
  • 2025 储能 EMS 厂商排名:五大品牌以全维度优势领跑,技术与规模双驱动企业凸显

最新新闻

  • 杭州GEO优化公司2026年6月Top5:选型疑问与避坑全解 - GEO优化
  • 2026年最新武汉光谷科技职业技术学校联系方式及招生办电话号码 - 武汉中职最新信息发布
  • 揭秘Mac鼠标滚轮终极优化:让外接鼠标拥有触控板般的丝滑体验
  • MC9RS08KA2内部时钟与定时器深度解析:从原理到低功耗设计实战
  • 2026玉林本地人必选防水补漏检测维修公司靠谱服务商TOP5推荐:房屋渗漏水检测维修/卫生间/厨房/天花板/阳台/外墙渗漏水检测补漏维修-暗管漏水检测专业仪器精准定位漏水点 - 即刻修防水
  • PingFangSC字体实战:现代Web开发中的跨平台中文字体终极配置指南

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号