タグ付けされた質問 「fft」

高速フーリエ変換は、離散フーリエ変換(DFT)とその逆を計算する効率的なアルゴリズムです。

3
歪み補償フィルターの作成方法
複雑なミキサー、CICデシメーター、およびFIR補償/デシメーションフィルターで構成されるチャネライザーを作成しています。最終的なFIRフィルターは、必要に応じて、複数のフィルターとして実装できます。 私の質問は、CICフィルターの非常に平坦でない周波数応答を補償するようにフィルターを設計するにはどうすればよいですか?CICの応答の逆数を計算して必要な周波数応答を作成し、それを逆FFTに通してインパルス応答を取得しますか? ご覧のとおり、私の特定の問題はCICフィルターに関連していますが、私の質問は、どのような種類の歪み補償フィルターを作成するかということです。 御時間ありがとうございます。

4
基数4 FFTと基数2
基数4の実装は、同等に適切にコーディングされた基数2 FFTよりも高速ですか?もしそうなら、なぜそれはより速くなりますか?
10 fft 

2
単純にデータをスケーリングすることによって振幅(およびおそらくFFT品質)を増やすことは有効ですか?
Mark Borgerdingによる "KISS FFT"のバージョンを使用しています。これは、16ビットの固定小数点入力値の配列を受け入れ、32ビットの浮動小数点結果配列を生成します。 入力振幅が低い場合、フロートの結果の値の多くがゼロになることがわかりましたが、単純に入力をスケーリングすると(たとえば、因数16)、出力値が少なくなるため、出力に含まれるようになりますより詳しく。(それは私の目的にとってあまり重要ではありませんが、一貫性のために、結果の浮動小数点値を同じスケーリング係数で除算します。) とにかく、これは機能しているように見えます。以前はほぼすべてゼロのバッファを取得していたのに結果を生成するという意味でですが、何らかの理由があり、有効なアプローチではないのではないかと思っています。 (このアプローチは、データの「粗さ」/粒度がはるかに多いことを意味します。特に、通常は存在する低レベルのノイズは存在しません。注入するのが賢明かどうか、ほとんど疑問に思っています。入力のゼロ値を置き換えるための低レベルのノイズ。)
10 fft 

3
クロマサブサンプリング:データレートを適切に計算する方法
たとえばY'UV画像でクロマサブサンプリングを利用するときにデータレートを計算する方法を理解するのに苦労しています。 以下の計算例があります。 画像解像度:352*288 周波数:25 fps 以下のために(:4:4 4)以下のように計算例を行きます: (352px * 288px) * 3 color channels * 25 fps * 8 bit = 60 825 600 bit/s ここまでは順調ですね。 しかし、今来る(4:2:0): (352px*288px) * 1.5 color channels * 25 * 8 = 30 412 800 bit/s さて、この例を例(4:1:1)に変換しようとすると、1.5カラーチャネルの比率がどのように計算されるかを正しく理解しているかどうかわかりません。 計算の最初の推測は(4:2:0)の場合でした: 2/4*3=1.5 color channels 同様に(4:1:1)の場合、カラーチャネルの比率を次のように計算します。 1/4*3=0.75 color channels …

1
スペクトログラムの作成
私はこのタスクのロジックを考え出そうとしており、KissFFTソースパッケージを使用して高速フーリエ変換を実行することを計画しています。これが正しいと思われる場合はお知らせください: FFT構造を割り当てます。私が使用しているウィンドウサイズはkiss_fft_alloc(N,0,NULL,NULL) どこですかN。入力バッファはN、タイプの要素の配列になりますkiss_fft_scalar。出力バッファはN/2 + 1、タイプの要素の配列になりますkiss_fft_cpx。 NPCMサンプルの数(ウィンドウサイズ)をデコードします。 各PCMサンプルについて、各チャネルの振幅(符号なしサンプル)を平均し、0から2にスケーリング(65536.0で除算)して、結果を入力バッファーに格納します。 入力バッファでウィンドウ処理(つまり、ハニング)を実行します。 入力バッファーで高速フーリエ変換を実行し、出力バッファーに格納します。実際の値を入力として使用しているため、を使用できますkiss_fftr()。 N/2出力値については、変換されたデータの2乗された大きさを取得し、次の式を使用して値をdBスケールに変換します。 10 * log10 (re * re + im * im) N/2手順6 の値をプロットします。 入力バッファの前半を破棄し、次の(ウィンドウサイズ/ 2)PCMサンプルをデコードして、データのスケーリングとウィンドウ処理を実行します。これにより、入力ウィンドウが効果的にスライドし、処理されたPCMサンプルの計算をやり直す必要がなくなります。 ステップ5にループし、すべてのサンプルが処理されるまでこれらのステップを繰り返します。 使用済みメモリをから解放しkiss_fft_alloc()ます。 FFTを実行する前に、入力ウィンドウから値を減算して、結果のDC値の大きさがゼロになるようにすることが提案されました。入力データから平均または平均を差し引くべきですか? また、ウィンドウサイズを選択するときに考慮する必要があることは何ですか?それ以外に、KissFFTの指示に従って偶数にする必要がありますが、小さなウィンドウサイズを使用することには利点があります。それはより良いグラフを提供しますか?ウィンドウサイズを大きくすると、実行する必要があるFFTの数が減ると思いますが、ウィンドウサイズを大きくすることの唯一の利点は何ですか。 xxx 提供できるあらゆるガイダンスを事前に感謝します。

2
複雑な信号のパワースペクトルで負の周波数をどのように処理しますか?
私たちは、実際の信号にDFT演算を適用するとを得るためにX [ kは]、その後の正方形の大き取るX [ kは]、| X [ k ] | 2、パワースペクトルは対称です。X [ k ]の周波数情報として、正の周波数または負の周波数を使用できます。x[n]x[n]x[n]X[k]X[k]X[k]X[k]X[k]X[k]|X[k]|2|X[k]|2\lvert X[k]\rvert^2X[k]X[k]X[k] ただし、これは複雑な値の信号には当てはまりません。パワースペクトルは対称的ではありません。 この場合、元の信号の周波数成分をどのように決定しますか? 負の周波数部分だけを落とせますか?

2
相互相関プロットから何が得られますか?
以下に示すように、ノイズの影響を受ける2つのオーディオ信号x(t)とy(t)があると仮定します。そして、これら2つの信号を相互相関させ、相互相関プロットを以下に示します。 この相関プロットには、約-11ミリ秒にピーク値があります。このプロットでこのピークをどのように解釈するかを理解しようとしていますか?どういう意味ですか?相関関数のフーリエ変換から何が得られるかについても教えてください。 前もって感謝します!

2
FFTのアーティファクト
最近、FFTは完全ではないことに気付きました。信号を取得してからFFTを取得してから逆FFTを実行すると、結果の出力は入力とまったく同じにはなりません。ここに私が何を意味するかを示す画像があります: 画像はかなり自明だと思います。IFFT信号は「FFT​​スペクトル」の逆変換であり、「差分」プロットはIFFT信号と元の信号の差です(IFFT-オリジナルIFFT-オリジナル\text{IFFT - Original})。 明らかに小さいのですが、いくつかのアーティファクトがあります。そもそもなぜ発生するのか知りたい。これはフーリエ変換の有限ウィンドウのためですか?または、FFTアルゴリズムの何かのためですか? 注:このプロットには32ポイントがありますが、100、1000、1024、256、および64ポイントで確認しました。同様の大きさの差(またはいずれか)には常にこの残差があります。)。10− 1610−1610^{-16}10− 1510−1510^{-15}

1
FFTを使用して加速度計のジェスチャーを解釈できますか?
加速度計のデータを見ているときに発生する2つの異なるジェスチャーを検出する必要があります。以下がその概要です(私ができる限り簡単に): iPhoneが表を上にしたまま、前後に振動しているとしましょう。ユーザーは、1つの振動(前方または後方に1回、ジェスチャー1)または任意の時間の継続的な振動(ジェスチャー2)を実行できます。 現在、私のコードは、最後の50フレームからのデバイスの加速度計データ(y軸)のリストを保持しています。このデータごとにFFTアルゴリズム(これはhttp://goo.gl/yi3mn)を実行してから、指定された周波数領域を解釈しようとします。私は振動の速度と周波数空間の中低域のパワーとの間に強い関係があることに気づきました。 問題は、(動きが画面上で何かをアニメートするときにリアルタイムで)直前に完了した振動が単一のものか、それとも反対方向に別の振動が続くものかを検出する必要があることです。ここで、加速度計はプレッシャープレートで機能することを指摘しておきます。発振が停止すると、入力データは発振が実行されていたときと反対の値を示します。これにより、1回の前進運動と2回の前進運動とその後の運動運動(最初の各振動の終わり)の明らかな違いを確認することが困難になります。 上記のジェスチャーの違いを伝えるために使用できる正確な大きさの値(または何か他の便利なもの)をFFTを使用して解読する方法を誰かが提案できますか? 使用しているデータをテキストファイルに記録しました。これは、加速度計入力のy軸に沿った生データ(g力の値)です。 http://pastebin.ca/2108123は、2つの特異な振動のデータを示しています(デバイスを最初、最後、および2つの振動の間で静止させています)。 注:20振動の新しい生データがアップロードされていますが、まだプロットされていません。 http://pastebin.ca/2108387は、20回の連続振動のデータを示しています(デバイスを最初と最後で動かさないでください)。
10 fft 

1
FFT後のデータの単位は何ですか?
磁力計は、マイクロボルト(mV)単位の出力で、磁場の導関数、つまりdB / dtを測定します。サンプリングレートは128 Hzなので、2分間データを収集すると、ポイント(離散ケース)になります。これらの時系列でFFTを実行すると、変換後の振幅密度の単位はどうなりますか?2 × 60 × 128 = 153602×60×128=153602 \times 60 \times 128=15360

3
ウィンドウのゲインを修正するのは慣習ですか?
ハニングウィンドウの定義方法を考えます。 0.5 - 0.5 * cos(n*2*Pi/(N-1)) この定義により、ゲインは0.5になり、これは単に係数の平均値です。対照的に、定義されているフラットトップウィンドウは、おそらく設計上、ユニティゲインを持っています。 ハニングウィンドウを2倍に拡大するのが適切と思われますが、これがどこかで議論されたことはありません。ユニティゲインを得るために、すべてのウィンドウをスケーリングする必要があるようです。 実際には、ウィンドウは通常、ゲインに対して補正されていますか?そうでない場合、なぜでしょうか? 編集: 誰も答えを出していないので、少し詳しく説明します。 より一般的なウィンドウの利点を報告する論文を見つけるのは非常に簡単です。しかし、スペクトル分析に使用する前にゲインを修正することについて言及している人を見たことはありません。多分私はいつもその声明を見逃していたか、誰もがゲイン修正が明白な要件であると想定しています。 信号のエネルギーレベルが維持されるように、ウィンドウのゲインを1に設定するのは常識のようです。さらに、1つがフラットトップのように0 dBのゲインを持ち、もう1つがガウスのように10 dB近くの損失を持っている場合、さまざまなウィンドウの振幅精度をどのように比較できますか。 ウィンドウはFIRフィルターの設計にも広く使用されています。このアプリケーションでは、ウィンドウ処理される信号(sincパルス)のほとんどのエネルギーがウィンドウの中心にあることは明らかです。その結果、ウィンドウはsincパルスの総エネルギーを減らすためにほとんど機能しません。したがって、フィルター設計に使用する場合、フラットトップを除くほとんどのウィンドウのように、ユニティゲインではなく、ユニティピーク振幅が必要です。単一のピーク振幅以外のものは、結果のFIRフィルターのゲインに影響します。

3
FFT位相スペクトルに困惑!
非常に単純なMATLAB実験: f = 200; fs = 1000; t = 0: 1/fs : 1; x = cos(2*pi*f*t); plot(angle(fftshift(fft(x)))); そしてここに出力があります: ここで、上記のコードスニペットに小さな変更を加えました。次のように、期間を1サンプルだけ短縮します。 f = 200; fs = 1000; t = 0: 1/fs : 1 - 1/fs; x = cos(2*pi*f*t); plot(angle(fftshift(fft(x)))); そして、位相スペクトルは完全に狂っています: 質問: 最初のプロットでは、この例では200の正の周波数に対応するビン700にゼロ位相が表示されることを望んでいました。それはそうではないようです。次に、プロット1のグラフの線形部分がわかりません。いわゆる数値ノイズが原因で存在する可能性のある位相成分を理解していますが、そのノイズはどのようにして位相が「線形」になるのでしょうか。 2番目のプロットで、1つのサンプルのみを削除すると、位相プロットにそのような劇的な影響が出るのはなぜですか? ここで根本的に間違っていることをしていますか?
9 fft  matlab  phase 

3
ライブオーディオ入力で笛、ポップ、その他の音を検出するにはどうすればよいですか?
私はSOに関する多くの質問を読みました、そして率直に言って、それらのそれぞれはそれについて取り組む特定の方法を説明していません。「FFTを実行する」や「ゼロクロッシング」などと言う人もいます。しかし、デジタルオーディオ入力が特定の周波数の振幅の配列で構成されていることを理解しているだけです。それを超えて。 今私はナイキストの定理、周波数、振幅、フーリエ級数などを知っています、そしてそれは私がいくつかの学期の大学のプログラムでそれをした2-3年前からです。しかし、当時はフーリエの実際の使用法についてはあまり教えられていませんでした。私は、主題を理解するのに十分なことを学ぶだけで、その主題についてさらに掘り下げることはありませんでした。しかし、今、私はそれらすべてのものを使わなければならないつもりです。 これが私が検出しようとしている音のスナップショットです: 明らかに、サウンドにはユニークなグラフがあります。グラフ内の独特のとがった線から特定の特有の特性を抽出する方法を理解したいだけです。どのような振幅、周波数など。そしてどのくらいの時間-それは些細なことですが私は推測します。 わかりやすい説明リストを使って簡単な手順を教えてください-理解できない用語をググググできます。 たぶんこれ?- 入力オーディオデータを取得する スペクトログラムをプロットする ノイズのない環境で検出したいサウンドのスペクトグラムグラフを取得する そのグラフを研究する-その音のユニークな特性を描く (4)で見つかったサウンドの特性を使用して、ライブオーディオフィードでこれらの特定の特性を検出できるある種の関数を作成します 一致が見つかった場合、まあ-仕事は完了です。 アルゴリズムを磨いて、偽陰性を取り除きます。 ああABBBバツバツXZZZ 保存したい音を静かな環境でジェスチャーとしてユーザーに録音してもらうことを考えていました。そして、ユーザーは静かな時間のパディングの間だけで音を出します。録音の最初と最後に3秒。 つまり、最初の3秒間、私のシステムは現在の入力が通常の静かなバックグラウンドサウンドであることを確認します。そして、グラフの突然の変化は音声入力の開始になります。そして、それが停止すると、録音はさらに3秒間続き、その後に静かな時間のパディングが続きます。これはユーザーが手動で行います。次に、パディング時間の間のどこかで、グラフの突然の変化が続いた部分のみの特性を自動的に保存します。 したがって、その部分の特性はそのサウンドのジェスチャーデータとして保存され、後でライブオーディオフィードでその特定のサウンドを検出するために使用されます。 問題は、これらすべてを平易な英語で考えていることです。コードで効率的に実装できるように、数学と物理学について考える必要があります。何を書いてコードのどこに書けばいいのかまったくわからないのですが、SOに関する非常に多くのライブラリと質問があっても、自由に使えます。 これが長かったらごめんなさい。

4
正弦波の代わりに三角波を使用したDFTのような変換
DFT(離散フーリエ変換)は、信号を正弦波の複数の周波数に分解することを知っています。同じことを行うが、三角波の変換はありますか? 私の目的では、1次元信号(電圧など)についてのみ話します。私は過去の株式市場データを研究していますが、特定の株の反転について調べたいだけです。つまり、この変換を使用して株価の「ローパス」を実行したいのです。 編集:はいの場合、どうすればよいですか?
9 fft  dft  transform 


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.