为什么我的边际谱和FFT谱差这么多
信号的采样频率为169.588 GHz,即周期为0.00589664 ns,求边际谱和FFT谱的程序如下,为什么两个谱图结果差这么多呢?求高人指点,谢谢!%边际谱
E=flipud(im);
=size(E);
for k=1:P
bjp(k)=sum(E(k,:))*(5.89664e-12);
end
bjp_f=(0:P-1)/P*0.5; %169.588 GHz
figure
subplot 211
plot(bjp_f(1:75),bjp(1:75));
axis tight
xlabel('频率 / Hz');
ylabel('幅值');
title('边际谱')
subplot 212
fft_sig=fftshift(2*abs(fft(sig))/L);
plot((0:49)/L,fft_sig(L/2+1:L/2+50));
axis tight
xlabel('频率 / Hz');
ylabel('幅值');
title('FFT谱')
补充一下啊,上面的im就是HHT时频谱矩阵,我只给出主要部分的程序,我想问的是为什么我的边际谱和FFT谱的形状怎么不同,而且幅度差这么多呢? 边际谱的给出由im来
那应该是个dB值吧
度量单位都不同
无法放在一起比较 边际谱和fft谱本来就不是一回事
但是频率还是能对应上的
差点的只是幅度上吧,统一单位后应该一致
另外EMD分解到并不好
所以有些区别很正常 回复 2 # pandacute 的帖子
你好,我的边际谱和FFT谱主要是形状和幅度不同,而且幅度差别特别离谱,我觉得我程序应该没错吧,是振动论坛上的边际谱程序拿来用的啊,im是toimage文件的输出,也不是dB值啊,就是幅度值,不知问题出在哪里?求指点!
toimage.m文件如下:
function = toimage(A,f,t,splx,sply)
% = TOIMAGE(A,f,t,splx,sply) transforms a spectrum made
% of 1D functions (e.g., output of "spectreh") in an 2D image
%
% inputs : - A : amplitudes of modes (1 mode per row of A)
% - f : instantaneous frequencies
% - t : time instants
% - splx : number of columns of the output im (time resolution).
% If different from length(t), works only for uniform
% sampling.
% - sply : number of rows of the output im (frequency resolution).
% outputs :- im : 2D image of the spectrum
% - tt : time instants in the image
%
% utilisation : = toimage(A,f); = toimage(A,f,t); = toimage(A,f,sply);
% = toimage(A,f,splx,sply); = toimage(A,f,t,splx,sply);
DEFSPL = 400;
if nargin < 3
t = 1:size(A,2);
sply = DEFSPL;
splx = length(t);
else
if length(t) == 1
tp = t;
t = 1:size(A,2);
if nargin < 4
sply = tp;
splx = length(t);
else
if nargin > 4
error('too many arguments')
end
sply = splx;
splx = tp;
end
else
lt = length(t);
if nargin < 5
sply = splx;
splx = lt;
end
if nargin < 4
sply = DEFSPL;
splx = lt;
end
if nargin > 5
error('too many arguments')
end
end
end
lt=length(t);
im=[];
im(splx,sply) = 0;
for i=1:size(f,1)
for j = 1:lt
ff=floor(f(i,j)*2*(sply-1))+1;
if ff <= sply % in case f(i,j) > 0.5
im(floor(j*(splx-1)/lt)+1,ff)=im(floor(j*(splx-1)/lt)+1,ff)+A(i,j);
end
end
end
for i = 1:splx
tt(i) = mean(t(floor((i-1)*lt/(splx))+1:floor(i*lt/(splx))));
end
im=fliplr(im)'; %颠倒f,t轴,f向上递增,t向右递增
回复 3 # hahaer 的帖子
我不是用它自带的disp_hht显示的,所以不是dB值,而就是幅度值。求指教! 有人帮我看看吗?求指教 自己顶一下,大家帮帮忙 有人帮忙看下吗 我用的边际谱程序,你看一下。边际谱的幅值和傅里叶谱不一样,本来就是对不上的
http://forum.vibunion.com/thread-50010-1-1.html
边际谱相关讨论的阶段性总结
imf = emd(s);
= hhspectrum(imf);
= 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(2);
subplot(121);hold on;plot(f,bjp);
xlabel('Frequency / Hz');
ylabel('Amplitude');title('MarginalSpectrum')%边际谱
subplot(122);hold on;
s_fft = abs(fft(s))/N;
plot(0:fs/N:fs/2-fs/N, s_fft(1:end/2))
xlabel('Frequency/ Hz');
ylabel('Amplitude');title('Fourier Spectrum')%傅里叶谱
边际谱和fft谱本来就不是一回事
边际谱是对时间进行积分
所以边际谱的幅值只是代表 某个频率出现的可能性的大小 边际谱是某一频率出现的可能性大小,傅里叶谱是某一频率所占比重的大小,这样理解对不?
页:
[1]