当前位置: 首页>编程语言>正文

希尔伯特变换提取包络python matlab希尔伯特变换取包络

一、Hilbert变换表达式

希尔伯特变换提取包络python matlab希尔伯特变换取包络,希尔伯特变换提取包络python matlab希尔伯特变换取包络_希尔伯特变换提取包络python,第1张

由于本质是卷积,因此可以从“线性系统”,“调幅-调频”等角度思考。进一步可参考如下链接:

  1. 希尔伯特变换(Hilbert Transform)简介及其物理意义
  2. 希尔伯特变换与瞬时频率问题(一):希尔伯特变换与瞬时频率问题--连载(一) - 知乎
  3. 伯特变换与瞬时频率问题(二):希尔伯特变换和瞬时频率问题--连载(二) - 知乎
  4. 希尔伯特谱、边际谱、包络谱、瞬时频率/幅值/相位——Hilbert分析衍生方法及MATLAB实现

二、利用Hilbert变换求信号包络线 

1. 理论

截图自 Signal processing and feature extraction -- by Yaguo Lei Redirecting

希尔伯特变换提取包络python matlab希尔伯特变换取包络,希尔伯特变换提取包络python matlab希尔伯特变换取包络_知乎_02,第2张

2. 理解:Hilbert变换是将信号相位延迟90°。

3. 举例:若x=sin(wt), 则,Hilbert变换后的信号为y=cos(wt)。则信号的瞬时幅值(instantaneous amplitude) 

希尔伯特变换提取包络python matlab希尔伯特变换取包络,希尔伯特变换提取包络python matlab希尔伯特变换取包络_matlab_03,第3张


4. 图解

如下图

希尔伯特变换提取包络python matlab希尔伯特变换取包络,希尔伯特变换提取包络python matlab希尔伯特变换取包络_希尔伯特变换提取包络python_04,第4张

为原信号,

希尔伯特变换提取包络python matlab希尔伯特变换取包络,希尔伯特变换提取包络python matlab希尔伯特变换取包络_开发语言_05,第5张

为Hilbert变换,

希尔伯特变换提取包络python matlab希尔伯特变换取包络,希尔伯特变换提取包络python matlab希尔伯特变换取包络_开发语言_06,第6张

是包络线。

希尔伯特变换提取包络python matlab希尔伯特变换取包络,希尔伯特变换提取包络python matlab希尔伯特变换取包络_开发语言_07,第7张

5. 进一步解释

(1)知乎讨论:希尔伯特变换将信号表示为复解析信号的物理意义是什么? - 知乎

(2)为什么希尔伯特变换可以求包络? - 知乎  -- 该内容截图如下

希尔伯特变换提取包络python matlab希尔伯特变换取包络,希尔伯特变换提取包络python matlab希尔伯特变换取包络_MATLAB_08,第8张

希尔伯特变换提取包络python matlab希尔伯特变换取包络,希尔伯特变换提取包络python matlab希尔伯特变换取包络_开发语言_09,第9张

 三、MATLAB代码

1. MATLAB代码理解

matlab中hilbert(x)的结果为下图中的复平面向量,是个复数,同时包含实部和虚部。所以,包络函数=abs(hilbert(x))。

希尔伯特变换提取包络python matlab希尔伯特变换取包络,希尔伯特变换提取包络python matlab希尔伯特变换取包络_MATLAB_10,第10张

2. MATLAB官方解释 Hilbert Transform- MATLAB & Simulink

希尔伯特变换提取包络python matlab希尔伯特变换取包络,希尔伯特变换提取包络python matlab希尔伯特变换取包络_希尔伯特变换提取包络python_11,第11张

3. MATLAB 中文论坛 -- 关于利用HILBERT变换和插值求包络线的讨论:

matlab中怎么从一个信号中取出包络? – MATLAB中文论坛

4. 代码和图

clc
clear
close all
% 利用Hilbert变换求包络线
fs=30;
t=0:1/fs:200; 
x6=sin(2*pi*2*t)+sin(2*pi*4*t);
x66 = hilbert(x6);
xx = abs(x66);
figure(1)
hold on
plot(t,x6);
plot(t,xx,'r')
xlim([0 5])
hold off

% 选取局部最大值,然后进行插值
d = diff(x6);
n = length(d);
d1 = d(1:n-1);
d2 = d(2:n);
indmin = find(d1.*d2<0 & d1<0)+1;
indmax = find(d1.*d2<0 & d1>0)+1;
envmin = spline(t(indmin),x6(indmin),t);
envmax = spline(t(indmax),x6(indmax),t);
figure
hold on
plot(t,x6);
plot(t,envmin,'r');
plot(t,envmax,'m');
hold off
xlim([0 5])

代码结果:

Hilbert 包络线

希尔伯特变换提取包络python matlab希尔伯特变换取包络,希尔伯特变换提取包络python matlab希尔伯特变换取包络_知乎_12,第12张

局部最大值+插值 包络线

希尔伯特变换提取包络python matlab希尔伯特变换取包络,希尔伯特变换提取包络python matlab希尔伯特变换取包络_matlab_13,第13张

思考:

注意经验模态分解(Empirical Mode Decomposition)与Hilbert变换的关系!!!

利用Hilber变换得到的包络线是否合理???


https://www.xamrdz.com/lan/5tx1961357.html

相关文章: