2016-12-30 22 views
0

私はMATLABチュートリアルFrequency-Domain Linear Regressionを使用しています。 FFTとIFFTのために、「正と負の周波数の周波数ビン」を決定する必要があるコードの一部、コードのこの部分がある:正負周波数のMATLAB周波数ビン

freqbin = 72/12; 
freqbins = [freqbin 72-freqbin]+1; 
tsfit = zeros(72,1); 
tsfit(freqbins) = tsdft(freqbins); 
tsfit = ifft(tsfit); 
mu = mean(ts); 
tsfit = mu+tsfit; 

時系列の長さは72であり、そしてあります12ヶ月は1サイクルです。どのように正の周波数のためのただ1つの周波数ビンがあることができる、それはちょうど72/12 + 1(最初のビンはゼロ周波数のためです+1)であることを私たちはどのように知っていますか?

答えて

0

一般的な注意事項から始めましょう。 、したがって、逆に、

k = f_k * N/Fs + 1; 

f_k = (k-1) * Fs/N ; 

または:サンプルレートがFsであり、FFTのサンプル数は、Nある場合、MATLABインデックスkとビンの周波数でありますFFTベクトルの要素は周波数0, Fs/N, 2*Fs/N, ..., (N-1)*Fs/Nに対応します。

周波数はFsでシフトしないことに注意してください。つまり、ff+Fsf-Fsはすべて同等です。したがって、FFTベクトルの前半は正の周波数(インデックス:1〜N/2;周波数:0(N/2-1)/N*Fs)に対応し、後半は負の周波数(インデックス:N/2 + 1 N;頻度:-Fs/2~-Fs/N)。ここでは、簡潔さのために正の周波数の集合に0を含める。

今、あなたの具体的な例に来ること:

N = 72 
Fs = 12 ; % samples per year 

ので、正の周波数範囲は、それぞれ、1〜36のインデックスに対応し、年間0Fs/2 = 6サイクルからです。

頻度1サイクルに対応するFFTサンプルの検索に興味があります。インデックス1 * 72/12 + 1 = 7に対応します。 FFTは実数信号に対して対称であるため、シフト不変性プロパティを使用する1年あたりの周波数-1サイクルに対応するFFTサンプルもまた、-1 + Fs = 11サイクル/年に相当します。対応するインデックスは(12-1) * 72/12 + 1 = 67です。要約する

  • (0を含む)36の正の周波数があるが、ない1
  • アルゴリズムは、最高の大きさの唯一の正の周波数に興味があります。
  • その頻度は1年に1サイクルになります。対応するMATLABインデックスが7
  • 周波数の鏡像である-1サイクル年間、MATLABインデックス67
+0

おかげに相当します。私の例では、時系列の長さが奇数であれば、それは10進数のインデックスに対応しますか? Fsはまた12である。 再び説明することができるか?周波数はFsによってシフトするのに不変であることに注意してください。つまり、fとf + Fsとf-Fsはすべて同等です。" –

+0

N/2 + 1以上のインデックスは、Nが偶数であるか奇数であるかにかかわらず、負であるとみなすことができます。周波数シフト不変性について:これは離散時間表現と関連しています。この実験では、48kHzでサンプリングした1kHzと49kHzの2つの正弦波をプロットします。 [詳細はこちら] [more details。](http://allsignalprocessing.com/discrete-time-frequency-avoid-confusion/) – aksadv

+0

しかし、kを10進数にするとどうしますか?kを後でindexのように使う必要がありますフーリエ係数? –