我在将频谱转换为时间序列时遇到了一个小问题。我已经阅读了很多文章,我认为我正在应用正确的程序,但我没有得到正确的结果。你能帮忙找出错误吗?
我有一个时间序列,例如:
当我计算频谱时,我会: %number of points nPoints=length(timeSeries);
%time interval
dt=time(2)-time(1);
%Fast Fourier transform
p=abs(fft(timeSeries))./(nPoints/2);
%power of positive frequencies
spectrum=p(1:(nPoints/2)).^2;
%frequency
dfFFT=1/tDur;
frequency=(1:nPoints)*dfFFT;
frequency=frequency(1:(nPoints)/2);
%plot spectrum
semilogy(frequency,spectrum); grid on;
xlabel('Frequency [Hz]');
ylabel('Power Spectrum [N*m]^2/[Hz]');
title('SPD load signal');
我得到:
我认为频谱计算得很好。但是,现在我需要返回并从该频谱中获取时间序列,我会这样做:
df=frequency(2)-frequency(1);
ap = sqrt(2.*spectrum*df)';
%random number form -pi to pi
epsilon=-pi + 2*pi*rand(1,length(ap));
%transform to time series
randomSeries=length(time).*real(ifft(pad(ap.*exp(epsilon.*i.*2.*pi),length(time))));
%Add the mean value
randomSeries=randomSeries+mean(timeSeries);
但是,情节看起来像:
它比原始系列低一个数量级。有什么推荐吗?