Effacer les filtres
Effacer les filtres

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

2 vues (au cours des 30 derniers jours)
matsushita ryota
matsushita ryota le 10 Nov 2019
たびたび失礼します。
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)
使用しているデータを添付します。
よろしくお願い致します。

Réponse acceptée

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

Connectez-vous pour commenter.

Plus de réponses (1)

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

Connectez-vous pour commenter.

Tags

Community Treasure Hunt

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

Start Hunting!