[学习] Hilbert变换:从数学原理到物理意义的深度解析与仿真实验(完整实验代码)

Hilbert变换:从数学原理到物理意义的深度解析与仿真实验

文章目录

  • Hilbert变换:从数学原理到物理意义的深度解析与仿真实验
    • 一、数学原理
    • 二、作用与物理意义
      • 1.构造解析信号
      • 2.相位移动特性
      • 3.应用场景
    • 三、仿真实验
      • 实验1:正弦信号的Hilbert变换
      • 实验2:调幅信号的Hilbert变换
    • 四、结论

Hilbert变换是信号处理领域中一项经典而强大的工具,广泛应用于瞬时频率分析、调制解调、相位提取等场景。本文将从数学原理出发,结合物理意义与实际应用,通过Python仿真实验直观展示其作用,并提供完整代码供读者复现。


一、数学原理

Hilbert变换的核心是将一个实值信号 x(t)x(t)x(t) 映射为与其正交的信号 x^(t)\hat{x}(t)x^(t),其数学定义为:
x^(t)=H{x(t)}=1π∫−∞∞x(τ)t−τdτ\hat{x}(t) = \mathcal{H}\{x(t)\} = \frac{1}{\pi} \int_{-\infty}^{\infty} \frac{x(\tau)}{t - \tau} d\tau x^(t)=H{x(t)}=π1tτx(τ)dτ
该积分是Cauchy主值积分,在频域中可等效为对原信号的傅里叶变换乘以因子 −j⋅sgn(f)-j\cdot\text{sgn}(f)jsgn(f)(其中 sgn(f)\text{sgn}(f)sgn(f) 是符号函数,fff 为频率),再通过逆傅里叶变换得到结果:
X^(f)=−j⋅sgn(f)X(f)\hat{X}(f) = -j\cdot\text{sgn}(f)X(f) X^(f)=jsgn(f)X(f)
通过将原信号与其Hilbert变换结果组合,可构造解析信号(Analytic Signal):
z(t)=x(t)+jx^(t)z(t) = x(t) + j\hat{x}(t) z(t)=x(t)+jx^(t)
解析信号的频谱仅包含正频率分量(负频率分量被抑制),这一特性使其成为分析非平稳信号(如调制信号)的关键工具。


二、作用与物理意义

1.构造解析信号

解析信号 z(t)z(t)z(t) 的实部是原信号 x(t)x(t)x(t),虚部是其Hilbert变换 x^(t)\hat{x}(t)x^(t)。通过解析信号,可以提取信号的瞬时幅度(Instantaneous Amplitude)和瞬时相位(Instantaneous Phase):

  • 瞬时幅度:A(t)=∣z(t)∣A(t) = |z(t)|A(t)=z(t)
  • 瞬时相位:ϕ(t)=arg⁡(z(t))\phi(t) = \arg(z(t))ϕ(t)=arg(z(t))

2.相位移动特性

Hilbert变换的本质是对信号的所有频率成分进行90度相位移动

  • 正弦信号 sin⁡(ωt)\sin(\omega t)sin(ωt) 变换后为 cos⁡(ωt)\cos(\omega t)cos(ωt)(相位超前90度);
  • 余弦信号 cos⁡(ωt)\cos(\omega t)cos(ωt) 变换后为 −sin⁡(ωt)-\sin(\omega t)sin(ωt)(相位滞后90度)。

3.应用场景

  • 调制信号分析:提取调幅(AM)或调频(FM)信号的包络或瞬时频率;
  • 单边带调制(SSB):通过抑制负频率分量实现高效信号传输;
  • 瞬时频率估计:在非平稳信号(如生物信号、机械振动)中,计算局部频率特性。

三、仿真实验

实验1:正弦信号的Hilbert变换

目标:验证Hilbert变换的相位移动特性,并构造解析信号。

代码

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import hilbert# 参数设置
fs = 1000            # 采样率
t = np.linspace(0, 1, fs, endpoint=False)  # 时间范围[0,1)s
f = 5                # 正弦信号频率# 生成原始信号(正弦波)
x = np.sin(2 * np.pi * f * t)# 计算Hilbert变换(虚部为解析信号的正交分量)
z = hilbert(x)       # 解析信号
x_hat = np.imag(z)   # Hilbert变换结果# 绘制图形
plt.figure(figsize=(12, 8))# 原始信号与Hilbert变换结果
plt.subplot(3, 1, 1)
plt.plot(t, x, label='$x(t) = \sin(2\pi ft)$')
plt.plot(t, x_hat, label='$\hat{x}(t) = \mathcal{H}\{x(t)\}$')
plt.title('原始信号与Hilbert变换结果')
plt.xlabel('时间 [s]')
plt.ylabel('幅值')
plt.legend()
plt.grid()# 解析信号的实部与虚部
plt.subplot(3, 1, 2)
plt.plot(t, np.real(z), label='实部(原信号)')
plt.plot(t, np.imag(z), label='虚部(正交信号)')
plt.title('解析信号的实部与虚部')
plt.xlabel('时间 [s]')
plt.ylabel('幅值')
plt.legend()
plt.grid()# 解析信号的幅度与相位
plt.subplot(3, 1, 3)
plt.plot(t, np.abs(z), label='瞬时幅度 $A(t)$')
plt.plot(t, np.unwrap(np.angle(z)), label='瞬时相位 $\phi(t)$')
plt.title('解析信号的幅度与相位')
plt.xlabel('时间 [s]')
plt.ylabel('幅值/弧度')
plt.legend()
plt.grid()plt.tight_layout()
plt.show()

结果分析

  • 原始正弦信号的Hilbert变换结果为余弦信号(相位超前90度);
  • 解析信号的幅度恒为1(正弦信号的包络),相位为 2πft2\pi ft2πft,符合理论预期。
  • 其结果如下图:

在这里插入图片描述


实验2:调幅信号的Hilbert变换

目标:分析调幅信号的瞬时幅度与相位,验证包络提取能力。

代码

# 参数设置
f_carrier = 50       # 载波频率
f_mod = 5            # 调制频率
t = np.linspace(0, 1, fs, endpoint=False)# 生成调幅信号(AM)
x = (1 + 0.5 * np.sin(2 * np.pi * f_mod * t)) * np.sin(2 * np.pi * f_carrier * t)# 计算Hilbert变换与解析信号
z = hilbert(x)
x_hat = np.imag(z)
A = np.abs(z)
phi = np.unwrap(np.angle(z))# 绘制图形
plt.figure(figsize=(12, 8))# 原始调幅信号与Hilbert变换结果
plt.subplot(3, 1, 1)
plt.plot(t, x, label='调幅信号')
plt.plot(t, x_hat, label='Hilbert变换结果')
plt.title('调幅信号与Hilbert变换结果')
plt.xlabel('时间 [s]')
plt.ylabel('幅值')
plt.legend()
plt.grid()# 解析信号的瞬时幅度(包络)
plt.subplot(3, 1, 2)
plt.plot(t, A, label='瞬时幅度(包络)')
plt.plot(t, (1 + 0.5 * np.sin(2 * np.pi * f_mod * t)), label='理论包络', linestyle='--')
plt.title('调幅信号的瞬时幅度与理论包络对比')
plt.xlabel('时间 [s]')
plt.ylabel('幅值')
plt.legend()
plt.grid()# 瞬时相位与瞬时频率
instantaneous_frequency = np.diff(phi) / (2 * np.pi * (1/fs))  # 瞬时频率计算
plt.subplot(3, 1, 3)
plt.plot(t[1:], instantaneous_frequency, label='瞬时频率')
plt.plot(t, f_carrier + 0.5 * f_mod * np.cos(2 * np.pi * f_mod * t), label='理论瞬时频率', linestyle='--')
plt.title('调幅信号的瞬时频率与理论值对比')
plt.xlabel('时间 [s]')
plt.ylabel('频率 [Hz]')
plt.legend()
plt.grid()plt.tight_layout()
plt.show()

结果分析

  • Hilbert变换结果(虚部)为调幅信号的正交分量;
  • 瞬时幅度 A(t)A(t)A(t) 完整还原了调幅信号的包络(1+0.5sin⁡(2πfmt)1 + 0.5\sin(2\pi f_m t)1+0.5sin(2πfmt));
  • 瞬时频率接近理论值(载波频率 + 调制频率的影响),验证了Hilbert变换在非平稳信号分析中的有效性。
  • 其结果如下图:

在这里插入图片描述


四、结论

Hilbert变换通过构造解析信号,将实值信号扩展到复数域,从而实现了对信号瞬时属性的提取。其数学原理基于频域相位移动,物理意义是抑制负频率分量并保留正频率分量。通过仿真实验可见,Hilbert变换在正弦信号分析中表现为相位平移,在调幅信号中则能精准提取包络和瞬时频率,是信号处理中不可或缺的工具。

附注:以上代码使用 scipy.signal.hilbert 直接计算解析信号,其内部通过快速傅里叶变换(FFT)实现,避免了直接计算Cauchy主值积分的复杂性。


研究学习不易,点赞易。
工作生活不易,收藏易,点收藏不迷茫 :)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/89855.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/89855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对话弋途科技:当AI重构汽车大脑,一场车载操作系统的“觉醒年代“开始了

(图片来源:Pixels)站在未来看历史,AI汽车刚刚开始。数科星球原创作者丨苑晶编辑丨大兔当特斯拉的自动驾驶仍在全球引发争议时,中国智能汽车战场已悄然开启第二幕。从"四个轮子的大手机"到"移动智能空间…

❗机器学习量化交易模型全面剖析报告基于因子库的机器学习交易模型构建指南

目录 第一章:机器学习在加密货币量化交易中的应用概述 范式转变:从传统因子到机器学习驱动的策略 为什么选择机器学习?机遇、挑战与核心概念 机遇 挑战 核心概念 第二章:为机器学习准备您的因子库 理解量化因子作为机器学…

内容创作智能体:多模态内容生成的完整解决方案

内容创作智能体:多模态内容生成的完整解决方案 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…

测试学习之——Pytest Day4

Pytest作为Python中功能强大且易于使用的测试框架,深受开发者喜爱。它不仅提供了简洁的测试编写方式,还通过丰富的配置选项、灵活的标记机制和强大的数据驱动能力,极大地提升了测试效率和可维护性。本文将深入探讨Pytest的配置意义与层级、常…

【软件系统架构】系列七:系统性能——路由器性能深入解析

目录 一、路由器的核心功能 二、路由器性能核心指标 1. 吞吐量(Throughput) 2. 并发连接数(Session Capacity) 3. 每秒连接数(CPS,Connections Per Second) 4. 转发延迟(Laten…

【数据结构】第一讲 —— 概论

【数据结构】第一讲 —— 概论 文章目录【数据结构】第一讲 —— 概论1.1 基本概念和常用术语1.2 了解数据结构1. 数据结构2. 数据的逻辑结构3. 数据的物理结构(存储结构)4. 数据的运算1.3 算法的描述和分析1.3.1 算法的描述1.3.21.1 基本概念和常用术语…

全面解析MySQL(2)——CRUD基础

1.CreateCreate(创建):添加新数据到数据库中#基础语法 insert into table_name (column1,column2,column3, ...) values (value1,value2,value3, ...);1.1 单行全列插入value中值的数量和顺序必须和column⼀致describe demo1; -----------------------------------…

某外企笔试总结——纯C语言

这里写自定义目录标题一、sizeof 计算(32位环境)二、简答题三、数据存储区域与可修改性四、字符串比较输出及原因五、数组指针运算输出六、字符串倒序代码错误排查七、下面程序可以把1维数组转为2维数组,然后调用 printArr2D 打印出数组内容&…

Qt Graphs 模块拟取代 charts 和 data visualization还有很长的路要走

近期关注 Qt 6.10 的分支进展, 发现了 Qt 6.10 的 charts 和 data visualization (以下简称 DV)已经被deprecated, 功能将会合并到 graphs 模块。如果后面 charts\ DV 被弃用,那算是很大的API变化了。从Qt 6.5 以后开始引入的 gra…

2025牛客暑期多校训练营2(部分补题)

题目链接:牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ B Bitwise Perfect 思路 考虑到由,那么只有变小的时候对答案的贡献才能够减少,从二进制的角度考虑什么时候变小,只有min(x,y)中的最高位1异或之后变…

Nginx的location匹配规则

Nginx的location匹配规则 为什么你的Nginx配置总是不生效? 改了Nginx配置无数次,reload命令执行了几十遍,浏览器访问时却依然返回404?运维工程师小张上周就遇到了这个问题:明明配置了location /static/ { root /var/ww…

USB 2.0 vs USB 3.0:全面技术对比与选择指南

USB 2.0 vs USB 3.0:全面技术对比与选择指南 引言 在当今数字时代,USB接口已成为连接设备与计算机的最普遍标准之一。从2000年USB 2.0的发布到2008年USB 3.0的问世,USB技术经历了显著的演进。本文将深入比较这两种广泛使用的USB标准&#xff…

DApp架构设计与开发流程指南

目录 DApp架构设计与开发流程指南 引言:DApp的核心特性 一、DApp架构设计 1.1 分层架构设计 各层核心组件: 1.2 典型架构模式 1.2.1 全去中心化架构 1.2.2 混合架构(推荐) 二、开发流程 2.1 敏捷开发流程 2.2 详细开发阶段 阶段1:需求分析与设计(1-2周) 阶段2:智能合约…

Windows下odbc配置连接SQL Server

一、查看SQL Server服务是否启动打开SQL Server 2022配置管理器查看SQL Server运行状态,可以设置 启动或停止服务二、windows下如何配置ODBC数据源1、Windows搜索栏中输入“ODBC数据源管理器”并选择“以管理员身份运行”来打开它2、添加新的数据源ODBC数据源管理器…

MySQL—表设计和聚合函数以及正则表达式

文章目录一、第一范式(原子性)二、第二范式(消除部分依赖)三、第三范式(消除传递依赖)四、表设计五、聚合函数六、正则表达式MySQL 的三大范式(1NF、2NF、3NF)是关系型数据库设计的核…

基于Electron打包jar成Windows应用程序

基于Electron打包jar成Windows应用程序简介注意编译及命令:运行效果登录界面用户管理界面界面全屏锁屏界面文档查看界面简介 本文介绍了一种将maven jar包打包成Windows下EXE可执行程序的方法。 Maven打包Java Web应用成jar,Electron封装jar成Windows …

Autosar RTE实现观测量生成-基于ETAS软件

文章目录前言观测量定义arTypedPerInstanceMemoryPorts Measurable工具链配置及使用Port中的配置arTypedPerInstanceMemory观测量生成文件分析总结前言 之前我们在XCP中,对于标定量和观测量并没有严格按照Autosar标准中定义,Autosar RTE中对标定量和观测…

【REACT18.x】creat-react-app在添加eslint时报错Environment key “jest/globals“ is unknown

今天在创建新项目的时候,给cra创建的项目添加eslint支持,出现如下报错 添加eslint npx eslint --init页面报错 Compiled with problems:ERROR [eslint] package.json eslint-config-react-app/jest#overrides[0]:Environment key "jest/globals&…

Linux的例行性工作 -- (练习)

1、atd和crond两个任务管理程序的区别 答: atd 专为一次性任务设计,允许用户在特定未来时间点(绝对或相对时间)执行单次命令后就结束。 crond 则是周期性任务的调度核心,通过配置文件(crontab)实…

《Java语言程序设计》1.6 复习题

1.6.1 什么是Java语言规范?计算机有严格的使用规则。如果编写程序时没有遵循这些规则,计算机就不能理解程序。Java语言规范和Java API定义了Java的标准。Java语言规范(Java language specification)是对Java程序设计语言的语法和语义的技术定义。应用程序接口(Appl…