高速フーリエ変換について

11 ビュー (過去 30 日間)
matsushita ryota
matsushita ryota 2019 年 11 月 10 日
コメント済み: matsushita ryota 2019 年 11 月 12 日
たびたび失礼します。
https://jp.mathworks.com/help/matlab/ref/fft.html の「ノイズを含む信号」参考に高速フーリエ変換を行っています。
両側スペクトル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)
使用しているデータを添付します。
よろしくお願い致します。

採用された回答

Naoya
Naoya 2019 年 11 月 11 日
L は信号x の長さ (本例の場合 L = 222;) を定義する必要がありますので、
L=5;
の箇所を
L = length(x);
とすることで ナイキスト周波数までの 112点分のプロットを表示することができます。
  1 件のコメント
matsushita ryota
matsushita ryota 2019 年 11 月 12 日
ありがとうございます!

サインインしてコメントする。

その他の回答 (1 件)

Hiro
Hiro 2019 年 11 月 11 日
離散フーリエ変換をするときにいくつか覚えておくべきことをまとめておきます。
  • 離散フーリエ変換は線形変換で、変換後のデータ数は変換前の離散データ数(L)と同じ
  • 周波数領域では、周波数は「正規化周波数」になっている。すなわちずつ周波数が増えます。なのでl番目のデータはとなる。これを使ってご自身のサンプリングレートに合わせて軸を作っているのが以下の部分です。
f = Fs*(0:(L/2))/L;
ディメンションチェックすると分かりやすいです:
  1 件のコメント
matsushita ryota
matsushita ryota 2019 年 11 月 12 日
説明分かりやすかったです! ありがとうございます!

サインインしてコメントする。

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!