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

直接上干货,先扔个QPSK星座图代码镇楼

实现QPSK调制,通过瑞利信道和高斯信道,计算其误码率,并进行比较。 星座图,误比率对比,或者对ASK,FSK,DPSK等各种误码率对比计算。

import numpy as np import matplotlib.pyplot as plt symbols = np.array([1+1j, -1+1j, -1-1j, 1-1j])/np.sqrt(2) # 归一化能量 plt.scatter(np.real(symbols), np.imag(symbols), marker='x') plt.title('QPSK Constellation') plt.grid(True) plt.axhline(0, color='black'); plt.axvline(0, color='black') plt.show()

这个星座图像极了四个角上的忍者镖,每个点对应两个比特。比如(1,1)对应00,(-1,1)对应01...注意这里用了能量归一化,防止发射功率超标。

接下来造个简易版QPSK发射机:

def qpsk_mod(bit_stream): # 比特配对 paired_bits = bit_stream.reshape(-1, 2) # 映射星座点 symbol_indices = np.packbits(paired_bits, axis=1).flatten() return symbols[symbol_indices]

这里有个骚操作:用np.packbits把两两比特转换成0-3的整数索引。比如[0,1]组合转换成十进制的1,对应symbols数组的第二个元素。

重点来了——信道模拟。先看高斯白噪声信道(AWGN),简单粗暴加噪声:

def awgn_channel(signal, snr_db): snr = 10 ** (snr_db / 10) noise_power = 1 / snr # 符号能量归一化为1 noise = np.sqrt(noise_power/2) * (np.random.randn(*signal.shape) + 1j*np.random.randn(*signal.shape)) return signal + noise

这里噪声方差计算容易踩坑,复数噪声要拆分成实虚部独立的高斯分布,且总功率要除以2。比如当SNR=10dB时,噪声方差应该是0.1/2=0.05。

瑞利信道更刺激,相当于信号被随机镜子反射:

def rayleigh_channel(signal, snr_db): h = (np.random.randn() + 1j*np.random.randn())/np.sqrt(2) # 复高斯衰减 noisy_signal = awgn_channel(signal * h, snr_db) return noisy_signal, h

注意信道系数h的方差要归一化,否则平均功率会爆炸。接收端需要信道估计,这里假设理想信道信息已知。

误码率测试脚本走起:

num_bits = 10**6 snr_range = np.arange(0, 15) ber_awgn = [] ber_rayleigh = [] for snr in snr_range: bits = np.random.randint(0, 2, num_bits) tx_signal = qpsk_mod(bits) # AWGN信道 rx_awgn = awgn_channel(tx_signal, snr) # 瑞利信道 rx_rayleigh, h = rayleigh_channel(tx_signal, snr) # 解调过程省略... # 这里假设完美解调后得到的ber_awgn_val和ber_rayleigh_val ber_awgn.append(ber_awgn_val) ber_rayleigh.append(ber_rayleigh_val) plt.semilogy(snr_range, ber_awgn, 'o-', label='AWGN') plt.semilogy(snr_range, ber_rayleigh, 's-', label='Rayleigh') plt.xlabel('SNR(dB)'); plt.ylabel('BER') plt.legend(); plt.grid()

实测发现瑞利信道下误码率曲线像滑梯,比AWGN差个十几dB。原因很简单——深衰落发生时,信号直接掉进噪声坑里爬不出来。

顺手对比其他调制方式,用理论公式更省事:

  • BPSK: \(0.5 \text{erfc}(\sqrt{\text{SNR}})\)
  • QPSK: \(0.5 \text{erfc}(\sqrt{\text{SNR}/2})\)
  • 16QAM: \(0.75 \text{erfc}(\sqrt{\text{SNR}/10})\)

画在同一坐标系里会发现,QPSK比BPSK频谱效率翻倍,但代价是多花3dB功率。16QAM更吃信号质量,适合土豪频段。

最后留个思考题:为什么实际系统中QPSK用得比BPSK多?答案藏在那句"频谱效率翻倍"里——在带宽紧缺的通信世界,省带宽可比省功率划算多了。

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

相关文章:

  • 工控圈的老铁们注意了!今天给大家扒一扒某神秘大佬流出的三菱系PLC源码干货。先看这个FX1N的底层代码,实测支持四轴脉冲输出不是吹的,直接上硬核验证
  • 重构工作流:平台型产品经理如何用 AI 极速生成设计与原型?
  • 单相逆变器的效率仿真
  • 保护隐私数据:分类模型本地化训练+云端推理方案
  • 手把手教学:AI万能分类器部署教程,云端GPU开箱即用
  • 分类模型数据增强:云端自动化扩增实战教程
  • 中文文本正负向识别新选择|集成Web界面的StructBERT情感分析镜像
  • FX3U PLC v10.0与V10.51源代码及设计图
  • 三菱FX3U一拖二玩转台达温控器
  • 分类器效果保障:云端A/B测试最佳实践
  • COMSOL针-针电极空气流注放电模型分享
  • 强烈安利10个AI论文软件,专科生毕业论文轻松搞定!
  • Mac用户福音:云端GPU完美运行AI万能分类器
  • PDF智能提取全攻略|基于PDF-Extract-Kit快速实现布局与公式识别
  • 从云端到终端:AutoGLM-Phone-9B实现低延迟多模态推理
  • 基于AutoGLM-Phone-9B的移动端推理优化|从剪枝量化到缓存解码
  • 手机也能跑大模型?AutoGLM-Phone-9B让多模态推理触手可及
  • 分类模型数据漂移:云端监控与自适应训练
  • HY-MT1.5大模型镜像优势解析|媲美商业API的开源之选
  • 面向企业级应用的翻译解决方案|基于HY-MT1.5大模型镜像实践
  • 三菱PlC程序大型项目QCPU+QD77MS16 项目说明如下: 1.宝贝包含一套完整的电气开...
  • 三菱PLC与雅马哈四轴机械手在线检测收料案例程序详解:CClink通讯、串口控制与数据采集伺服...
  • 分类模型效果提升50%的秘诀:云端A100实测技巧
  • 为什么AutoGLM-Phone-9B是端侧AI里程碑?五大技术突破深度解读
  • 如何实现专业级翻译?HY-MT1.5-7B镜像开箱即用指南
  • 如何快速部署AutoGLM-Phone-9B?一文掌握模型下载、量化与服务启动全流程
  • 阿里Qwen开源Qwen3-VL-Embedding 和 Qwen3-VL-Reranker
  • AutoGLM-Phone-9B部署全指南|移动端多模态大模型高效推理实践
  • 如何高效做中文情绪识别?试试这款集成WebUI的大模型镜像
  • 如何在本地部署AutoGLM-Phone-9B?90亿参数轻量化模型实战解析