admin 管理员组

文章数量: 1184232


2024年3月6日发(作者:bootstarp教程)

7、边际谱和HHT谱的Matlab例子

看到版上总有人在问边际谱和HHT谱的画法,又搜索了一下,好像没有这方面的主题帖子,就发两个以前写的小程序,权作抛砖引玉吧。

% 边际谱与FFT比较

clear

T = 1; % 仿真时间

f1 = 15.2;

f2 = 40;

fs = 1000; % 采样率

N = T*fs;

n = 1:N;

s = sin(2*pi*f1/fs*n) + sin(2*pi*f2/fs*n);

s_fft = abs(fft(s))/N;

imf = emd(s);

[A, fa, tt] = hhspectrum(imf);

[E, tt1] = toimage(A,fa,tt,length(tt));

for k=1:size(E,1)

bjp(k) = sum(E(k,:))*1/fs*1/T;

end

f = (0:N-3)/N*(fs/2);

figure(1);

plot(f,bjp);

xlabel('频率 / Hz');

ylabel('幅值');

figure(2);

plot(0:fs/N:fs/2-fs/N, s_fft(1:end/2))

1 / 6

% 实际信号的HHT谱和边际谱

clear

rand('seed', 0);

T = 0.01; % 仿真时间

R = 5000; % 码速率

fd = 10000; % 载波频差

fc = 20000; % 载波频率

fs = 200000; % 采样率

samp = fs/R; % 每个码元上的采样点数

N = T*fs;

n = 1:N;

x = randint(1, R*T, 2);

y = fskmod(x, 2, fd, samp, fs);

y = y .* exp(i*2*pi*fc/fs*n);

y = real(y);

% z = awgn(y, 20, 'measured');

z = y;

imf = emd(z);

[A, fa, tt] = hhspectrum(imf);

if size(imf,1) > 1

[A,fa,tt] = hhspectrum(imf(1:end-1, :));

else

[A,fa,tt] = hhspectrum(imf);

end

[E, tt1] = toimage(A,fa,tt,length(tt));

disp_hhs(E, tt1);

% 使用灰度图显示

% colormap(gray(255))

for k = 1:size(E,1)

bjp(k) = sum(E(k,:))*1/fs*1/T;

end

f = (0:N-3)/N*(fs/2);

2 / 6

figure(2);

plot(f, bjp);

答:我用g的程序对自己的信号分析了下,感觉做出的hht谱有些奇怪,好像不对,那跟我的原始信号很相似,上传麻烦您给看下。后面又用你给的程序做出了边际谱,也不知道对不对,也上传给你看下,感觉我的边际谱很乱。我的数据也在附件里附上了。另外最后一张图,是我之前用plot_hht的程序做出的时频图也上传过来看下。

hht谱图

边际谱

3 / 6

plot_hht程序做的时频图

8、关于hilbert谱图的问题

4 / 6

请教:为什么我画的Hilbert谱的二维图颜色条显示都是负数呢?之前用另外一个程序画的图也是这样的.程序在附件中给出

答:原因很簡單啊…

help disp_hhs就知道答案了…

因為圖中的數值皆除以最大值,而後取dB值

數值變小,當然dB值會是負值。

内容总结

(1)7、边际谱和HHT谱的Matlab例子

看到版上总有人在问边际谱和HHT谱的画法,又搜索了一下,好像没有这方面的主题帖子,就发两个以前写的小程序,权作抛砖引玉吧

5 / 6

(2)7、边际谱和HHT谱的Matlab例子

看到版上总有人在问边际谱和HHT谱的画法,又搜索了一下,好像没有这方面的主题帖子,就发两个以前写的小程序,权作抛砖引玉吧

(3)ylabel('幅值')

(4)help disp_hhs就知道答案了

6 / 6


本文标签: 信号 显示 程序