【问题标题】:How do I obtain Energy spectrum of a signal after FFT in Matlab?如何在 Matlab 中获得 FFT 后信号的能谱?
【发布时间】:2013-08-24 17:47:38
【问题描述】:

编辑:


我偶然发现了这个解释,以从 IEEE 论文(三相非受控整流器中的开路故障诊断,Rahiminejad,Diduch,Stevenson,Chang)中获得能谱。 “记录的信号样本包含相当于 4T 的样本数,并使用等于记录长度的 FFT 大小(其中 T 是基本周期)确定其 FFT。 假设 FFT 大小与周期性波形的 4 个周期相匹配,则每 4 个 FFT bin 将与一个谐波频率重合,特别是 FFT bin 4k+1 的中心将与 kth 重合 谐波频率。

第 k 次谐波能量被计算以 bin >4k+1。额外的 FFT 值包含在谐波能量计算中,以降低计算能量对频率估计中的误差的敏感性,该误差会导致 k 次谐波 峰值从 bin 偏移4k+1。”

我不完全理解上面的段落。在我有限的理解中,粗线 是指函数 fft() 的输出的平方和,即复傅立叶级数系数​​。

有人可以为获得能谱提供一些启示吗? @fpe:我不确定 ESD 的性能是否与能谱相同。顺便说一句,非常感谢您的回答:)


我正在尝试绘制信号的能量谱以查看例如包含前三个谐波的归一化能量、基波与二次谐波的能量比等......

在这里,我设法获得了汉宁窗 FFT 幅度-Hz 和功率-Hz。但是,我不知道如何获得每个频率分量的能量-Hz。

非常感谢任何帮助!

function [f,Xall_Wnd]=fftplotExxx(time,X_input)
Fs = 20000; % Sampling frequency
x = X_input; 

% Fast Fourier Transform 
    L = length (X_input); % Length of FFT
    nfft = 2^nextpow2(L); % Next power of 2 from length of signal

%wave = wave.*hamming(length(wave));
x_HammingWnd = x.*hamming(L);

% Take fft, padding with zeros so that length(X) 
%is equal to nfft 

Xall_Wnd = fft(x_HammingWnd, nfft)/L;  %hamming window fft

% FFT is symmetric, throw away second half

% Take the magnitude of fft of x 
mx_Wnd = 2*abs(Xall_Wnd(1:nfft/2+1)); 

% To get Power of x(t) by sqr of magnitude
m2x_Wnd = mx_Wnd.^2; 

% I am Not sure how to get energy spectrum
for i=1:L:nfft-L
E(i) = sum(Xall_Wnd(1:nfft/2+1).^2);
end

% Frequency vector
    f = Fs/2*linspace(0,1,nfft/2+1);

% Generate the plot, title and labels. 
subplot(2,2,1)
plot(time,X_input);
title('Time Domain')
xlabel('Time(s)')

subplot(2,2,2)
plot(f,m2x_Wnd); 
title('Power Spectrum of x(t)'); 
xlabel('Frequency (Hz)'); 
ylabel('Normalised Power of fft');

subplot(2,2,3)
plot(f,mx_Wnd); 
title('Hamming Window_ Spectrum of x(t)'); 
xlabel('Frequency (Hz)'); 
ylabel('Normalised Magunitude of fft');

subplot(2,2,4)
plot(f,E); 
title('Energy Spectrum of x(t)'); 
xlabel('Frequency (Hz)'); 
ylabel('Energy');
end 

【问题讨论】:

    标签: matlab signal-processing fft


    【解决方案1】:

    一般可以这样计算频谱:

    h = spectrum.welch('hamming',2048,50);
    PSD = psd(h,x(t),'nfft',2048,'fs',Fs);
    

    【讨论】:

    • 感谢您的评论。这行不是“m2x_Wnd = mx_Wnd.^2;”吗?当 m2x_Wnd 是 fft x(t) 的大小时,会给我功率谱吗?这两个会给我同样的结果吗?此外,我想从理论上得到信号的能量谱:平方傅立叶系数的总和。我对吗 ?谢谢 fpe!
    • 据我所知ESDPSD 几乎代表了相同的信息; PSD 仅对频率样本数进行归一化。
    猜你喜欢
    • 2015-11-09
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 2012-12-03
    • 2016-02-17
    • 1970-01-01
    相关资源
    最近更新 更多