問題タブ [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.
fft - KissFFT (kiss_fftr to kiss_fftri) - 元の信号を再構築する方法は?
KissFFT (1.2.9) を正しく使用する方法を理解するのに苦労しています。今のところ達成しようとしているのは、FFT を実行し、すぐに iFFT を実行して元の信号を再構築することだけです。以下のコード スニペットは、私が何をしているかを示しています。
私が見つけたのは、これが実際に実行時にクラッシュすることです。KissFFT構成を作成するときにサイズを2で割ると、クラッシュが停止することがわかりました。
ただし、再構築されたオーディオ データを再生すると、奇妙なパチパチ音を立ててほとんど無音になります。
誰かが私を正しい方向に向けることができますか?
どうもありがとう、P
編集 1:これは、KissFFT ヘッダー ファイルをインクルードし、FIXED_POINT 変数を定義する方法です。
これにより、typedef された 'kiss_fft_scalar' 型が int16_t (short) に強制されることが保証されます。
編集 2:ターゲット プラットフォームは Android であるため、Android.mk ファイルに以下も追加しました。
matlab - fft / ifft:サンプリング周波数と信号の長さ
これは、Matlabfft-documentationから部分的に取得されています。
信号の長さがサンプリング周波数の倍数である場合は常に、正弦波が正しく再構築されているように見えます(シフトは別として)。たとえば、次のようになりますFs = 30, L = 60
。
ただし、たとえばFs = 30, L = 80
(倍数ではない)場合、結果は奇妙に見えます。
この動作は正しいですか?なぜこれが起こっているのですか、どうすればこれを回避できますか?長さがサンプリング周波数に「適合する」ように、信号の一部を捨てるだけですか?
c++ - C++ での FFT と IFFT
C++/C を使用して、レーザーのパルス出力であるはずのデータに対して順方向および逆方向の FFT を実行しています。
アイデアは、出力を取得し、フォワード FFT を使用して周波数ドメインに変換し、位相に線形最適適合を適用し (最初にアンラップ)、次にこの最適適合を位相情報から差し引くことです。
得られた位相と振幅は時間領域に変換され、最終的な目的は位相補償によるパルスの圧縮です。
私はこれを MATLAB で実行しようとしましたが失敗し、結果として C++ に変更しました。フォワード FFT は正常に動作しています。C++ の数値レシピから基本的なレシピを取得し、次のように関数を使用して複雑な入力用に変更しました。
ftt_basic()
「数値レシピ C++」から取得した関数を使用します。
私の問題は、入力の形式が逆 FFT の出力に影響を与えるように見えることです。これは精度の問題かもしれませんが、私は周りを見回しましたが、これまでに他の人に影響を与えたようには見えません.
フォワード FFT の出力をリバース FFT に直接戻すと、入力と同じパルスが生成されます。
ただし、フォワード FFT の時点で得られた電力出力を取得しreal^2+imag^2
、次のような配列にコピーします。
これを逆 FFT の入力として使用すると、次の結果が得られます。
そして最後に、フォワード FFT の出力を取得し、次のようにコピーします。
ここで、Amplitude[i]=(real^2+imag^2)^0.5 および phase[i]=atan(imag/real) です。時間領域に戻すと、次の電力出力が得られます。
パルス構造を詳しく見てみましょう。
最初の写真がきれいで規則的なパルスを生成したとき。
私の質問は、逆fftの出力がこのようになる原因となるcos関数とsin関数の精度ですか?複素数データを入力するさまざまな方法に大きな違いがあるのはなぜですか? また、データが逆 FFT に直接フィードバックされた場合にのみ、時間領域のデータが元のデータと同一になるのはなぜですか? forwads FFT への入力?
ありがとうございました。
*ここでの編集は、機能の実装です:
{
再度、感謝します!
c# - AForge.NetのFFTからのIFFT
MatlabからC#にコードを書き直しています。私は数学に完全に慣れていません。AForge.netライブラリで見つけたFFT関数を使用する必要がありましたが、今はIFFTが必要です。これは、FFTを使用して数行でIFFTを計算することは可能ですか?
Aforge.Net FFT宣言:
python - scipy fft と ifft を使用して常微分方程式を数値的に解く
次のようなordinary differential equation
インタイムドメインがあります。
どこI = A*t/tau*exp^(1-t/tau)
周波数ドメイン:
j
複素数であることsqrt(-1)
したがって、高速フーリエ変換( )u(t)
を使用して周波数領域に入り、 を使用し て戻ることができます。fft
ifft
コード:
しかし、これu(t)
を微分方程式の数値積分やその解析形式などの他の方法と比較すると、正しくありません。私は自分の間違いがどこにあるかを理解しようとしましたが、うまくいきませんでした。
啓発してください。
java - fft を画像に適用し、画像を表示してから、ifft で同じことを行うにはどうすればよいですか?
質問は少し広いです。
これが私がやったことです:
fftを適用する方法があります。正しいか間違っているかはここでは重要ではないため、投稿するつもりはありません。
メソッドを使用して画像を実行し、同じサイズの 2 つの画像 (1 つは実部用、もう 1 つは虚部用) として出力されるものを表示しようとします。
私の方法から得られるグレースケール値が通常255よりもはるかに大きいことを除いて、これはうまくいくようです。したがって、私が何を見ているのかわかりません。
次に、生の結果 (表示するピクセル値が何であれ、0 から 255 の間に収まるように変更されていると想定しているため) を取得し、前と同じ方法で実行しますが、ifft を達成するために符号を変更します。
次に、これも表示しようとします。繰り返しますが、ほとんどの場合、生の値は 255 よりもはるかに大きくなっています。
私の質問は次のとおりです。b.) ifft を実行するとき、このスケーリングを逆にする必要がありますか? c.) ifft を適用する前に、fft で行う必要がある変換はありますか?
パート c は、fft のコーナーを中央に配置することについて話していることをいくつか読んだという事実から生じますが、これが何を意味するのかはよくわかりません。
より少ない質問、パートdは、最初に1d fftをすべての行に適用し、次にすべての列に適用することにより、元の画像に2d fftを適用する場合、同じ順序でifftを適用する必要があるか、または順序を逆にする必要がありますか。
今はそれだけだと思います。私は多くの答えを探してきましたが、多くを見つけることができないようですので、どんな助けも大歓迎です。
編集:いくつかの画像を追加しました。おそらく役立つでしょう。1 つ目は元のイメージ、2 つ目は私の fft メソッド (大きさと虚数成分) の結果、3 つ目は中間イメージの ifft の結果です。
EDIT2:画像を新しい方法のものに更新しました。
image - 2D fftを逆にする順序は重要ですか?
最初に行に、次に最初のアプリケーションの結果の列に fft を適用しようとしています。
私の質問は、ifft を適用しようとするとき、最初に列に適用してから行に適用する必要がありますか、それとも問題ではありませんか?
ありがとう
matlab - 周波数ドメインを時間ドメインに変換する方法
3 つの異なる周波数信号を作成し、不要な信号を除外しました。しかし、matlab で ifft を使用すると、間違ったグラフが表示されます。周波数領域スペクトルを 3 秒の時間領域グラフに変換するにはどうすればよいですか? 私のコードの下は次のとおりです。
matlab - Matlab - 修正方法: 警告: 複素数入力の実部を表示していますか?
コードを考えると
Warning: Displaying real part of complex input
行を実行すると、次のようになります output = mask.*fourierImg; % calc with the mask
。
どうすれば修正できますか?
よろしく
numpy - ifft(fft(audio)) は単なるノイズです
それらをネストするだけ ( iff(fft(audio))
) にするか、ウィンドウごとに試すか (window
オーディオを実行しfft
、 を実行してifft
から、ウィンドウを反転し、ゼロを eps に置き換えてから、サンプルをマージして戻します (abs
パイプラインのあちこちで試します))。ノイズのみを取得します。
ifft
は、無限精度の算術演算、無限に多くのサンプルなどと逆であることを知っていfft
ます (右?) 私は 64 ビットの浮動小数点と 44kHZ のサンプル レートで作業しています。しかし、少なくとも元のオーディオを聞くことができると期待しています。
私のエラーは実用的ですか、それとも理論的ですか? バグの場合は、コードを提供できます。