3

画像の線の値など、何らかの波を表すデータがある場合、フーリエ変換を使用してその波の周波数関数を取得できることがわかっています。しかし、点 x=0...N-1 には N 個の値があり、出力には N 個の周波数しか得られません。したがって、[0、N-1] の範囲内のどこでも波を分析したいと考えています。たとえば、ポイント u = 1.5 です。どうすればいいですか?

4

3 に答える 3

4

サンプルのセットから任意の周波数のフーリエ変換値を計算することは、実際には非常に簡単です。

F(w)= sum[over all sample indices k] ( f(t_k) e^(i w t_k) )

コードに関しては、次のようにします。

float Fourier(float omega) {
  Complex a(0.0); // think "a is for accumulator"
  for(int k=0; k<value.size(); ++k) {
    float time= t_start + k*dt;
    float theta= omega * time;  // this is (w t_k) from above
    a+= value[k] * Complex(cos(theta), sin(theta));
  }
  return a;
} // note, I have explicitly written out e^(i theta) = cos(theta) + i sin(theta)

サンプル時間が不規則な場合は、インデックスから時間を計算する代わりに、value [] vector/arrayと一緒にtime[]vector/arrayを使用できます。(ただし、不規則な間隔のサンプルは必ずしもあなたが思っていることを意味するわけではないので注意してください!このコメントが何らかの形で不思議な場合は、通常のサンプルに固執してください...)

唯一の問題は、通常のサンプルに基づいてN個の規則的な間隔の周波数を生成する場合、上記の方法で実行するとO(N ^ 2)時間がかかることです高速フーリエ変換は、O(N log N)時間でこれを行うアルゴリズムです。

于 2010-01-13T09:13:38.547 に答える
1

これらの中間点のデータを補間する必要があります。

于 2010-01-12T14:41:58.413 に答える
0

私がこれらのいずれかを行ってから 10 年以上が経過していますが、Matlab には、ユーザーが望むことを実行できるいくつかの FT メソッドがあったと思います。少なくとも、線形信号と DSP クラスで使用したものです。

于 2010-01-12T14:36:51.950 に答える