MATLAB Answers

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

10 views (last 30 days)
たびたび失礼します。
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)
使用しているデータを添付します。
よろしくお願い致します。

Accepted Answer

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

Sign in to comment.

More Answers (1)

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

Sign in to comment.

Tags

Community Treasure Hunt

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

Start Hunting!