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

用Python和NumPy/Scipy复现DSB调制与希尔伯特解调:一个通信原理的动手实验

用Python和NumPy/Scipy复现DSB调制与希尔伯特解调一个通信原理的动手实验通信原理课程中那些抽象的公式和框图是否让你感到困惑调制解调的理论看似简单但真正动手实现时却无从下手。本文将带你用Python一步步构建完整的DSB调制与希尔伯特解调系统通过代码让理论变得触手可及。1. 实验环境与基础准备在开始前确保你的Python环境已安装以下库import numpy as np import matplotlib.pyplot as plt from scipy.signal import hilbert这些库构成了我们实验的核心工具链NumPy提供高效的数组运算和数学函数Matplotlib用于信号可视化Scipy.signal包含希尔伯特变换等专业信号处理工具1.1 理解关键概念DSB调制双边带调制的核心是将基带信号与高频载波相乘。数学表达式为m(t) s(t) × c(t)其中s(t)是基带信号c(t)是载波信号。希尔伯特解调则利用解析信号的幅度特性恢复原始信号对调制信号进行希尔伯特变换得到解析信号计算解析信号的幅度即为解调信号2. 信号生成与调制实现2.1 构建基带信号我们使用sinc函数生成一个典型的基带信号Fs 2048 # 采样率 t np.arange(-0.5, 0.5, 1/Fs) # 时间轴 s np.sinc(50*t)**2 # 基带信号这段代码创建了一个采样率为2048Hz的系统时间范围从-0.5到0.5秒以sinc函数平方为特征的基带信号2.2 载波生成与DSB调制载波信号是一个高频余弦波调制过程就是简单的乘法运算f_carrier 250 # 载波频率 c np.cos(2*np.pi*f_carrier*t) # 载波信号 m s * c # DSB调制关键参数影响载波频率决定了信号频谱搬移的位置采样率必须至少是载波频率的两倍满足奈奎斯特准则2.3 信号可视化比较三个信号的时域表现plt.figure(figsize(10,6)) plt.subplot(3,1,1) plt.plot(t, s) plt.title(基带信号时域) plt.subplot(3,1,2) plt.plot(t, c) plt.title(载波信号时域) plt.subplot(3,1,3) plt.plot(t, m) plt.title(调制信号时域) plt.tight_layout()3. 频域分析与验证3.1 快速傅里叶变换实现观察信号在频域的特性def plot_spectrum(signal, title): N len(signal) f np.fft.fftshift(np.fft.fftfreq(N, 1/Fs)) spectrum np.fft.fftshift(np.abs(np.fft.fft(signal))) plt.plot(f, spectrum) plt.title(title) plt.figure(figsize(10,6)) plt.subplot(3,1,1) plot_spectrum(s, 基带信号频谱) plt.subplot(3,1,2) plot_spectrum(c, 载波信号频谱) plt.subplot(3,1,3) plot_spectrum(m, 调制信号频谱) plt.tight_layout()3.2 频域特性解读信号类型频谱特征数学原理基带信号集中在低频区域原始信号频谱载波信号单一频率分量狄拉克δ函数调制信号基带频谱对称搬移到载频两侧傅里叶变换的频移特性4. 希尔伯特解调实现4.1 解析信号生成希尔伯特变换的关键步骤h hilbert(m) # 生成解析信号 x np.abs(h) # 取幅度即为解调信号解析信号是一个复信号包含实部原始信号虚部希尔伯特变换后的信号4.2 解调结果验证对比原始基带信号与解调信号plt.figure(figsize(10,4)) plt.subplot(1,2,1) plt.plot(t, s, label原始信号) plt.plot(t, x, --, label解调信号) plt.legend() plt.title(时域对比) plt.subplot(1,2,2) plot_spectrum(s, 原始信号频谱) plot_spectrum(x, 解调信号频谱) plt.title(频域对比) plt.tight_layout()4.3 解调误差分析解调信号可能出现以下失真高频分量衰减由于希尔伯特变换的非理想特性相位偏移解调信号可能存在微小相位延迟幅度变化可能需要归一化处理改进方案# 归一化解调信号 x_normalized x / np.max(x) * np.max(s)5. 参数实验与效果优化5.1 载波频率的影响尝试不同载波频率100Hz, 250Hz, 400Hz观察调制效果载波频率调制效果解调难度100Hz频谱重叠风险容易解调250Hz理想分离效果最佳400Hz频谱分离明显需要更高采样率5.2 采样率的选择采样率对信号重建的影响rates [1024, 2048, 4096] # 不同采样率 for rate in rates: t_test np.arange(-0.5, 0.5, 1/rate) # 重新生成和调制信号... # 比较解调质量经验法则采样率至少是最高频率成分的2.5倍5.3 噪声环境下的鲁棒性测试添加高斯白噪声模拟真实信道noise 0.1 * np.random.randn(len(m)) m_noisy m noise # 重复解调过程...噪声水平与解调质量的关系SNR(dB)解调信号质量可视失真程度30几乎无失真不可见20轻微失真几乎不可见10明显失真可见但可识别6. 完整代码实现与扩展将所有步骤整合为一个可复用的函数def dsb_modulation_demo(f_base50, f_carrier250, Fs2048): # 信号生成 t np.arange(-0.5, 0.5, 1/Fs) s np.sinc(f_base*t)**2 c np.cos(2*np.pi*f_carrier*t) m s * c # 解调过程 h hilbert(m) x np.abs(h) # 可视化代码... return t, s, m, x扩展应用方向音频信号处理尝试用真实音频替代sinc信号多载波系统实现多个信号的频分复用自适应解调自动估计载波频率7. 常见问题与调试技巧问题1解调信号幅度不正确检查希尔伯特变换前是否进行了正确的调制验证载波频率是否满足采样定理问题2频谱显示异常确保使用了fftshift正确排列频率分量检查FFT点数是否足够问题3时域信号出现混叠提高采样率检查时间向量生成是否正确调试建议分阶段验证先确认基带信号正确再检查调制结果参数扫描系统化测试不同参数组合参考对比与理论计算结果交叉验证8. 进阶探索方向对于希望深入研究的读者可以考虑其他调制方式对比# AM调制 m_am (1 0.5*s) * c # 50%调制深度 # SSB调制实现...数字信号处理扩展使用FIR滤波器优化希尔伯特变换实现数字正交解调实时处理实现使用PyAudio进行实时音频处理结合WebAssembly在浏览器中运行机器学习应用# 使用神经网络学习解调过程 model tf.keras.Sequential([ tf.keras.layers.Dense(64, activationrelu), tf.keras.layers.Dense(1) ]) # 训练模型从调制信号预测基带信号...通信系统的Python实现不仅有助于理解理论更为后续的软件定义无线电(SDR)开发打下基础。当你能亲手实现这些算法时那些抽象的公式突然变得生动而具体。

相关文章:

用Python和NumPy/Scipy复现DSB调制与希尔伯特解调:一个通信原理的动手实验

用Python和NumPy/Scipy复现DSB调制与希尔伯特解调:一个通信原理的动手实验 通信原理课程中那些抽象的公式和框图,是否让你感到困惑?调制解调的理论看似简单,但真正动手实现时却无从下手。本文将带你用Python一步步构建完整的DSB调…...

东莞纸托推荐

在环保意识日益增强的今天,纸托作为可降解、可回收的包装材料,正受到越来越多行业的青睐。如果你正在为电子产品、五金配件或化妆品寻找合适的包装方案,东莞市禾本包装有限公司或许是一个值得了解的选择。这家位于茶山镇的工厂,自…...

竞技级输入重映射:Hitboxer的SOCD净化技术深度解析

竞技级输入重映射:Hitboxer的SOCD净化技术深度解析 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 在电子竞技和高端游戏操作中,键盘输入信号的精确处理已成为区分普通玩家与专业选手的关…...

Halcon模板匹配参数调优避坑指南:从inspect_shape_model到find_shape_model的完整配置流程

Halcon模板匹配参数调优避坑指南:从inspect_shape_model到find_shape_model的完整配置流程 在工业视觉检测领域,模板匹配的稳定性直接决定整个系统的可靠性。许多工程师在使用Halcon进行形状匹配时,常常陷入参数调整的泥潭——要么匹配时间过…...

如何用抖音下载工具高效管理内容创作?实用指南全解析

如何用抖音下载工具高效管理内容创作?实用指南全解析 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppor…...

在多模型项目中利用Taotoken模型广场进行高效选型

在多模型项目中利用Taotoken模型广场进行高效选型 1. 多模型项目的选型挑战 在涉及多种任务类型的AI项目中,单一模型往往难以满足所有需求。例如,文本生成任务可能需要考虑创意写作与代码补全的不同特性,而对话系统则需要权衡响应速度与回答…...

3步掌握Maya到Web的3D模型转换:maya-glTF插件完整指南

3步掌握Maya到Web的3D模型转换:maya-glTF插件完整指南 【免费下载链接】maya-glTF glTF 2.0 exporter for Autodesk Maya 项目地址: https://gitcode.com/gh_mirrors/ma/maya-glTF 你是否曾经为Maya创作的3D模型无法在网页上完美展示而烦恼?当精心…...

基于RAG与向量数据库的AI记忆系统:memUBot架构解析与实战

1. 项目概述:一个能记住对话的AI聊天机器人 最近在GitHub上看到一个挺有意思的项目,叫 memUBot ,来自 NevaMind-AI 这个组织。光看名字就能猜个大概——“记忆”和“机器人”的结合体。没错,这本质上是一个具备长期记忆能力的…...

逆向工程Claude代码生成:从黑盒测试到高效提示工程实战

1. 项目概述:一次对Claude代码生成能力的深度逆向工程最近在GitHub上看到一个挺有意思的项目,叫“how-claude-code-works”。光看标题,你可能会觉得这又是一个分析AI代码生成原理的学术研究。但点进去之后,我发现它的视角非常独特…...

VSCode + Cline 接入小米 MiMo Token Plan 保姆级图文教程

1. 获取 MiMo API Key 申请并通过小米 Token Plan 活动后,登录 小米 MiMo 开放平台 进入 订阅管理,复制系统分配的 专属 API Key(格式类似 tp-xxxxx)和 Base URL: https://token-plan-cn.xiaomimimo.com/v1 2. 安装 …...

告别原生Socket API:用sockpp 0.8.1在C++中轻松构建TCP服务器(附完整代码示例)

现代C网络编程实战:基于sockpp 0.8.1构建跨平台TCP服务 在当今分布式系统与微服务架构盛行的时代,网络通信能力已成为C开发者必须掌握的核心技能。传统Berkeley Sockets API虽然功能强大,但其冗长的错误处理和资源管理代码让许多开发者望而生…...

自学渗透测试第30天(第一阶段总结与Metasploitable3部署)

10.5 第一阶段总结与Metasploitable3部署(第30天) 核心目标 完成第一阶段知识总结:系统梳理前29天所学技能,形成清晰的渗透测试基础知识体系。 成功部署Metasploitable3靶机:掌握在虚拟化环境中部署这个复杂、现代漏…...

Pinia 详细使用手册

一、Pinia 核心概述 Pinia 是 Vue 官方推荐的新一代状态管理库,专为 Vue3 设计,也兼容 Vue2。它抛弃了 Vuex 的 Mutations,仅保留 State、Getters、Actions,API 极简、TypeScript 支持完善、轻量高效(约 1KB&#xff…...

技术人退休倒计时:软件测试从业者的后职业生涯规划

一、盘点自身:挖掘退休后的核心竞争力(一)技术经验的沉淀与梳理软件测试从业者在职业生涯中,积累了丰富的技术经验,这是退休后宝贵的财富。从功能测试到性能测试,从自动化测试到安全测试,每一个…...

地铁屏蔽门电机故障诊断【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,查看文章底部二维码(1)基于相关系数优化的变分模态分解信号预处理&#x…...

双鸭山皮带机

在双鸭山的物流、仓储等行业中,皮带机作为一种重要的输送设备,发挥着至关重要的作用。它能够实现物料的连续输送,提高生产效率,降低劳动强度。然而,面对市场上众多的皮带机产品和供应商,企业该如何做出正确…...

别再死记硬背了!用Python的NumPy和Matplotlib亲手画一遍反双曲函数图像,理解立马翻倍

用Python可视化反双曲函数:从数学公式到动态图像的探索之旅 数学公式总是让人望而生畏,尤其是那些带着"反"字头的函数——反三角函数、反双曲函数,光是名字就足以让大多数人头疼。但如果你见过它们的图像,一切就会变得直…...

专业游戏叠加层工具HunterPie:3个步骤实现《怪物猎人世界》数据可视化

专业游戏叠加层工具HunterPie:3个步骤实现《怪物猎人世界》数据可视化 【免费下载链接】HunterPie-legacy A complete, modern and clean overlay with Discord Rich Presence integration for Monster Hunter: World. 项目地址: https://gitcode.com/gh_mirrors/…...

多级注意力Transformer反应再生系统故障诊断【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,查看文章底部二维码(1)自适应正交变分模态分解与贝叶斯优化的特征提取&am…...

联邦学习中的数据预处理:FedPS框架解析与实践

1. 项目概述:当联邦学习遇上数据预处理在联邦学习场景中,我们常常面临一个尴尬局面:各参与方的本地数据质量参差不齐,却由于隐私限制无法直接交换原始数据。传统做法是让每个参与方独立进行数据预处理,但这种分散处理方…...

高考导数压轴题新宠:5分钟搞懂‘凹凸反转’怎么用(附经典例题拆解)

高考导数压轴题新宠:5分钟搞懂‘凹凸反转’怎么用(附经典例题拆解) 高考数学的导数大题常常让考生望而生畏,尤其是那些看似复杂的不等式证明题。传统的构造函数求导方法有时会陷入计算泥潭,而"凹凸反转"技巧…...

鸣潮自动化助手完全指南:3天掌握智能游戏解放方案

鸣潮自动化助手完全指南:3天掌握智能游戏解放方案 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 你是否厌倦了每天重复…...

从Bode图到参数调优:手把手教你用MATLAB搞定准PR控制器设计

从Bode图到参数调优:手把手教你用MATLAB搞定准PR控制器设计 在电力电子控制领域,准PR(准比例谐振)控制器因其对交流信号优异的跟踪性能而备受青睐。与传统的PI控制器不同,准PR控制器能够直接对特定频率的交流信号实现…...

汽车ECU休眠唤醒那些事:从TJA1021的INH引脚到AUTOSAR LinTrcv的实战设计

汽车ECU休眠唤醒实战:TJA1021硬件设计与AUTOSAR LinTrcv深度解析 在汽车电子架构中,低功耗设计已成为衡量ECU性能的关键指标。当夜幕降临,车辆停泊在车库时,如何确保各电子控制单元既能快速响应唤醒事件,又能最大限度降…...

别再手动加词了!用Custom_phrase.txt文件批量导入你的Rime小狼毫个人词库

高效管理Rime词库:Custom_phrase.txt批量导入实战指南 每次在Rime输入法中手动添加自定义词汇时,你是否感到效率低下?专业术语、个人常用语、网络热词一个个输入不仅耗时耗力,还容易出错。本文将带你深入了解如何利用Custom_phras…...

iMX6ULL开发板GPIO调试利器:libgpiod命令行工具(gpiodetect/gpiomon)实战手册

iMX6ULL开发板GPIO调试利器:libgpiod命令行工具实战手册 当iMX6ULL设备在现场出现GPIO相关异常时,嵌入式系统测试工程师和现场支持人员往往面临巨大压力。按键无响应、LED不亮这类看似简单的问题,背后可能隐藏着复杂的硬件交互故障。本文将深…...

WindowResizer终极指南:如何强制调整任何窗口大小,轻松解决顽固窗口问题

WindowResizer终极指南:如何强制调整任何窗口大小,轻松解决顽固窗口问题 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 还在为那些无法调整大小的应用程序…...

量化投资新纪元:如何用AKShare构建专业级金融数据获取系统

量化投资新纪元:如何用AKShare构建专业级金融数据获取系统 【免费下载链接】akshare AKShare is an elegant and simple financial data interface library for Python, built for human beings! 开源财经数据接口库 项目地址: https://gitcode.com/gh_mirrors/ak…...

ComfyUI ControlNet辅助预处理器完全指南:如何实现AI图像生成精准控制

ComfyUI ControlNet辅助预处理器完全指南:如何实现AI图像生成精准控制 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想要让AI图像生成完全按…...

YoloX训练实战:从零开始用PyTorch训练一个自定义数据集(附完整代码)

YoloX实战指南:PyTorch自定义数据集训练全流程解析 在工业检测、自动驾驶、安防监控等领域,目标检测技术正发挥着越来越重要的作用。YoloX作为Yolo系列的最新演进版本,凭借其Anchor-Free设计、SimOTA动态匹配等创新特性,在精度和速…...