我是matlab和信号处理的新手。已经使用的时间序列是从建筑物中的加速度计获得的。据我了解,时间序列的长度和窗口函数长度(汉明或汉宁)应该相同。但是为了平滑傅立叶幅度谱,最佳窗口长度可以变化。这个过程应该如何在matlab中应用?
如何应用比我的时间序列短的窗口函数。
谢谢阅读!
我是matlab和信号处理的新手。已经使用的时间序列是从建筑物中的加速度计获得的。据我了解,时间序列的长度和窗口函数长度(汉明或汉宁)应该相同。但是为了平滑傅立叶幅度谱,最佳窗口长度可以变化。这个过程应该如何在matlab中应用?
如何应用比我的时间序列短的窗口函数。
谢谢阅读!
正如 Jim 所说,除非您一次对整个数据集进行 FFT,而不将数据拆分为较短的帧,否则您很可能会使用数据集的长度。下面显示了一个简单的示例。
Ts = 50e-6; % Sampling Time(s)
Fs = 1/Ts; % Sampling rate, Sampling Freq (Hz)
f0 = 50; % Frequency of interest (Hz)
duraT = 1;
%Calculate time axis
dt = 1/Fs;
tAxis = dt:dt:(duraT-dt);
y = cos(2*pi*f0*tAxis) + 2*sin(2*pi*10*tAxis); y=y';
L = length (y); % Window Length of FFT
nfft = 2^nextpow2(L); % Transform length
y_HannWnd = y.*hanning(L);
Ydft_HannWnd = fft(y_HannWnd,nfft)/L;
% at all frequencies except zero and the Nyquist
mYdft = abs(Ydft_HannWnd);
mYdft = mYdft (1:nfft/2+1);
mYdft (2:end-1) = 2* mYdft(2:end-1);
f = Fs/2*linspace(0,1,nfft/2+1);
figure(1),
subplot(2,1,1)
plot(tAxis,y)
title('Time Domain y(t)');
xlabel('Time,s');
ylabel('y');
subplot(2,1,2)
plot(f,2*mYdft); % why need *2 ? Bcoz, Hanning Wnd Amplitude Correction Factor = 2
axis ([0 500 0 5]); %Zoom in
title('Amplitude Spectrum with Hann Wnd');
xlabel('Frequency (Hz)with hanning window');
ylabel('|Y(f)|');
窗口长度应等于您的变换长度,不一定等于整个数据集的长度。当然,如果您要一次转换整个数据集,这两者是相同的,但是如果您打算进行较短的转换,那么您应该使窗口长度等于这些转换的长度。