探索希尔伯特边际谱:从理论到MATLAB实现
13_希尔伯特边际谱Hilbert marginal spectrumHMSmatlab2019及以上实现对一维数据做emd变换,得到imf分量和残余分量,展示imf分量的时域和频域图像。然后对得到的imf分量做hht变换,绘制hilbert谱通过希尔伯特变换后得到的hs绘制信号的边际谱有详细介绍并附带注释,保证可以运行附带一份数据,可以查看数据格式来调整你的数据最后使用代码运行。
13_希尔伯特边际谱 Hilbert marginal spectrum HMS matlab2019及以上实现 对一维数据做emd变换,得到imf分量和残余分量,展示imf分量的时域和频域图像。 然后对得到的imf分量做hht变换,绘制hilbert谱 通过希尔伯特变换后得到的hs绘制信号的边际谱 有详细介绍并附带注释,保证可以运行 附带一份数据,可以查看数据格式来调整你的数据最后使用代码运行。

今天咱们来深入研究一下希尔伯特边际谱(Hilbert marginal spectrum,HMS),并使用MATLAB 2019及以上版本实现相关分析。希尔伯特边际谱在信号处理领域可是有着重要的地位,它能帮助我们更好地分析信号的频率特性。
数据准备
咱们先准备一份一维数据,这里我准备了一个简单的示例数据,你可以根据自己的数据格式进行调整。
% 生成示例一维数据
t = 0:0.01:10; % 时间向量,从0到10,步长为0.01
x = sin(2*pi*1*t) + sin(2*pi*5*t) + 0.5*randn(size(t)); % 生成包含两个正弦波和噪声的信号
在这段代码里,我们生成了一个时间向量t,然后用它生成了一个包含两个不同频率正弦波和一些随机噪声的信号x。这就是我们后续要处理的一维数据啦。
EMD变换
接下来,我们要对这个一维数据进行经验模态分解(EMD),得到本征模态函数(IMF)分量和残余分量,并且展示IMF分量的时域和频域图像。
% 进行EMD变换
[imf, res] = emd(x);
% 绘制IMF分量的时域图像
figure;
for i = 1:size(imf, 2)
subplot(size(imf, 2), 1, i);
plot(t, imf(:, i));
title(['IMF ', num2str(i)]);
xlabel('时间 (s)');
ylabel('幅值');
end
% 绘制IMF分量的频域图像
figure;
for i = 1:size(imf, 2)
subplot(size(imf, 2), 1, i);
N = length(imf(:, i));
Y = fft(imf(:, i));
P2 = abs(Y/N);
P1 = P2(1:N/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = (0:(N/2))*(1/(t(2)-t(1)))/N;
plot(f, P1);
title(['IMF ', num2str(i), ' 频域']);
xlabel('频率 (Hz)');
ylabel('幅值');
end
在emd函数这里,它会自动把输入的信号x分解成多个IMF分量和一个残余分量。然后我们用subplot函数把每个IMF分量的时域和频域图像都绘制出来。时域图像能让我们直观地看到每个IMF分量随时间的变化情况,频域图像则能显示出每个IMF分量的频率分布。
HHT变换与希尔伯特谱绘制
得到IMF分量后,我们就可以对它们进行希尔伯特 - 黄变换(HHT),并绘制希尔伯特谱。
% 对IMF分量做HHT变换,绘制希尔伯特谱
hs = hilbert(imf); % 希尔伯特变换
t_matrix = repmat(t', 1, size(imf, 2)); % 时间矩阵
omega = angle(hs(:, 1:end-1) .* conj(hs(:, 2:end))) ./ (t(2)-t(1)); % 瞬时频率
omega = [omega; omega(end, :)]; % 补齐最后一行
figure;
imagesc(t, omega, abs(hs));
title('希尔伯特谱');
xlabel('时间 (s)');
ylabel('瞬时频率 (rad/s)');
colorbar;
这里的hilbert函数会对每个IMF分量进行希尔伯特变换,得到解析信号。然后我们计算瞬时频率omega,并使用imagesc函数绘制希尔伯特谱。希尔伯特谱可以展示信号在时间 - 频率平面上的能量分布。
希尔伯特边际谱绘制
最后,我们要通过希尔伯特变换后得到的希尔伯特谱来绘制信号的边际谱。
% 绘制希尔伯特边际谱
f_max = 10; % 最大频率
df = 0.1; % 频率分辨率
f = 0:df:f_max; % 频率向量
hms = zeros(size(f)); % 初始化边际谱
for i = 1:length(t)
[~, ind] = min(abs(omega(i, :) - 2*pi*f)); % 找到最接近的频率索引
hms(ind) = hms(ind) + abs(hs(i, :)); % 累加能量
end
figure;
plot(f, hms);
title('希尔伯特边际谱');
xlabel('频率 (Hz)');
ylabel('幅值');
我们先定义了频率范围和频率分辨率,然后初始化边际谱。接着遍历每个时间点,找到最接近的频率索引,并把对应时刻的能量累加到边际谱上。最后用plot函数绘制出希尔伯特边际谱。

13_希尔伯特边际谱 Hilbert marginal spectrum HMS matlab2019及以上实现 对一维数据做emd变换,得到imf分量和残余分量,展示imf分量的时域和频域图像。 然后对得到的imf分量做hht变换,绘制hilbert谱 通过希尔伯特变换后得到的hs绘制信号的边际谱 有详细介绍并附带注释,保证可以运行 附带一份数据,可以查看数据格式来调整你的数据最后使用代码运行。

通过以上这些步骤,我们就完成了从一维数据到希尔伯特边际谱的整个分析过程。你可以把自己的数据替换掉示例数据,运行这些代码来分析你感兴趣的信号啦。


更多推荐


所有评论(0)