問題タブ [ifft]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2620 参照

matlab - Matlab でのパターン認識

まず、ここでこの質問をするのが適切かどうかわかりませんが、画像処理について質問があります。Matlab でパターン認識コードを書こうとしています。256x256 ピクセルの生データに大文字の "ABCD" が含まれるオブジェクト入力があり、256x256 ピクセルの生データにも大文字の "A" が含まれ、文字全体が同じ大きさのフィルターがあります。私のコードは次のようになります。

  1. まず、matlab でこれら 2 つの生データ ファイルを読み取り、これらの画像を表示します。
  2. オブジェクトとフィルターの2次元フーリエ変換を取り、これらの画像を表示します
  3. フィルターの共役を取り、
  4. それらを乗算します
  5. 4 を 2 次元フーリエ変換すると、
  6. 5の出力を表示します。

このコードは、入力と出力で A の自己相関を見つけることを目的としています。これらを実行している間、フィルター内の B、C、D、および A 間の相互相関が出力に含まれますが、その強度は A の自己相関よりも小さくなります。相関し、周波数領域でこれを行います。コードを書きましたが、正確に動作しません。特に、出力画像が正しくありません。また、生ファイルを Matlab にロードするための正しい関数も探します。私のコード:

ありがとう。

0 投票する
2 に答える
876 参照

floating-point - 2つの実関数の同時逆高速フーリエ変換

1つのIFFTで2つの実関数の逆フーリエ変換を計算しようとしています。私がこれまでに見つけた最もよくて最も簡単な説明はここにあります、それはそれが言うところです:

FFTが線形であり、最初の変換と2番目の変換のi倍の合計を形成するという事実を使用します。2つのベクトルx1とx2があり、それぞれ離散フーリエ変換X1とX2があります。それで

x1 = Re [IDFT [X1 + iX2]]

x2 = Im [IDFT [X1 +iX2]]。

問題は、「i」パラメータがどこから来ているのかわからないことです。これに関するヒントをいただければ幸いです。

前もって感謝します。

編集:

いくつかの実験を行った後、私は最終的にそれを機能させましたが、それが期待どおりに機能せず、正しい式を理解するためにいくつかの想像力を使用しなければならなかったため、今は以前よりも混乱しています。

私はちょうど新しい複雑な配列を作りました:

x1=Reとx2=ImでIFFTを実行した後、このように表現するのは正しいのではないでしょうか。

0 投票する
1 に答える
3463 参照

fortran - FFTW:リアルからコンプレックス、コンプレックスからリアルの2Dトランスフォームのトラブル

タイトルにあるように、私はFFTW(バージョン3.2.2)とFortran 90/95を使用して、実データ(実際には乱数のフィールド)の2DFFTを実行しています。私は前進のステップが機能していると思います(少なくとも私はいくつかの出力を得ています)。ただし、IFFTを実行してすべてをチェックし、元の入力を再構築できるかどうかを確認したいと思いました。残念ながら、complex to realルーチンを呼び出すと、何も起こらず、エラー出力も得られないため、少し混乱しています。コードスニペットは次のとおりです。

上記の順方向ステップは機能しているようですが(r2c)、逆方向ステップは機能していないようです。u配列とrecov配列を区別してこれを確認しましたが、最終的にはゼロではなくなりました。さらに、recov配列の最大値と最小値は両方ともゼロでした。これは、何も変更されていないことを示しているようです。

私はFFTWのドキュメントを調べ、次のページhttp://www.fftw.org/fftw3_doc/Fortran-Examples.html#Fortran-Examplesに基づいて実装しました。問題がインデックス作成に関連しているのかどうか疑問に思っています。少なくとも、それが私が傾いている方向です。とにかく、誰かが助けを提供できれば、それは素晴らしいことです!

ありがとう!

0 投票する
1 に答える
2611 参照

c++ - FFT2D(高速フーリエ変換2D)の実行方法R、G、Bカラーコンポーネント

私は高速フーリエ変換(FFT)の初心者であり、C++などのプログラミング言語でどのように計算するかについてはあまり理解していません。これがFFT2Dの方法です

ヒント:画像ピクセルは、3つの別々の画像カラー(R、G、B)平面として保存され、それぞれが複素数の1D配列で表されます。画像のサイズが幅W、高さがHであるとすると、画像位置(m、n)のピクセルの色成分値(R、G、B)はR [m + n * W]、G( m + n * W)およびB [m + n * W]。ここで、R、G、Bは複素数の3つの配列です。変換された係数の1D配列も、同じ方法で表されます。

1つのカラーコンポーネントのみの処理を実装する必要があり、プログラミングテンプレートは、実装された関数に基づいてR、G、Bを個別に処理します。テンプレートはまた、各入力画像のサイズが2m * 2nになるように、画像にゼロを埋め込みます。

FFT1Dは、FFT2Dの関数の内部から呼び出しています。FFT2DのC、C ++、JavaおよびC#でいくつかの異なるタイプのコードを見つけました。それらのほとんどは、2D配列構造を使用して実装されています。行と列のループ内の2D配列構造に実数部と虚数部を割り当てます。しかし、私の場合は色成分の1D配列構造です。

いくつかのコードを実行してみましょう。これはFFT2D関数内にあります。

以前は、FFTIDを呼び出す前に、本のようにtwoKの値を計算する必要がありました。M=2K

何かアイデアや参考資料があれば教えてください。

ありがとうございました

よろしくイチロー

0 投票する
3 に答える
4771 参照

matlab - MATLAB で ifft の出力の長さとサンプリング時間を制御する方法は?

次のような周波数領域のデータがあります。

ここに画像の説明を入力

これは、ベクトル x の周波数ポイントの振幅を含むベクトル Y があることを意味します。例えば

逆フーリエ変換を実行すると、周波数 5Hz の正弦波が得られます。

MATLAB 関数 ifft は、Y と f を時間領域に変換できます。ベクトルを時間領域 y および t と呼びましょう。指定されたサンプリング周波数と指定された信号長で時間領域データを取得する方法を探しています。たとえば、信号長が 1 秒で、サンプリング周波数が 1000Hz の時間領域データが必要です。

MATLAB の ifft 関数の出力は常に入力と同じ長さなので、必要なサンプリング周波数と信号長を得るために入力として何を指定すればよいかわかりません。

要約すると、MATLAB 関数を作成しようとしています。

これは、周波数ドメイン データ (f,Y) を時間ドメイン データ (t,y) に変換します。ここで、時間ベクトル t の長さは、信号の長さ (たとえば 1 秒) とサンプリング周波数 ( length(y) /signal_length ) は、sampling_frequency で指定できます

編集:あなたの答えに、あなたのアイデアを実装する方法をMATLABコードに含めてください。私はすでにそれを行う方法の概念を持っていますが、実際の実装を機能させることはできません. 具体的には、 ifft 関数の入力引数として何を指定するかを尋ねています。

(f,Y,sampling_frequency,signal_length) がわかっている場合に input_arg を作成する方法を MATLAB コードで探しています。

期待どおりに機能しない私の実装は次のとおりです。

0 投票する
2 に答える
2244 参照

python - matlab の ifft と numpy で異なる結果が得られる

別の質問があります。私がすでに尋ねた他のものと非常に似ています(そして大きな助けを得ました - ありがとうございました)。残念ながら、他のスレッドからの解決策はここでは機能しません: (http://stackoverflow.com/questions/8680909/fft-in-matlab-and-numpy-scipy-give-different-results)

今それは ifft についてです:

range(1,6) のような実数で実験を行いました。結果は同じです。精度の問題だろうか。しかし、なぜ結果がそれほど大きく異なるのでしょうか? 多分誰かが問題を解決する方法を知っていますか?

0 投票する
1 に答える
2771 参照

python - 対称スペクトルのiFFT

対称スペクトルでiFFTを実行します(Pythonを使用)。結果が実数値の信号ではなく、複素数値を含むのはなぜですか?

出力:

0 投票する
1 に答える
1047 参照

matlab - タイムドメイン / スペクトラム / DSP

複素数値スペクトルで iFFT を実行し、対応する時間領域信号を変更します。たとえば、最初のサンプルをゼロにします。最後に、FFT を介して周波数領域に変換します。

2つの結果が異なるため(正の周波数を比較しながら)、ここで両側(対称)スペクトルを使用するか、片側スペクトルのみ(正の周波数のみ)を使用することの(物理的な)違いはどこにあるのだろうか?

バージョン 1 (両側スペクトル): fft( nulling( ifft( [0, 1+1j, 2+j, 2-2j, 1-1j] ) ) )

出力: [-1.2, -0.2+1j, 0.8+2j, 0.8-2j, -0.2-1j]

バージョン 2 (片側スペクトル): fft( nulling( ifft( [0, 1+1j, 2+j] ) ) )

出力: [ -1-1j, 0+0j, 1+1j]

0 投票する
3 に答える
9063 参照

python - ケプストラム法による基本周波数

ケプストラル法で周波数を見つけようとしています。私のテストでは、次のファイルhttp://www.mediacollege.com/audio/tone/files/440Hz_44100Hz_16bit_05sec.wav、周波数 440Hz のオーディオ信号を取得しました。

次の式を適用しました。

ケプストラム = IFFT (log FFT (s))

256 チャンクを取得していますが、結果は常に間違っています...

この場合、結果 = 440 を取得するにはどうすればよいでしょうか?

**

アップデート:

**

ソースを matlab で書き直したところ、すべてが機能するようになりました。440 Hz と 250 Hz の周波数でテストを行いました ...

440Hzの場合、441Hzは悪くありません

250Hzの場合、結果に近い249.1525Hzが得られます

ピークをケプストラム値にする簡単な方法を 1 つ作成しました。

Quadract 補間を使用して最大値を見つけると、より良い結果が得られると思います。

440Hzの推定結果をプロットしています

ここに画像の説明を入力

ケプストラム周波数推定のソースを共有する:

0 投票する
1 に答える
1156 参照

fft - フィルタリングされた FFT からデータを取得する

Matlab を使用して処理したいデータに FFT を適用しました。結果の周波数は非常にノイズが多いため、周波数/振幅ベクトルに移動平均フィルターを適用しました。ここで、このフィルタリングされた周波数ドメイン データに基づいて時間ドメイン データを取得し、後でスペクトログラフで使用することに興味があります。

周波数/振幅成分を取得するために、Mathworks の例からこのコードを使用しました。

次を使用してプロットされます。

フィルタリングされた FFT の結果から時間領域データを取得する方法をお勧めできますか? 逆FFTが関係していますか?

どうもありがとうございました!