問題タブ [dft]
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.
python - Python での DFT は、C よりも大幅に時間がかかります
現在、いくつかの C コードを Python に変換する作業を行っています。このコードは、電波天文学で使用される CLEAN アルゴリズムから生じるエラーを特定するために使用されています。この分析を行うには、強度マップ、Q ストークス マップ、U ストークス マップのフーリエ変換の値を特定のピクセル値 (ANT_pix で指定) で見つける必要があります。これらのマップは 257*257 配列です。
以下のコードは、C で実行するには数秒かかりますが、Python で実行するには数時間かかります。私のPythonの知識はかなり貧弱なので、それがひどく最適化されていると確信しています。
ご協力いただきありがとうございます。
更新私の質問は、Python でループを実装するより良い方法があるかどうかです。これにより、速度が向上します。可能であればPythonでネストされたforループを回避することを推奨するPythonに関する他の質問について、ここでかなりの数の回答を読みました。最適化されたループ。私はこれが難しい注文かもしれないことを理解しています!
今までは FFT を使ってきましたが、上司は DFT がどのような違いを生むかを知りたがっています。これは、通常、アンテナの位置が正確なピクセル値で発生しないためです。FFT を使用するには、最も近いピクセル値に丸める必要があります。
私は Python を CASA として使用しています。電波天文学のデータセットを削減するために使用されるコンピューター プログラムは Python で記述されており、Python スクリプトを実装するのは C よりもはるかに簡単です。
オリジナルコード
c++ - OpenCV での逆フーリエ変換
私は OpenCV と画像処理アルゴリズムの初心者です。C++ の OpenCV で逆離散フーリエ変換を行う必要がありますが、方法がわかりません。インターネットで検索しましたが、答えが見つかりませんでした。このページのコードを使用して、プログラムでフーリエ変換を行っています: http://opencv.itseez.com/doc/tutorials/core/discrete_fourier_transform/discrete_fourier_transform.html。そのコードとは逆のことをしようとしましたが、どこが間違っているのかわかりません。私のコードはここにあります(コード全体が間違っていると思います):
neural-network - ニューラルネットワークはフーリエ変換を理解できない?
ニューラルネットワークについていくつか理解しようとしています。まず、Web を調べてみると、ニューラル ネットワークを介して (離散) フーリエ変換を計算する方法がないようです。変換用のフーリエ定数を含めるようにハードコーディングすることでハッキングし、適切な結果を得ることができます。なぜ機械はこれらを自分で判断できないのでしょうか?
matlab - Matlab でのフーリエ変換の減少
matlab で fft mix radix を書くように求められましたが、その前に離散フーリエ変換を簡単な方法で実行させたいと思っています。そこで、ウィキペディアで定義されているように定義された式に従ってコードを書くことにしました。
【申し訳ありませんが、画像の投稿はまだ許可されていません】
http://en.wikipedia.org/wiki/Discrete_Fourier_transform
だから私は次のように私のコードを書きました:
ただし、私のコードは、この Web サイトの結果とは異なる結果を出力しているようです: http://www.random-science-tools.com/maths/FFT.htm
問題がどこにあるかを正確に検出するのを手伝ってもらえますか?
ありがとうございました!
============私のコードが正しいように見えることを気にしない....
python - DFTを繰り返すと、異なる結果が得られます
作成した他のコードで使用できる単純な積分関数とDFT関数を作成しました。
このコードは、予想される250値に近い249.028500022の出力を提供します。ただし、DFTを繰り返すと、4での変換に対してまったく異なる値が得られます。
このコードの出力は次のとおりです。00.0514628731431
0.1 0.0514628731431
0.2 0.0514628731431
。。。。
4.0 0.0514628731431
。。。。
9.8 0.0514628731431
9.9 0.0514628731431
10.0 0.0514628731431
誰かがこの問題の原因を教えてもらえますか?前もって感謝します。
注:現時点では、より効率的なfft関数を使用する必要はありません。サンプルサイズは大きくないので問題ありません。
c++ - C ++ STLを使用したDFT(離散フーリエ変換)
この配列のDFTを計算しようとしていますx_1
。非常に単純なはずですが、私の値は低すぎます。私のコードの何が問題になっていますか?
他の例へのリンクはありません。自分のコードの修正を探しているだけです。
opencv - FFTW 対 OpenCV cvDFT
OpenCV の cvDFT (http://goo.gl/YCHj0) の代わりに FFTW (http://www.fftw.org/) を使用すると、高速化を期待できますか?
私のプログラムの実行時間は、逆 DFT と順 DFT の適用によって大きく左右されます。OpenCV cvDFT の代わりに FFTW を使用することを考えています。
IIRC FFTW はある種の「ランタイム コンパイル」を行いますが、cvDFT は単純な FFT 実装であるため、処理が少し高速化されると思います。
ですから、自分で試してみる前に、誰かが同じ質問につまずいて以前に解決した場合に備えて、ここで質問することを考えました.
前もって感謝します
fft - FFTによる振動関数のフーリエ積分/フーリエ変換
f(x) = cos(x^2)
とg(k) = pi^0.5 cos((pi*k)^2 - pi/4)
はフーリエペアです。
g(k)
FFTを使ったフーリエ積分で再現したいf(x)
、つまり
概算Integrate[ f(x) * exp(2 pi * ikx), {x, -inf, inf} ]
とSum[ fn * exp(2 pi * ik x_n), {n, 0, N-1} ] * Delta_x
ただし、結果は、まったく一致する場合g(k)
、非常に狭いk
範囲でのみ一致します(同じコードは、ガウス関数などの滑らかなフーリエペアに対して適切に機能します)。N
問題はとの適切な値を選択することだと思いますDelta_x
。それらを選択する方法について確立されたルールはありますか?文学の関連トピックはどこにありますか(数値レシピのセクション13.9を読みましたが、問題が解決しないようです)?
c - openCVを使用したCの3d関数[ビデオ]の1d DFT
CプログラミングでGOP(写真のグループ、基本的にはビデオ)に沿って1d DFTを計算しようとしています。gopを一時的なdrquencyドメインに変換するには、時間方向に沿って1d DFTを適用する必要があります。このドメインでは、空間情報と時間周波数情報が同じフレームに存在します。
したがって、サイズ (M , N , T) のビデオ f(x, y, t) の 1D DFT は、M x N が各フレームのサイズであり、T が GOP 内のフレームの総数である場合、次のように計算されます。次の式:
openCVなどを使用してこれを処理する方法を知っている人はいますか?
追加情報が必要な場合は、お知らせください。
iphone - OpenCV cv::dft() iOS アサーション エラー
悪い意味で助けが必要です。私はこれに対する答えを1週間探しましたが、うまくいかなかったので、助けを求めてクロールしています.
私の目標は単純です。Xcode で OpenCV ライブラリを使用しようとしています。私はイライラする問題についていくつかのラウンドを抱えています。cvCanney と cvAdaptive Transforms でうまく動作するように OpenCV ライブラリを取得しましたが、cv::dft() を実行することができません。私は次のことを試みることから始めました:
これは、適切な形式 (CV_32FC1) ではないため、エラーになります。だから私はそれから試しました:
同じエラーが発生します。具体的には、次のエラーが表示されます。
Assertion failed (type == CV_32FC1 || type == CV_32FC2 || type == CV_64FC1 || type == CV_64FC2) in dft
元の質問の更新として、cv::type() を使用して型を判別しようとしましたが、type= 24 が返されました。この型の意味を解読する方法を誰かに説明してもらえますか? 間違ったタイプですか?最新の試行:
これを実行すると、tempMat のタイプが 24 になり、output2 のタイプが 5 になります。これを追加しようとすると:
エラーが発生します:Assertion failed (scn == 3 || scn == 4) in cvtColor
何か案は?RTFM の提案であっても、現時点では何でも受け入れます。助けてください。
ありがとうございました。