高速フーリエ変換について
6 views (last 30 days)
Show older comments
matsushita ryota
on 10 Nov 2019
Commented: matsushita ryota
on 12 Nov 2019
たびたび失礼します。
両側スペクトルP2を出す所までは同じようにできるのですが、片側スペクトルP1が同じように出せません。
例題ではP2(1×1500 double) →P1 (1×751 double)になりますが、
自分のデータで行うと P2(1×222 double) →P1(1×3 double) になってしまい
最後のplot図が同じように描けません。
どのように対処すればいいか教えていただきたいです。
よろしくお願いします。
書いたコード↓
load 'x'
L = 5
Fs = 44100
Y = fft(x)
p2 = abs (Y/L)
p1 = p2(1:L/2+1)
p1(2:end-1) = 2*p1(2:end-1)
f = Fs*(0:(L/2))/L;
plot (f,p1)
使用しているデータを添付します。
よろしくお願い致します。
0 Comments
Accepted Answer
Naoya
on 11 Nov 2019
L は信号x の長さ (本例の場合 L = 222;) を定義する必要がありますので、
L=5;
の箇所を
L = length(x);
とすることで ナイキスト周波数までの 112点分のプロットを表示することができます。
More Answers (1)
Hiro Yoshino
on 11 Nov 2019
離散フーリエ変換をするときにいくつか覚えておくべきことをまとめておきます。
- 離散フーリエ変換は線形変換で、変換後のデータ数は変換前の離散データ数(L)と同じ
- 周波数領域では、周波数は「正規化周波数」になっている。すなわちずつ周波数が増えます。なのでl番目のデータはとなる。これを使ってご自身のサンプリングレートに合わせて軸を作っているのが以下の部分です。
f = Fs*(0:(L/2))/L;
ディメンションチェックすると分かりやすいです:
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!