問題タブ [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.
performance - 少数の時点のみが必要な場合の逆 FFT
iFFT を繰り返し呼び出すモデリングを行いたいと考えています。これは、複雑な周波数応答 (振幅、位相) のパラメトリック モデルを入力として取り、出力としてインパルス応答を生成します。これを、部屋のラウドスピーカーで測定した「ウィンドウ化された」インパルス応答と比較したいと思います。測定されたインパルスは、空気中を直接マイクに伝わる音に対応する最初の部分によって特徴付けられます。これは、数ミリ秒間続き、その後、部屋の表面 (床、壁など) で反射した音が部屋を汚染します。信号。汚染されていない部分は、測定された総インパルスの 5% 程度です。iFFT が周波数応答から生成するインパルス応答を、測定されたインパルスの汚染されていない部分のみと比較したいと考えています。
必要に応じて、周波数応答からインパルス応答全体を計算し、結果の 95% を捨てることができますが、これは非常に非効率的です。モデルが最適化されている間、iFFT は何度も (おそらく数千回) 計算されるので、できる限り効率的にできるようにしたいと考えています。この時点で、私の唯一の選択肢は、FFTW を使用し、必要のないデータを破棄することです (より良いアイデアがないため)。
FFT がアクセスできる全時間範囲ではなく、対象の時点についてのみ逆 FFT を計算する高速な方法はありますか? たとえば、時点の 5% だけが必要な場合があります。私は FFT と iFFT の計算に詳しくないので、この質問に対する答えはわかりません。
編集:再確認したところ、16k インパルスを 96kHz で録音した場合、反射が信号を汚染する前に「良好なデータ」のサンプルは約 475 しかありません。これは、記録された信号全体の 3% 弱です。周波数応答からこの 200 ポイントだけを効率的に計算するにはどうすればよいでしょうか?
arrays - Matlab の問題で FFT を使用した 2D デコンボリューション
matlabで作成した画像を、matlabでも定義した2Dガウス関数で畳み込みました。現在、結果の行列をデコンボリューションして、fft2およびifft2コマンドを使用して2Dガウス関数が返されるかどうかを確認しようとしています。ただし、結果として得られる行列は(私の知る限り)正しくありません。これまでに行ったことのコードは次のとおりです。
% 入力画像 (img) のコード [300x300 配列]
% c = 0 sig = 1/64 (Z) の 2D ガウス関数のコード [300x300 配列]
% img と Z の 2D Convolution のコード (C) [599x599 配列]
% img と C の断面プロファイル ベクトルを使用して、この畳み込みが正しいことをテストしました。結果の xy プロットは、畳み込みから期待されるものです。
% 畳み込みに関する私の知識から、アルゴリズムはフーリエ空間の乗数として機能するため、出力 (畳み込み画像) のフーリエ変換を入力 (img) で除算することにより、点広がり関数 (Z - 2D ガウス関数) を取得する必要があります。 )逆フーリエ変換が除算によってこの結果に適用された後。
% 試行された 2D デコンボリューションのコード
% 結果を 599x599 配列に増やすために追加されたゼロ パディング
% 次のエラー プロンプトが表示されます。結果が不正確になる場合があります。RCOND = 2.551432e-22
iFR は Z に近いと予想していますが、まったく異なる結果が得られています。複雑な値を持つ Z の近似値かもしれませんが、matlab で 3D 複素行列をプロットする方法がわからないため、チェックできないようです。誰かが私の答えが正しいか間違っているか、そしてこのデコンボリューションを機能させる方法を教えてもらえますか? よろしくお願いします。
vhdl - デバイス内のクロック ドメインの交差
OFDM システムの一部である FPGA に実装される VHDL のパイロット挿入モジュールの設計に取り組んでいます。変調コンポーネントからの 48 ワードごとに、パイロット挿入によりパイロット トーンと NULL が追加され、64 チャネル IFFT の残りのチャネルが埋められます。このシステムのストリーミング操作を実現しようとしているので、固定レイテンシで IFFT へのシリアル入力用に 64 サンプルを常に生成します。
私のアプローチは、2 ポート RAM を使用することです。1 つのポートは変調されたワードを受信し、もう 1 つのポートは IFFT への書き込みに使用します。各ポートは独立したクロックで動作し、デバイスの外側に 4/3 クロック分周器があるため、出力は入力への 48 クロックごとに 64 クロックを受け取ります。
私の質問は、これが有効な設計戦略であるかどうか、およびどのような種類の落とし穴に注意する必要があるかということです。また、これを達成する方法について誰かが別の提案をしてくれれば幸いです。
ありがとう、テクノクラティック
matlab - シェーディングからの形状に対する fft2 と fftshift の正しい使用法
Trucco/Verri のテキスト「Introductory Techniques for 3d Computer Vision」に見られるシェーディング アルゴリズムから古典的な形状を再現しようとしていますが、matlab の fft 関数を理解するのに苦労しています。基本的に、画像の深さ (Z) を取得するには、可積分性制約を使用する必要があります。このシナリオで fftshift を使用するかどうかはわかりません。ここに私がこれまでに持っているコードがあります。http://www.mathworks.com/matlabcentral/newsreader/view_thread/285244に基づく 私は基本的にすべての fft2 を fftshift でラップしましたが、これは正しい使い方ではないと思います。誰かが私に使用法と私が間違っていることを説明してもらえますか? ありがとうございました。基本的に、私は p と q (ピクセル強度に基づいて更新された値) をフーリエ領域に変換して、式 C で使用しようとしています。次に、式 C を変換して時間領域です。これにより、Z の深さが得られるからです。また、フーリエ領域の C に基づいて P と Q を更新したいと考えています。
matlab - 逆フーリエ変換で正しい結果が得られないのはなぜですか?
Matlab で画像のフーリエ変換を行いましたが、逆フーリエを取得したいのですが、結果は元の画像ではなく完全に黒い画像になります。逆を行う前に、いくつかのステップを実行する必要があると思います。助けてくれてありがとう。コード:
c - IFFT 後の虚数部の競合
IFFT 後の虚数部のみでの競合の背後にある理由を知りたいと思っていました。
私の C/C++ 実装と Matlab 実装の両方で、次の同じ手順を実行しています。
- 私の信号xは次元Mx1であり、その信号に対してNポイントFFT ( N = 2* M ) を実行して、周波数ドメインでNポイント信号を取得します。
- この周波数領域信号にカスタマイズされたフィルターを適用します (実数部と虚数部の両方が段階的に変更されます)。
- N点逆 FFTで実行します。
C/C++ と Matlab の両方の実装は、逆 IFFT ステップの後、虚部は一致しませんが、実部は一致することを除いて、まったく同じ結果を生成します。
上記のステップ 2 をスキップすると、両方の実装の IFFT 出力は問題なく一致します。IFFT への入力信号 (つまり、step2 フィルターの後) が共役対称である必要がないことが意図されています。実際、この信号はエルミート/対称ではない場合さえあります。
smbFft
現在、このCPP-FILEで利用可能な関数として定義されている FFT/IFFT の C 実装を使用しています。
手がかりはありますか、なぜこれが起こっているのでしょうか?
PS: 対応する Matlab の実装と正確に一致する C/C++ での FFT の実装を誰かが教えてくれれば、それは素晴らしいことです。
ありがとう。
編集:(smbFfT
上記で述べた)代わりにFFTWの実装をテストしました。FFTW 実装にも同じ問題があり、これらのテスト済み C 実装の両方がエルミート対称設定で IFFT を実行することを示唆しています。Matlab で行うのと同じ IFFT を C で実行する必要がありIFFT(..., 'nonsymmetric')
ます。
matlab - フーリエ変換: mag + phase を取得し、それらを使用して元の信号をプロットする
こんにちは、私は単純な信号に取り組んでおり、信号のフーリエ変換を計算し、振幅と位相を取得して、そこから元の信号を再構築したいと考えています。
このスレッドに基づいてコードを作成しています。
コード:
私は完全に異なるグラフを取得します。
編集: 位相が変化した場合に信号に何が起こるかをテストするために、実際にこれを行っています。したがって、これにより、信号を再度構築するために位相角が必要になります。
私はフーリエ + Matlab の両方にまだ慣れていないので、ランダムなばかげた間違いを犯していたら申し訳ありません。皆さんが私を正しい方向に向けることができれば幸いです。ありがとうございました。
math - 逆FFTの計算量
私は ifft の計算の複雑さを計算しようとしています。N*1 次元のシグナルの NlogN であることはわかっています。しかし、私は2つの信号の積を持っているので、ifftを取得してから、計算の複雑さを計算したいと考えています。簡単に言えば、X(w) と Q(w) が 2 つの時間信号 のフーリエ変換である場合、それらの積の計算量はどれくらいかということです。
注: X(w) と Q(w) は同じ (N*1) サイズです。
ifft(X(w)*Q(w))=???