pandacute 发表于 2010-11-12 23:03

为什么我的边际谱和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谱')


pandacute 发表于 2010-11-12 23:06

补充一下啊,上面的im就是HHT时频谱矩阵,我只给出主要部分的程序,我想问的是为什么我的边际谱和FFT谱的形状怎么不同,而且幅度差这么多呢?

hahaer 发表于 2010-11-12 23:13

边际谱的给出由im来
那应该是个dB值吧
度量单位都不同
无法放在一起比较

hahaer 发表于 2010-11-12 23:14

边际谱和fft谱本来就不是一回事
但是频率还是能对应上的
差点的只是幅度上吧,统一单位后应该一致
另外EMD分解到并不好
所以有些区别很正常

pandacute 发表于 2010-11-14 21:08

回复 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向右递增

pandacute 发表于 2010-11-14 21:16

回复 3 # hahaer 的帖子

我不是用它自带的disp_hht显示的,所以不是dB值,而就是幅度值。求指教!

pandacute 发表于 2010-11-15 22:20

有人帮我看看吗?求指教

pandacute 发表于 2010-11-19 21:54

自己顶一下,大家帮帮忙

pandacute 发表于 2010-11-22 23:50

有人帮忙看下吗

hub115 发表于 2011-1-7 16:20

我用的边际谱程序,你看一下。边际谱的幅值和傅里叶谱不一样,本来就是对不上的
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')%傅里叶谱

safin0524 发表于 2013-5-15 23:48


边际谱和fft谱本来就不是一回事

边际谱是对时间进行积分

所以边际谱的幅值只是代表 某个频率出现的可能性的大小

bluesea602 发表于 2013-11-21 21:48

边际谱是某一频率出现的可能性大小,傅里叶谱是某一频率所占比重的大小,这样理解对不?
页: [1]
查看完整版本: 为什么我的边际谱和FFT谱差这么多