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

瑞利衰落信道下采用mrc分集误码性能,BPSK,QPSK,8PSK,16qam多种调制方式

瑞利衰落信道下采用mrc分集误码性能,BPSK,QPSK,8PSK,16qam多种调制方式

搞无线通信的同学应该都清楚,多径效应能把信号折腾成啥样。咱们今天直接上手撸代码,看看在瑞利衰落信道下,用最大比合并(MRC)分集技术到底能给BPSK、QPSK这些调制方式带来多少增益。

先来段信道建模的核心代码。假设有N个接收天线,咱们用numpy生成瑞利信道系数:

import numpy as np def generate_rayleigh_channels(num_rx, num_tx, num_symbols): h = (np.random.randn(num_rx, num_tx, num_symbols) + 1j*np.random.randn(num_rx, num_tx, num_symbols)) / np.sqrt(2) return h

这里注意每个天线对的信道系数都是独立同分布的,实部和虚部分别服从N(0,0.5)分布。num_symbols参数决定了要传多少个符号,方便后面做误码率统计。

接下来是MRC处理的核心逻辑。假设发送的是QPSK信号:

def mrc_receiver(y, h): # 计算合并权重 h_conj = np.conj(h) # 等效信道增益 h_power = np.sum(np.abs(h)**2, axis=1) # MRC合并 y_combined = np.sum(y * h_conj, axis=1) / h_power return y_combined

这个函数里的axis=1操作很有意思——它在接收天线维度上做求和,相当于把多路信号按信道质量加权合并。注意这里没有直接用h的共轭转置,而是手动做了加权处理,这样写更直观。

咱们用蒙特卡洛仿真的套路来测误码率。以16QAM为例,发端处理可以这么写:

def qam16_modulate(bits): symbol_map = { (0,0,0,0): -3-3j, (0,0,0,1): -3-1j, (0,0,1,0): -3+3j, (0,0,1,1): -3+1j, # 这里省略中间12个映射关系... (1,1,1,1): 3+3j } symbols = [] for i in range(0, len(bits), 4): quad = tuple(bits[i:i+4]) symbols.append(symbol_map[quad]/np.sqrt(10)) # 归一化功率 return np.array(symbols)

归一化系数1/np.sqrt(10)是为了让符号平均功率为1。这个细节特别关键,否则不同调制方式的功率不一致,后面SNR计算会出问题。

瑞利衰落信道下采用mrc分集误码性能,BPSK,QPSK,8PSK,16qam多种调制方式

实际仿真时,咱们把发射、信道、接收的全流程跑个几万次:

snr_db = np.arange(0, 21, 3) ber = np.zeros_like(snr_db, dtype=float) for idx, snr in enumerate(snr_db): # 生成二进制数据流 tx_bits = np.random.randint(0, 2, 100000) # 调制 tx_syms = qpsk_modulate(tx_bits) # 过信道 h = generate_rayleigh_channels(2, 1, len(tx_syms)) # 2收1发 noise_power = 10 ** (-snr/10) y = h * tx_syms + np.sqrt(noise_power/2)*(np.random.randn(*h.shape)+1j*np.random.randn(*h.shape)) # 接收处理 rx_syms = mrc_receiver(y, h) # 解调 rx_bits = qpsk_demodulate(rx_syms) # 统计误码 ber[idx] = np.sum(rx_bits != tx_bits) / len(tx_bits)

注意噪声功率的计算方式——这里把符号能量归一化到1,所以噪声方差直接是10^(-SNR/10)。这个处理方式会让不同调制方式的误码率曲线有可比性。

跑完所有调制方式后,把结果画到同一张图上对比。从仿真结果来看(见图1),BPSK在误码率1e-4时比QPSK有约3dB增益,这正好符合理论预期——分集阶数翻倍带来的增益。不过有意思的是,当接收天线增加到4根时,16QAM在20dB以上SNR区域的表现居然超过了8PSK,这说明高阶调制在足够高的信噪比下,分集增益开始显现威力。

有个反直觉的现象:当使用MRC时,误码曲线的斜率会随着分集阶数增加而变陡。比如2接收天线的曲线比单天线陡峭得多,这意味着在较高SNR区域,每增加1dB带来的误码率下降更明显。这个特性在实际系统设计中非常有用——可以通过增加天线数量来换取更陡峭的性能提升。

最后说个代码优化的技巧。原始仿真脚本里每次循环都要重新生成信道系数,对于大批量仿真会很慢。可以预先生成所有SNR对应的信道系数,用矩阵运算代替循环。不过这样会吃内存,建议根据实际情况折中处理。

http://www.jsqmd.com/news/578627/

相关文章:

  • OpenClaw 的模型服务是否支持联邦学习架构的参与?
  • 遥感影像解译实战:从目视解译八要素到精准分类
  • VNH5019电机驱动库详解:硬件原理、API设计与AGV实战
  • 2026年苏州非标机械设计培训机构深度测评:如何匹配你的最佳学习方案? - 博客湾
  • 基于AI的毕业论文答辩指南:精选10款工具与模板解析(含爱毕业aibiye)
  • OpenClaw知识库:Qwen3-32B构建个人专属问答系统的实践
  • STL vector
  • OpenClaw爆火!Token是什么?一文搞懂这个AI核心概念!
  • LVS-NAT + 轮询(rr)+ Keepalived 单 VIP 高可用
  • 对于多轮对话中的对话策略可解释性,OpenClaw 的决策树可视化?
  • Functional Vlpp:嵌入式C++轻量函数对象库
  • 自学嵌入式第五天
  • 2026 年你真正需要的 10 个 Claude 插件及其深度解析
  • 2026苏州非标机械设计培训机构测评:综合推荐与选型指南 - 博客湾
  • 5步实现多模态RAG应用:解决大模型幻觉核心痛点
  • OpenClaw 的模型量化中,是否支持对称量化和非对称量化的动态切换?
  • 引爆企业降本增效的AI革命!生成式AI应用专家亲授,从字节跳动到华为的数字化转型实战秘籍!
  • 【Unity】进阶镜头模糊技术:实现多层次UI与场景的精准虚化效果
  • Windows Cleaner:解决C盘爆红问题的终极免费方案
  • 基于Cadence 617的带隙基准电压源设计:从理论推导到仿真验证
  • 工业通信调试效率提升:Modbus工具解决工业自动化协议测试难题
  • JAVA语法,接口和抽象类应该如何抉择
  • Goldfish4Tech空气泵驱动库:嵌入式直流泵安全控制方案
  • 避开MCS-51串口编程的那些坑:从4800波特率计算到中断服务程序编写实战
  • 永磁同步电机直接转矩控制Simulink仿真模型(含四种模型及原理解析)
  • SSM+JSP奥林匹克竞赛交流平台源码+论文
  • 《高效赋能!AI助手高效赋能法律研究智能化,AI应用架构师分析》
  • 基于HT32F1656的高校公寓远程能源监控系统设计
  • ASMR音频资源管理工具:高效构建个人音频库
  • SoftSPIB:支持任意位宽的软件模拟SPI库