[學習] 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)}=π1???t?τx(τ)?dτ
該積分是Cauchy主值積分,在頻域中可等效為對原信號的傅里葉變換乘以因子 ?j?sgn(f)-j\cdot\text{sgn}(f)?j?sgn(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)=?j?sgn(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πfm?t));
  • 瞬時頻率接近理論值(載波頻率 + 調制頻率的影響),驗證了Hilbert變換在非平穩信號分析中的有效性。
  • 其結果如下圖:

在這里插入圖片描述


四、結論

Hilbert變換通過構造解析信號,將實值信號擴展到復數域,從而實現了對信號瞬時屬性的提取。其數學原理基于頻域相位移動,物理意義是抑制負頻率分量并保留正頻率分量。通過仿真實驗可見,Hilbert變換在正弦信號分析中表現為相位平移,在調幅信號中則能精準提取包絡和瞬時頻率,是信號處理中不可或缺的工具。

附注:以上代碼使用 scipy.signal.hilbert 直接計算解析信號,其內部通過快速傅里葉變換(FFT)實現,避免了直接計算Cauchy主值積分的復雜性。


研究學習不易,點贊易。
工作生活不易,收藏易,點收藏不迷茫 :)


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/89855.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89855.shtml
英文地址,請注明出處:http://en.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…