如何在Matlab中获得FFT后的信号能谱?

时间:2013-08-22 06:15:43

标签: matlab signal-processing fft

编辑:


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

计算 kth泛音能量以bin 的平方幅度之和> 4K + 1 。额外的FFT值包含在谐波能量计算中,以便将计算的能量的灵敏度降低到频率估计中的误差,该误差导致 kth谐波峰值偏离bin 4K + 1 “。

我不完全理解上面的段落。在我有限的理解中,粗线 “fft”是指函数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 

1 个答案:

答案 0 :(得分:1)

通常你可以用这种方式计算光谱:

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