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

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

2
FFTでスペクトルリークが発生するのはなぜですか?
グーグルやウィキペディアで試してみましたが、「入力信号の周波数が2つのビンの間にあるため」という以外の答えは得ていません。 これが理由であると理解していますが、理解できないのは、漏れが隣接する1つのビンだけではなく、いくつかの隣接するビンにまで及ぶように見える理由です。 私が話していることを説明するために、シミュレートされたデータをいくつか示します(投稿の最後のコード): 上記は、周波数10の正弦波のFFTスペクトル(対数スケールでプロット)です。サンプリングレートは1、サンプル数は100です。グラフはFFTシフトされています。ビン10には明らかにピークのみがあり、残りは数値誤差のオーダー、またはその付近にあります。 これは、10.1の生成された周波数での周波数スペクトルです。明らかに、すぐ隣のビンよりも多くのビンへの「漏れ」があります。 これは、周波数10.5のプロットです。 質問:この漏れがあるのはなぜですか。また、すぐ隣のビンではなく、他のすべてのビンに広がっているのはなぜですか? 興味のある人のためのコード(Pythonコード) import numpy as np import matplotlib.pyplot as plt xFreq = 10.5 xSize = 100.0 xPeriod = xSize/xFreq x = np.linspace(1,xSize,xSize) data = np.sin(2*np.pi*x/xPeriod) fft = np.fft.fft(data) fft = np.fft.fftshift(fft) fig = plt.figure() ax = fig.add_subplot(111) ax.plot(abs(fft), "o") ax.set_yscale('log') plt.show() 私は変更xFreqの価値を10.0する10.5など、

3
非対称ウィンドウを使用したFFT?
一般的な非矩形ウィンドウ関数はすべて対称に見える。FFTの前に非対称ウィンドウ関数を使用したい場合はありますか?(FFTアパーチャの片側のデータがもう一方のデータよりも少し重要である、またはノイズが少ないなど) もしそうなら、どんな種類の非対称窓関数が研究されており、それらは(より損失の多い)オフセット対称窓と比較して周波数応答にどのように影響しますか?

3
解析中(DFT)ではなく、合成中(IDFT)に大きさが正規化されるのはなぜですか?
私が見たほとんどの例とFFTコードでは、順方向DFT操作の出力(周波数の大きさ)はNでスケーリングされます-つまり、各周波数ビンの大きさを与える代わりに、N倍の大きさを与えます。 運用上、これは単純に、各基底正弦と信号の内積をとることによってDFTが計算されるためです(つまり、非正規化相関)。しかし、それはなぜ出力を返す前に単にNで割らないのかという哲学的な質問には答えませんか? 代わりに、ほとんどのアルゴリズムは再合成時にNで除算します。 これは私には直観に反しているように思われ、(私が何かを見逃していない限り)DFTのすべての説明を非常に混乱させます。 私が思いつくすべてのシナリオで、実際の大きさ(大きさ* Nではなく)はDFT操作に必要な値であり、正規化された大きさはIDFT操作に入力する値です。 なぜDFTはDFT / Nとして定義されておらず、IDFTは正規化された大きさの正弦波の単純な合計として定義されていないのですか?

4
FFTからスペクトル平坦性をどのように計算しますか?
さて、スペクトルの平坦性(ウィーナーエントロピーとも呼ばれます)は、スペクトルの幾何平均と算術平均の比として定義されます。 ウィキペディアおよび他の参考文献は、パワースペクトルを述べています。それはフーリエ変換の二乗ではありませんか?FFTは「振幅スペクトル」を生成し、それを二乗して「パワースペクトル」を取得しますか? 基本的に、私が知りたいのは、spectrum = abs(fft(signal))これらのどれが正しいですか? spectral_flatness = gmean(spectrum)/mean(spectrum) spectral_flatness = gmean(spectrum^2)/mean(spectrum^2) ウィキペディアの定義は大きさを直接使用しているようです: Flatness=∏N−1n=0x(n)−−−−−−−−−√N∑N−1n=0x(n)N=exp(1N∑N−1n=0lnx(n))1N∑N−1n=0x(n)Flatness=∏n=0N−1x(n)N∑n=0N−1x(n)N=exp⁡(1N∑n=0N−1ln⁡x(n))1N∑n=0N−1x(n) \mathrm{Flatness} = \frac{\sqrt[N]{\prod_{n=0}^{N-1}x(n)}}{\frac{\sum_{n=0}^{N-1}x(n)}{N}} = \frac{\exp\left(\frac{1}{N}\sum_{n=0}^{N-1} \ln x(n)\right)}{\frac{1}{N} \sum_{n=0}^{N-1}x(n)} ここで、x(n)x(n)x(n)はビン番号nnn大きさを表します。 SciPyのドキュメントでは、パワースペクトルを次のように定義しています。 入力aが時間領域信号であるA = fft(a)場合、np.abs(A)は振幅スペクトルでnp.abs(A)**2あり、パワースペクトルです。 このソースは、「パワースペクトル」の定義について同意し、それをと呼びます。Sf(ω)Sf(ω)S_{f}(\omega) FT(ω)FT(ω)F_{T}(\omega) Sf(ω)=limT→∞1T∣FT(ω)∣2.Sf(ω)=limT→∞1T∣FT(ω)∣2.\displaystyle S_{f}(\omega) = \lim_{T \rightarrow \infty} \frac{1}{T}{\mid F_{T}(\omega)\mid}^2. このソースは、に関してWienerエントロピーを定義します。S(f)S(f)S(f) しかし、このような方程式では二乗は見られません。これは振幅スペクトルに基づいているようです: Sflatness=exp(1N∑klog(ak))1N∑kakSflatness=exp⁡(1N∑klog⁡(ak))1N∑kak S_{flatness} = \frac{\exp\left(\frac{1}{N} \sum_k \log (a_k)\right)}{\frac{1}{N} \sum_k a_k} 同様に、別のソースはパワースペクトルに関してスペクトルの平坦性を定義しますが、FFTビンの大きさを直接使用します。これは、上記の「パワースペクトル」の定義と矛盾するようです。 「パワースペクトル」は、人によって異なることを意味しますか?


1
ホワイトノイズの位相および振幅応答とは何ですか?
周波数領域でホワイトノイズを作成し、Pythonを使用して時間領域に変換します。問題を理解するために、時間領域でホワイトノイズを生成し、それを周波数領域に変換しました。 import scipy.signal as sg import numpy as np import matplotlib.pyplot as plt e = np.random.normal(0,1,1e3) E = sg.fft(e) plt.figure("Bode plot") plt.subplot(211) plt.title("Magitude") plt.plot(abs(E)) plt.subplot(212) plt.title("Phase") plt.plot(np.angle(E)) plt.show() 私は期待したようにまったく見ていない: 質問: ホワイトノイズの振幅応答はフラットになるはずではありませんか?(すべての周波数で等しい量) 標準偏差(私の例では1)と振幅と位相の関係は何ですか? 前もって感謝します!
16 fft  noise  python 

7
FFTを高速化するDFTとFFTの違いは何ですか?
私はFFTを理解しようとしていますが、ここに私が持っているものがあります: 波形内の周波数の大きさを見つけるには、2つの異なる位相(sinとcos)で、波形に検索対象の周波数を掛け、それぞれを平均化することにより、周波数を調べる必要があります。フェーズは2つとの関係によって検出され、そのためのコードは次のようなものです。 //simple pseudocode var wave = [...]; //an array of floats representing amplitude of wave var numSamples = wave.length; var spectrum = [1,2,3,4,5,6...] //all frequencies being tested for. function getMagnitudesOfSpectrum() { var magnitudesOut = []; var phasesOut = []; for(freq in spectrum) { var magnitudeSin = 0; var magnitudeCos …
16 fft  dft  algorithms 

2
幾何学的に間隔を空けたビンを使用したDFT?
従来の離散フーリエ変換(DFT)とその従兄弟であるFFTは、等間隔のビンを生成します。つまり、最初のビンの最初の10ヘルツ、2番目のビンの10.1から20などのようになります。しかし、少し違うものが必要です。各ビンでカバーされる周波数の範囲を幾何学的に増やしたいです。1.5の乗数を選択するとします。次に、最初のビンに0〜10があり、2番目のビンに11〜25、3番目に26〜48などが必要です。この方法で動作するようにDFTアルゴリズムを変更することは可能ですか?
16 fft  dft 

1
FFTスペクトルを使用して類似の音楽を見つける
さまざまなジャンルの音楽を含むライブラリ内の類似の曲を一致/検索する方法を見つけるために、数週間実験してきました。 私の最初の試みは、テンポなどの機能または曲に含まれるベースの数を検出してグループを形成することでしたが、歌のビートの約20%をカウントする必要がないため、このアプローチ(ボリューム変更ベースのビート検出)にはあまり行きませんでした常に、時にはそれらの1/2または1/3であり、私はそれを実装できませんでした。 数週間失敗した後、私はこの投稿で後述する新しいアイデアを得ました。簡単に言うと、ファイルのスペクトルサンプルを取得して、ファイルの「平均スペクトル」のようなものを作成して比較します。背後にあるアイデアは、たとえば、Hardstyleには通常のロックミュージックよりもはるかに多くのベースがあるということでした。また、Audacityのいくつかのスペクトラムを見て、これを確認しました。 ファイル1:完全なファイルFFTスペクトルの取得(2048サンプルサイズatm、振幅ログ、スケーリング) すべてのスペクトル配列を合計し、各ビンの平均を取る 同じいくつかの他のファイルを実行し、すべての結果を保存します ファイル1と他のファイル間のFFT値の差異リストを作成する ファイル1とファイルXの差を平均化する これらの平均で昇順で並べ替え 「差異値」が最も低い曲は類似していると見なされます。 これが私のアイデアを実装するための正しい/良い方法であるかどうか、良い知識を持っているあなたの一部は私に言うことができますか?
16 audio  fft  music 

2
FFTの実数部が画像を回転+オリジナルに変換するのはなぜですか?
私はこの画像を読みました: 画像を正確に戻すために、FFT(2D)を取得してから、逆FFTを取得しました。参照用にコードが提供されています。 imfft = fft2(photographer); im = uint8(ifft2(imfft)); imshow(im); %Output is same image しかし、フーリエを変更して実際の部分のみを使用すると、 imfft = real(fft2(photographer)); im = uint8(ifft2(imfft)); imshow(im); 私はこのような画像を取得します(サイズの変更は無関係であり、Matlabの図ハンドラから保存するためだけであることに注意してください): 誰かがその背後にある理論(数学)を説明できますか?ありがとう

5
FFTを使用してFIRフィルターを設計する際の問題は何ですか?
畳み込みのフィルターカーネルを使用して「第一原理」から設計されたFIRフィルターと、FFTを使用して2つの方法のいずれかで設計されたフィルター(以下を参照)の関係を理解し​​ようとしています。 私の知る限り、FIRフィルターのインパルス応答は、フィルターの畳み込みカーネルと同じです。(間違っている場合は修正してください。) また、私の理解では、FIRフィルターのインパルス応答の成分周波数(すなわち、フーリエ変換)は、フィルターの周波数応答と同じものです。したがって、逆フーリエ変換によりインパルス応答が返されます(繰り返しますが、間違っている場合は修正してください)。 これにより、2つの結論に導かれます(位相応答を無視するか、線形位相応答を仮定します)。 目的の周波数応答を「描画」し、IFFTを使用してインパルス応答を取得し、それを畳み込みカーネルとして使用することにより、任意の周波数応答のFIRフィルターを設計できるはずです。 あるいは、入力信号のFFTを取得し、周波数領域で希望する任意の周波数応答を乗算し、結果のIFFTを取得して出力信号を生成することにより、フィルターを作成できる必要があります。 直感的には、1と2は同等のように感じますが、それを証明できるかどうかはわかりません。 人々(およびDSPの文献)は、ChebyshevやRemezなどの複雑な(私にとっては)アルゴリズムを使用して、事前定義された応答を使用してFIRカーネルを設計するためにかなりの時間を費やしているようです。 可能なすべてのFIRカーネルにFFT / IFFT変換が存在する場合、なぜこれらの長さにするのですか? 必要な正確な周波数応答を単純に描画し、IFFTを実行すると、FIRカーネルがあります(上記の方法1)。

3
高速フーリエ変換-FFTアパーチャの非整数のサイクル数
このサイト(eletronics.se)には、フーリエ変換の理論に関する優れたディスカッションスレッドと回答がいくつかあります。シミュレーションツール(MS Excel :))で同じを実装してみました。 同じことに関して、いくつかの解釈と実装の問題があります。50 Hzの電圧波形を解析しようとしています。ただし、以下のデータは、メモリおよび処理能力に制約のある16ビット組み込み低コストプロセッサで実装するための概念的なフレームワークを確立しようとするダミーデータです。 ETA(2012年5月30日) TL; DRバージョン: electronics.seでは言うまでもありませんが、メモリと処理能力に制約のある組み込みプロセッサを使用しています。 ここにはまだ答えられていないいくつかの質問があります: アルゴリズムのメモリフットプリントを大幅に増やすことなく、所有しているサンプルでウィンドウイングを実行する方法は?私はDSPを初めて使用するので、これらを基本的なステップバイステップの説明にしてください。 41のサンプルを補間して32を導出すると大きさが半分になったのに、64を導出するために補間したときに(ノイズを除いて)そのままだったのはなぜですか? DSPの初心者にとって実用的な優れた回答が得られることを期待して、質問に対する報奨金を宣言しています。 実験1: 時間領域入力 私は、正弦波用いて生成 64個のサンプルを生成するために。次に、30%3 r d高調波、20%5 t h高調波、15%7 t h高調波、10%9 t h高調波、20%11 t h高調波を追加しました。これにより、次のサンプルが作成されました。罪(2 N π/ 64)罪⁡(2nπ/64) \sin(2n \pi /64) 3 r d3rd3rd5 のT H5th5th7 のT H7th7th9 のT H9th 9th 11 のT H11th 11th 0, 0.628226182, 0.939545557, …
15 fourier  fft 

4
FFTでより低い周波数が強い?
マイク入力からFFTを計算しています。低い周波数は常に高い周波数よりもパワーが大きい(dBが高い)ように見えることに気付きます。 データを24576バイト(4096 * 6)のフレームにカットしました。 ハミングウィンドウの適用: input[i] *= (0.54d - 0.46d*(double) Math.Cos((2d*Math.PI*i)/fs)); FFTWを通してそれを実行しますProcess1D()。 複素数から変換する: output[i] = 10.0 * Math.Log10((fout[i * 2] * fout[i * 2]) + (fout[i * 2 + 1] * fout[i * 2 + 1])); 6つの値を平均して、4096バイトの完全なFFTを取得します。 きれいな絵(パレットにマッピングされた色)を塗ります。 平均化(pt。5)は、FFTノイズを低減するために行われます。 画像は、音とマイクをオフにした状態で表示されるため、低周波数ではより多くのエネルギー(およびノイズ)が発生します。これは、マイク/サブの問題だけではないことを示しています。 私の質問: 1.これは予想されますか?どうして? 2.これを修正する標準的な方法はありますか?いくつかのMath.Tan()マジックが、それが属する場所を持ち上げることができるように見えます。 私の目標は、デフォルトで低い周波数が勝つことなく、上位5つの周波数を識別できるようにすることです。
15 audio  fft 

4
周波数ビンとは何ですか?
私はFFT法の研究を行っており、常に出てくる用語は「周波数ビン」です。私が理解していることから、これは与えられた正弦波の周波数の周りに作成された帯域と関係がありますが、私は実際にどのように理解することができません。また、特定のビンから関連する周波数に移動する方法も考えましたが、周波数ビンとは何なのかまだわかりません。
15 fft 

3
FFTによる高速コサイン変換
高速コサイン変換を実装したい。ウィキペディアで、FFTと同様に計算されるDCTの高速バージョンがあることを読みました。Scipyでも使用されているFTPACKおよびFFTWの実装について、引用されたMakhoul *の論文を読みましたが、実際のアルゴリズムを抽出できませんでした。これは私がこれまでに持っているものです: FFTコード: def fft(x): if x.size ==1: return x N = x.size x0 = my_fft(x[0:N:2]) x1 = my_fft(x[0+1:N:2]) k = numpy.arange(N/2) e = numpy.exp(-2j*numpy.pi*k/N) l = x0 + x1 * e r = x0 - x1 * e return numpy.hstack([l,r]) DCTコード: def dct(x): k = 0 N = x.size …
15 fft  dct 

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