在 MATLAB 中绘制二维希尔伯特谱

Posted

技术标签:

【中文标题】在 MATLAB 中绘制二维希尔伯特谱【英文标题】:Plotting 2D Hilbert Spectrum in MATLAB 【发布时间】:2016-02-08 01:34:10 【问题描述】:

我想创建希尔伯特谱的二维图。我想要的是时间与频率图,其中信号的幅度由图中的颜色变化表示。

我所做的是this,但我需要它看起来像this。

提前谢谢你

编辑:

我有随时间变化的幅度和瞬时频率值,这是我使用 Hilbert Huang 变换产生的。 假设我们只使用第一个 IMF,我们有 100 个样本。那么我们拥有的是:

    instantaneous_frequency = [f1 f2 f3 ... f100]
    instantaneous_amplitude = [a1 a2 a3 ... a100]
    time = [t1 t2 t3 ... t100]

我需要的是一种像第二张图像一样绘制它们的方法,而不使用频谱图功能,因为它使用 STFT 并且我已经应用了 HHT。

生成第一个图的代码是:

Time_Window = 1:101;
signal= rand(1,101);
hilb = hilbert(signal);
inst_amp = abs(hilb);
inst_th = angle(hilb);
inst_freq = diff(a_inst_th)/(1/256)/(2*pi); %instantaneous frequency 
%inst_freq = remove_outliers(inst_freq,Time_Window(1:end-1)); 
inst_freq(end+1) = inst_freq(end); % This is done due to diff()
plot(Time_Window*4,inst_freq,'k.','MarkerSize',5)

【问题讨论】:

发布您所做工作的代码将有助于您实现目标... 在问题中添加了示例代码! :) 【参考方案1】:

已经有一个 MATLAB 函数可以生成 spectrogram,它看起来很像您想要的。看看能不能解决你的问题。

【讨论】:

不幸的是,频谱图使用 STFT 来查找频谱。我已经有了使用 Hilbert-Huang 变换产生的频率、幅度和时间的值。我需要的是一种像第二张图片一样绘制它们的方法。 在这种情况下,您可以使用 pcolor:mathworks.com/help/matlab/ref/pcolor.html 适当设置颜色图,您可能不想要边缘颜色。 感谢您的回答。我尝试使用 pcolor,但无法使其工作。我所做的是pcolor(Time_Window*4,a_inst_freq,diag(a_inst_amp)),我得到的是this。

以上是关于在 MATLAB 中绘制二维希尔伯特谱的主要内容,如果未能解决你的问题,请参考以下文章

傅里叶谱方法-傅里叶谱方法求解基本偏微分方程(一维波动方程 二维波动方程一维非线性薛定谔方程)及其Matlab程序实现

如何在 MATLAB 中绘制显示二维高斯函数总和的图像?

Matlab——图形绘制——二维平面图形

matlab二维三维图形绘制和坐标轴范围设置

MATLAB希尔伯特Hilbert变换求包络谱

备战数学建模3-MATLAB绘制各种二维图形