• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:FFTの周波数分解能を上げる話)

FFTの周波数分解能を上げる方法とは?

noname_deadbeefの回答

回答No.6

>δfの刻みが小さくなったことによって設けられたところに大きな成分があれば見つかることを期待しています。すなわち見えなかったピークが見えるようになる事を期待しています。 少なくともエネルギー的には見落とされることはありません。パーセバルの定理より。 データ全長に1.5次相当の正弦波が書かれていたとしてDFTすると直流成分+1次+2次+…と分解されてしまいますが、そのデータ全長しか情報がないのであればこれでも一つの正しい答えです。データの後ろに0を追加して1.5次相当も基底に含まれるようにすれば1.5次のところにピークが出るでしょうが…鋭いピークにはなりません。

subarist00
質問者

お礼

ご回答ありがとうございます。DFTというのはアナログフーリエ変換結果の0.5~1.5次の平均振幅(平均パワー)を1次、1.5~2.5次の平均を2次の振幅とする計算なのでおっしゃる通りエネルギー的に見逃されることはないと思います。 その上で波形の特徴として分解能を上げる事で卓越周期成分が検出できないかと思っています。大人しくWaveletかけたほうが早い、というのは抜きにして。

関連するQ&A

  • FFTでの分解能について

    FFTをするときに、その分解能はサンプリング時間とデータの数で決まってしまうと思うのですが、この二つを変えずに周波数分解能をあげることは可能でしょうか?また、データ数を補間する等して無理やり多くすると問題があるでしょうか?すいません、どなたかお答え下さい。

  • 離散フーリエ変換の周波数分解能

    失礼します。 DFT(離散フーリエ変換)について質問させてください。 DFTの周波数分解能は時間領域でのデータが持つ幅の逆数で決まりますが、 この周波数分解能で表現されなかった周波数成分はどこに行くのか教えていただけないでしょうか? DFTでの離散的な周波数の間にある成分はどこへ行くのか? 単純に考えて、DFTは形としては級数和なので、 それらの成分はどこかに畳み込まれているように思うのですが、 表現されない周波数成分の情報は消されたりするのでしょうか? よろしくお願い致します。

  • 周波数解析について

    周波数解析について何点か質問があります。 FFTを用いてパワースペクトルを求めているのですが、 (1)FFTポイントを小さく、大きくするとそれぞれどのようなメリットがあるのか。 FFTポイントを小さくすると分析時間が短く、大きくすると分析時間が長くなるのは知っているのですが、それに伴い周波数分解能の精度が変化してくるのがいまいち理解できません。 (2)FFTを行う平均回数は例えば5回行うと、加算平均時に使われるデータがFFTポイント5つ分という解釈でいいのか。 以上の二点について分かりやすく解析していただけると幸いです。 当方、数学についての知識が乏しく、この質問内容だけでは答えられないという場合には分かる範囲で追記していきたいと思っています。

  • FFTにおけるゼロ追加、補間や分解能について

    FFT解析で、時間軸データの後にゼロをつけると、周波数分解能が上がることは数値計算で確認しましたが、次の場合のやり方がわかりませんので教えていただけないでしょうか。 1. 周波数軸データの後にゼロをつけて最高周波数をあげ、逆変換して刻み時間を細かくしたいのですが、ゼロの配置は共役関係やナイキスト周波数を考えるとどういう風になるのでしょうか。 2. 周波数軸データの値を内挿すると周波数分解能が上がり、逆変換すると結果として時間軸の継続時間が長くなるように思うのですが、それでよいのでしょうか。またその場合、良い内挿の方法はあるのでしょうか。 3. 以上に関するURLや書籍を紹介していただけないでしょうか。

  • 特定の周波数レベルだけ取り出したい

    ある時間関数f(t)がありまして、その中から特定の周波数のレベルだけリアルタイムに取り出したいのですが、その処理をするCPUの処理能力に限界がありFFTなどという高級なことはできません。ある一つの周波数についてだけでよいので簡単に取り出す演算方法はないでしょうか。

  • 周波数解析 FFTと自己回帰モデルについて

    いつもお世話になっています。 周波数解析で質問です。 十分なサンプリングレートで、十分な時間記録したデータを使う場合、自己回帰モデルを使った周波数解析は必要ないでしょうか。 現在、FFTを使ってあるデータの周波数解析をしていますが、ものの本によれば、そのデータを扱う場合は、FFTよりARモデルを使った周波数解析の方がよい、と書いてありました。しかし、サンプリングレートが細かすぎて、モデルの次数を決定するのも、妥当かどうか疑問が残ります。一般的に、MEMなどのARモデルを使った周波数解析は、周波数分解能の悪さを補うのが大きな目的ですか?

  • フーリエ変換の最大周波数

    5kHzでAD変換した信号があり、解析したい成分は0~1kHzに含まれています。 上記の前提で、256点で128点オーバーラップしながらFFT処理を行った場合、FFTを行うデータ数をN、サンプリング間隔Δt(1/5kHz=0.0002sec)とした時、 分解能 Δf=1/N*Δt=19.53 最大周波数 Fmax=(N/2NΔt)-(1-Δf)=2480.47 という計算式をインターネット上で見つけました。つまり0~2480Hzまで20Hzごとのパワースペクトル時間変化が128点データが並ぶということになると思うのですが・・・・ 一方、最大周波数はFFTデータ数の半分だという記載も見つけました。すると、最大周波数は半分も128Hzだと思うのですが、どちらが正しいのでしょうか?

  • 衝撃信号のFFTに関して質問です。

    建設現場の杭打ちによる衝撃信号(加速度)をサンプリング周波数25.6kHzにて10秒間収録しました。このデータをOriginやDADiSP等信号解析ソフトウェアを使用してFFTを行いました。 その結果として、25.6kHz×10秒=256,000個のデータを十把一からげでFFT(DFT?)を行った場合の振幅と、リサンプリングして256Hz×10秒=2,560個のデータを十把一からげでFFTした場合の振幅が明らかに異なるのですが、その理由をご教示頂きたくお願いいたします。 同じ、解析ソフトウェアの仕様によって若干周波数分解能は異なりますが、計算上はどちらの場合も周波数分解能は0.1Hzですので、近似の値が欲しいのですがうまくいきません。 サイン波のような定常信号で同じ処理を行った場合は、ほぼ同等の結果が得られたのに対して、単発の衝撃信号の場合は、衝撃時以外の波形がほぼフラットなため広い周波数帯に分散されてしまうのでしょうか? 調査対象として100Hz以上の周波数は必要無かったので、リサンプリングしてみた結果が上記のような内容となってしまいました。 私の処理方法が誤っていればそれはそれで助かるのですが・・・。 何卒宜しくお願いいたします。

  • フーリエ変換? FIT curveって??

    生物リズム学論文を読んでいたら、FFT-NLLS(The fast Fourier transform-nonlinear least squares method )という解析方法がでてきました。 ネットで調べて 「FFT=高速フーリエ変換」、 「フーリエ変換を行うことにより、解析したい音・振動の波形が、どのような周波数と振幅を持つ波形の合成で成り立っているかを知ること(スペクトル分析)ができる」 ということはわかったのですが、 ・「NLLs」とはどんな意味なのか? ・このFFTによって得られる「FIT curve」がどんな物なのか、日本語ではなんというのか がわかりません。FIT curveは近似値曲線のような物でしょうか?? どなたか詳しい方教えてください、よろしくお願いします!!

  • ゆらぎの分析

    MATLABを使ってゆらぎの分析をしたいのですが、 FFT後、両対数軸で表示しようとすると、「警告:負のデータは無視されます」と出てきて、グラフが表示されなかったり、1本の直線が表示させたり、上手く表示できません。 FFTをする、対数軸で表示、の間にワンクッショなにかが必要なのでしょうか? 詳しい方教えてください。 一応テキストを見ながら作ったのですが、貼っておきます。 clear; fs=10000; dft_size=1024; x=wavread(' .wav');  //空けてあります。 w=HanningWindow_(dft_size); for n=1:dft_size, x(n)=x(n)*w(n); end X=fft(x,dft_size); A=zeros(1,dft_size/2+1); frequency=zeros(1,dft_size/2+1); for k=1:dft_size/2+1, A(k)=20*log10(abs(X(k))); frequency(k)=(k-1)*fs/dft_size; end subplot(2,1,1), plot(frequency,A); xlabel=('周波数[Hz]'); ylabel=('振幅[db]'); % 対数軸で表示 subplot(2,1,2), loglog(frequency,A); xlabel=('周波数[Hz]'); ylabel=('振幅[db]');