欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

hht函数

程序员文章站 2022-05-22 13:30:33
...

hht

希尔伯特-黄变换

官方文档

语法

hs = hht(imf)		% 返回由固有模式函数imf指定的信号的Hilbert谱hs,横坐标为采样数(个)
% hs用于分析由光谱含量随时间变化的信号的混合组成的信号。利用hht对信号进行Hilbert谱分析以识别局部特征。
hs = hht(imf,fs)	% 返回以fs速率采样的信号的Hilbert谱hs,横坐标为时间(s)
[hs,f,t] = hht(___) % 返回除hs之外的频率向量f和时间向量t。这些输出参数可以与前面的输入语法一起使用
[hs,f,t,imfinsf,imfinse] = hht(___) % 还返回用于信号诊断的本征模函数的瞬时频率imfinsf和瞬时能量imfinse
[___] = hht(___,Name,Value) % 用一个或多个名称、值对参数指定的附加选项估计Hilbert谱参数
hht(___)					% 在当前图形窗口中绘制希尔伯特谱
hht(___,freqlocation)		% 用可选的freqlocation参数绘制Hilbert频谱,以指定频率轴的位置。
							% 默认情况下,频率在y轴上表示。

输入参数

  • imf-本征模函数

    矩阵 | 时间表

    固有模式函数,用矩阵或时间表来表示。imf是包络线对零对称且极值和过零次数最多相差1的任何信号。emd用于将复杂信号分解和简化为有限个本征模式函数,以进行Hilbert谱分析。

  • fs — 采样率

    2π(默认)| 正标量

    采样率,指定为正标量。如果不提供fs,则使用2π的归一化频率来计算Hilbert谱。如果imf被指定为时间表,则从中推断出抽样率。

  • freqlocation-频率轴在绘图上的位置

    y轴(默认)| x轴

    频率轴在绘图上的位置,指定为“yaxis”或“xaxis”。要在绘图的y轴或x轴上显示频率数据,请分别将freqlocation指定为“yaxis”或“xaxis”。

Name-Value参数

指定名称、值参数的可选逗号分隔对。Name是参数名,Value是相应的值。名称必须出现在引号内。可以按任意顺序指定多个名称和值对参数,如Name1,Value1,…,NameN,ValueN。

  • FrequencyLimits - 计算Hilbert谱的频率限制

    [0,fs/2](默认)| 1/2整数值向量

    计算Hilbert谱的频率限制,指定为逗号分隔对,由“FrequencyLimits”和1/2整数值向量组成。频率限制以赫兹为单位。

  • FrequencyResolution - 离散频率范围的频率分辨率

    (f_high-f_low)/100 (default) | 正标量

    频率分辨率离散频率限制,指定为逗号分隔对,由“FrequencyResolution”和正标量组成。以赫兹为单位指定频率分辨率。如果未指定“FrequencyResolution”,则从FrequencyLimits推断值(fhigh flow)/100。这里,fhigh是频率限制的上限,flow是下限。

  • MinThreshold - 希尔伯特谱的最小阈值

    -inf (default) | 标量

    希尔伯特谱的最小阈值,指定为由“MinThreshold”和标量组成的逗号分隔对。当10log的对应元素为0时,MinThreshold将hs的元素设置为010(hs)小于最小阈值。

输出参数

  • hs — 信号的希尔伯特谱

    稀疏矩阵

    信号的希尔伯特谱,返回为稀疏矩阵。使用hs进行时频分析并识别信号中的局部特征。

  • f — 频率值

    矢量

    信号的频率值,以向量形式返回。hht使用频率向量f和时间向量t来创建Hilbert谱图。从数学上讲,f表示为:f=流量:fres:fhigh,其中fres是频率分辨率。

  • t - Time values

    向量 | 持续时间数组

    信号的时间值,以向量或持续时间数组的形式返回。hht使用时间向量t和频率向量f来创建Hilbert谱图。

    • 如果imf被指定为数组,则t返回为一个数组。
    • 如果imf被指定为统一采样的时间表,则t返回为持续时间数组。
  • imfinsf - 各IMF瞬时频率

    向量 | 矩阵时间表

    每个IMF的瞬时频率,以向量、矩阵或时间表的形式返回。

    • 如果imf被指定为向量,则imfinsf 返回为一个向量。
    • 如果imf被指定为矩阵,则imfinsf 返回为 矩阵。
    • 如果imf被指定为统一抽样时间表,则imfinsf 返回为时间表。
  • imfinse - 各IMF瞬时能量

    向量 | 矩阵时间表

    每个IMF的瞬时能量,以向量、矩阵或时间表的形式返回。

    • 如果imf被指定为向量,则imfinsf 返回为一个向量。
    • 如果imf被指定为矩阵,则imfinsf 返回为 矩阵。
    • 如果imf被指定为统一抽样时间表,则imfinsf 返回为时间表。

示例

e1. 二次Chirp信号的Hilbert谱

产生高斯调制的二次Chirp信号。指定采样率为2 kHz,信号持续时间为2秒 。

fs = 2000;
t = 0:1/fs:2-1/fs;
q = chirp(t-2,4,1/2,6,'quadratic',100,'convex').*exp(-4*(t-1).^2);
plot(t,q)

hht函数


利用emd来可视化本征模函数(imf)和残差。

emd(q)

hht函数

计算信号的IMFs。使用“Display”名称-值对输出一个表,显示每个IMF的筛选迭代次数、相对公差和筛选停止条件。

imf = emd(q,'Display',1);

Current IMF | #Sift Iter | Relative Tol | Stop Criterion Hit
1 | 2 | 0.0063952 | SiftMaxRelativeTolerance
2 | 2 | 0.1007 | SiftMaxRelativeTolerance
3 | 2 | 0.01189 | SiftMaxRelativeTolerance


利用计算的本征模函数绘制二次hirp信号的Hilbert谱。限制频率范围从0赫兹到20赫兹。

hht(imf,fs,'FrequencyLimits',[0 20])

hht函数

e2. 进行经验模式分解并可视化信号的Hilbert谱

加载并显示由频率变化明显的正弦波组成的非平稳连续信号。手提钻的振动和烟花的声音是非平稳连续信号的示例。信号以一定速率采样fsfs

load('sinusoidalSignalExampleData.mat','X','fs')
t = (0:length(X)-1)/fs;
plot(t,X)
xlabel('Time(s)')

hht函数

混合信号包含具有不同幅度和频率值的正弦波。

要创建希尔伯特频谱图,您需要信号的本征模式函数(IMF)。执行经验模式分解,以计算信号的IMF和残差。由于信号不平滑,因此将 'pchip' 指定为插值方法。

[imf,residual,info] = emd(X,'Interpolation','pchip');

hht函数

利用经验模态分解得到的imf分量,创建Hilbert谱图。

hht(imf,fs)

hht函数

频率与时间的关系图是一个稀疏的关系图,带有一个垂直的色条,指示IMF中每个点的瞬时能量。该图表示从原始混合信号分解的每个分量的瞬时频谱。三个IMF出现在图中,频率在1秒时发生明显变化。

e3. 计算信号的Hilbert谱参数

加载并可视化由频率明显变化的正弦波组成的非平稳连续信号。手提钻的振动和烟花爆竹声都是非平稳连续信号的例子。信号以fs的速率采样。

load('sinusoidalSignalExampleData.mat','X','fs')
t = (0:length(X)-1)/fs;
plot(t,X)
xlabel('Time(s)')

hht函数

要计算Hilbert谱参数,需要信号的IMFs。进行经验模态分解以计算信号的固有模态函数和残差。由于信号不平滑,请指定“pchip”作为插值方法。

[imf,residual,info] = emd(X,'Interpolation','pchip');

在命令窗口中生成的表指示每个生成的IMF的sift迭代次数、相对公差和sift停止标准。此信息也包含在“信息”中。可以通过将“Display”指定为0来隐藏表。

计算Hilbert谱参数:Hilbert谱hs、频率矢量f、时间矢量t、瞬时频率imfinsf和瞬时能量imfinse。

[hs,f,t,imfinsf,imfinse] = hht(imf,fs);

利用计算出的Hilbert谱参数进行时频分析和信号诊断。

e4.多分量信号的VMD

生成由频率为2赫兹、10赫兹和30赫兹的三个正弦波组成的多分量信号。正弦波在1 kHz下采样2秒。将信号嵌入方差为0.01²的高斯白噪声中。

fs = 1e3;
t = 1:1/fs:2-1/fs;
x = cos(2*pi*2*t) + 2*cos(2*pi*10*t) + 4*cos(2*pi*30*t) + 0.01*randn(1,length(t));

计算噪声信号的本征模函数,并将其可视化为三维图形。

imf = emd(x);
[p,q] = ndgrid(t,1:size(imf,2));
plot3(p,q,imf)
grid on
xlabel('Time Values')
ylabel('Mode Number')
zlabel('Mode Amplitude')

利用计算的内模函数绘制多分量信号的Hilbert谱。将频率范围限制在[0,40]赫兹。

hht(imf,fs,'FrequencyLimits',[0,40])

hht函数

??? 这里发现实际图像和帮助手册上边的图像不一致