假设采样率Amp_time
存在实际信号SampRate
(幅度随时间变化)。
我可以用
fftLength = length(Amp_time);
FT_freq = fft(Amp_time,fftLength); % signal as a function of frequency
FT_freq = FT_freq(1:fftLength/2); % throw away symmetric part
和相应的频率:
freq = [0:fftLength-1].*(SampRate/fftLength);
freq = freq(freq < SampRate/2); % throw away symmetric part
要将其转换回时域,我只需使用
Amp_time2 = ifft(FT_freq,'symmetric');
但是,如果我要更改FT_freq的长度怎么样?
假设我想通过将length(FT_freq)
平均到较粗略的频率向量(即10 ^ 3而不是10 ^ 5个频率)来减少FT_freq
。
[freq2,FT_freq2] = special_average(freq,FT_freq) % reducing length of FT_freq
我认为不可能采用上面的版本(因为 Matlab怎么可能知道信号对应的频率)。
我错过了什么?
为了获得正确的IFFT,我是否必须再次缩放粗略FT_freq2
?
(记忆力不好,......)
我想要降低傅里叶变换的自由度的原因是为了避免使用大小为10^5 x 10^3
的矩阵(对每首歌曲的每十分之一秒进行FFT),然后来比较频率-spectra /音调