hht函数
文章目录
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)
利用emd来可视化本征模函数(imf)和残差。
emd(q)
计算信号的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])
e2. 进行经验模式分解并可视化信号的Hilbert谱
加载并显示由频率变化明显的正弦波组成的非平稳连续信号。手提钻的振动和烟花的声音是非平稳连续信号的示例。信号以一定速率采样。
load('sinusoidalSignalExampleData.mat','X','fs')
t = (0:length(X)-1)/fs;
plot(t,X)
xlabel('Time(s)')
混合信号包含具有不同幅度和频率值的正弦波。
要创建希尔伯特频谱图,您需要信号的本征模式函数(IMF)。执行经验模式分解,以计算信号的IMF和残差。由于信号不平滑,因此将 'pchip'
指定为插值方法。
[imf,residual,info] = emd(X,'Interpolation','pchip');
利用经验模态分解得到的imf分量,创建Hilbert谱图。
hht(imf,fs)
频率与时间的关系图是一个稀疏的关系图,带有一个垂直的色条,指示IMF中每个点的瞬时能量。该图表示从原始混合信号分解的每个分量的瞬时频谱。三个IMF出现在图中,频率在1秒时发生明显变化。
e3. 计算信号的Hilbert谱参数
加载并可视化由频率明显变化的正弦波组成的非平稳连续信号。手提钻的振动和烟花爆竹声都是非平稳连续信号的例子。信号以fs的速率采样。
load('sinusoidalSignalExampleData.mat','X','fs')
t = (0:length(X)-1)/fs;
plot(t,X)
xlabel('Time(s)')
要计算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])
??? 这里发现实际图像和帮助手册上边的图像不一致
下一篇: 新手该如何学习JavaScript ?
推荐阅读
-
python 限制函数执行时间,自己实现timeout的实例
-
Vue监听数据渲染DOM完以后执行某个函数详解
-
Visual Studio 2013中scanf函数无法使用的详细解决办法
-
vue2.0$nextTick监听数据渲染完成之后的回调函数方法
-
ORACLE 常用函数总结(80个)第1/2页
-
Oracle row_number() over()解析函数高效实现分页
-
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
-
Oracle 分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法
-
ORACLE常用数值函数、转换函数、字符串函数
-
简单谈谈PHP中strlen 函数