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

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


3
FFTビンをゼロにすることでフィルタリングするのはなぜ悪い考えですか?
FFTを実行し、いくつかのビンをゼロにしてからIFFTを実行することで、信号をフィルタリングするのは非常に簡単です。例えば: t = linspace(0, 1, 256, endpoint=False) x = sin(2 * pi * 3 * t) + cos(2 * pi * 100 * t) X = fft(x) X[64:192] = 0 y = ifft(X) 高周波成分は、この「ブリックウォール」FFTフィルターによって完全に除去されます。 しかし、これは良い方法ではないと聞いたことがあります。 なぜ一般に悪い考えですか? それが大丈夫か良い選択かという状況はありますか? [ pichenettesが示唆するとおり ]
72 fft  filters 

8
相互相関を実装して、2つのオーディオファイルが似ていることを証明するにはどうすればよいですか?
2つのオーディオファイルを相互相関させて、それらが類似していることを証明する必要があります。2つのオーディオファイルのFFTを取得し、それらのパワースペクトル値を別々の配列に格納しています。 それらを相互相関させて、それらが類似していることを証明するには、どのようにさらに進める必要がありますか?それを行うより良い方法はありますか?基本的なアイデアは、それを学び、適用するのに役立ちます。

9
DFTまたはFFTなしで周波数を見つけるためのアルゴリズムはありますか?
Androidアプリストアでギターチューナーを探していました。他のアプリよりも高速だと主張するチューナーアプリを見つけました。DFTを使用せずに周波数を見つけることができると主張しました(この仕様へのURLがあればいいのに)。 私はこれを聞いたことがありません。DFTまたはFFTアルゴリズムを使用せずに、オーディオ信号を取得して周波数を計算できますか?
34 audio  fft  frequency  dft 

3
加速度計データの正しいフィルターを選択する
私はDSPにかなり慣れていないので、Pythonで加速度計データを平滑化するためのフィルターの可能性について調査しました。発生するデータのタイプの例を次の画像に示します。 基本的に、このデータを平滑化して最終的に速度と変位に変換するためのアドバイスを探しています。携帯電話の加速度計は非常にうるさいことを理解しています。 データによって生成されたノイズを参照するためにデバイスを取得できないため、現時点ではカルマンフィルターを使用できるとは思わない(デバイスを平らに配置し、それらの読み取り値からノイズの量を見つけることが不可欠であると読んだか?) FFTは興味深い結果をもたらしました。私の試みの1つは、加速度信号をFFTし、次に低周波数をレンダリングして絶対FFT値を0にすることでした。次に、オメガ演算と逆FFTを使用して速度のプロットを得ました。結果は次のとおりです。 これは物事を進める良い方法ですか?信号の全体的なノイズ特性を削除しようとしていますが、約80秒などの明らかなピークを識別する必要があります。 また、元の加速度計データでローパスフィルターを使用するのも大変でした。これは、データを平滑化するのに非常に役立ちましたが、ここからどこに進むべきかわかりません。ここからどこへ行くかについてのガイダンスは本当に役立つでしょう! 編集:少しのコード: for i in range(len(fz)): testing = (abs(Sz[i]))/Nz if fz[i] < 0.05: Sz[i]=0 Velfreq = [] Velfreqa = array(Velfreq) Velfreqa = Sz/(2*pi*fz*1j) Veltimed = ifft(Velfreqa) real = Veltimed.real 本質的に、iveは加速度計データに対してFFTを実行し、シンプルなブリックウォールフィルターを使用して高周波数をフィルター処理してSzを出力しました(理想的ではないことを知っています)。次に、データのFFTでオメガ演算を使用します。また、私の画像を私の投稿に追加してくれたdatageistにも感謝します:)
28 fft  python 

5
信号を平滑化するこの単純な方法に専門用語はありますか?
まず、DSPを初めて使用し、実際の教育を受けていませんが、オーディオビジュアライゼーションプログラムを開発しており、一般的な周波数スペクトルビジュアライゼーションのように、FFTアレイを垂直バーとして表現しています。 私が抱えていた問題は、FFT値を直接マッピングしただけでは、オーディオ信号値の変化が速すぎて、心地よい視覚的な出力が得られないことでした。 したがって、結果を「滑らかにする」ために値に単純な関数を適用します。 // pseudo-code delta = fftValue - smoothedFftValue; smoothedFftValue += delta * 0.2; // 0.2 is arbitrary - the lower the number, the more "smoothing" つまり、現在の値を取得して最後の値と比較し、最後の値にそのデルタの一部を追加しています。結果は次のようになります。 だから私の質問は: これは、用語がすでに存在する、確立されたパターンまたは機能ですか?そうですか、用語は何ですか?上記の「スムージング」を使用していますが、これはDSPに特有の何かを意味し、正しくない可能性があることを認識しています。それ以外は、ボリュームエンベロープに関連しているように見えましたが、まったく同じではありませんでした。 これを解決するためのより良いアプローチやさらなる研究はありますか? これが馬鹿げた質問であれば、時間と謝罪に感謝します(他の議論を読んで、私の知識は平均よりもはるかに低いことを認識しています)。

4
ウェーブレット変換はどの時間周波数係数を計算しますか?
高速フーリエ変換かかりしながら、動作を高速ウェーブレット変換をとるO(Nを)。しかし、具体的には、FWTは何を計算しますか?O(NlogN)O(Nlog⁡N)\mathcal O(N \log N)O(N)O(N)\mathcal O(N) それらはしばしば比較されますが、FFTとFWTはリンゴとオレンジのようです。私が理解しているように、STFT(経時的な小さなチャンクのFFT)と複雑なMorlet WTを比較する方が適切です。なぜなら、それらは両方とも複雑な正弦波に基づいた時間周波数表現であるからです)。多くの場合、これは次のような図で示されます。 (別の例) 左は、時間が経過するにつれてSTFTが積み重ねられた一連のFFTである様子を示しています(この表現はスペクトログラムの原点です)。右は、ダイアディックWTを示しています。低周波数での解像度(この表現はスカログラムと呼ばれます)。この例では、STFTのは垂直列の数(6)であり、単一のO(N log N ) FFT演算は、N個のサンプルからN 個の係数の単一の行を計算します。合計は、それぞれ6ポイントの8 FFT、または時間領域で48サンプルです。NNNO(NlogN)O(Nlog⁡N)\mathcal O(N \log N)NNNNNN わからないこと: 単一の FWT操作で計算される係数の数と、上記の時間周波数チャートのどこに位置していますか O(N)O(N)\mathcal O(N) 単一の計算で塗りつぶされる長方形はどれですか? 両方を使用して時間周波数係数の等面積ブロックを計算すると、同じ量のデータが出力されますか? FWTはFFTよりも効率的ですか? PyWaveletsを使用した具体例: In [2]: dwt([1, 0, 0, 0, 0, 0, 0, 0], 'haar') Out[2]: (array([ 0.70710678, 0. , 0. , 0. ]), array([ 0.70710678, 0. …
26 frequency  fft  wavelet 

1
重複追加と重複保存
フィルタリングにオーバーラップ追加とオーバーラップ保存のどちらを使用するかを決定するために、どのような違いやその他の基準を使用できますか オーバーラップ加算とオーバーラップ保存の両方は、FIRフィルターカーネルによるデータストリームのFFTベースの高速畳み込みを行うためのアルゴリズムとして説明されています。遅延、計算効率、またはキャッシュの局所性(など)の違いはありますか?それとも同じですか?

1
Pythonの初心者向けのローパスフィルターとFFT
私は信号処理、特にFFTが初めてなので、ここで正しいことをしているかどうかはわかりませんが、結果に少し混乱しています。 離散的な実関数(測定データ)があり、その上にローパスフィルターを設定したい。選択するツールは、numpyパッケージを備えたPythonです。私はこの手順に従います: 私の関数のfftを計算する 高周波を遮断 逆fftを実行します 私が使用しているコードは次のとおりです。 import numpy as np sampling_length = 15.0*60.0 # measured every 15 minutes Fs = 1.0/sampling_length ls = range(len(data)) # data contains the function freq = np.fft.fftfreq(len(data), d = sampling_length) fft = np.fft.fft(data) x = freq[:len(data)/2] for i in range(len(x)): if x[i] > 0.005: # …

4
いびきと音声を区別する方法は?
背景: 私は(に言及したiPhoneアプリに取り組んでいる中で 、いくつかの 他 の記事)その1が眠っていると判断しながら呼吸/いびき「に耳を傾ける」「スリープラボ」の前の画面として(睡眠時無呼吸の兆候がある場合テスト)。アプリケーションは、主にいびき/息を検出するために「スペクトル差」を使用し、睡眠ラボの録音(実際には非常にノイズが多い)に対してテストすると、非常にうまく機能します(約0.85--0.90相関)。 問題: ほとんどの「ベッドルーム」ノイズ(ファンなど)をいくつかの手法でフィルタリングし、人間の耳では検出できないS / Nレベルで呼吸を確実に検出できることがよくあります。問題は音声ノイズです。バックグラウンドでテレビやラジオを走らせることは珍しくありません(または単に誰かが遠くで話していることもあります)。また、声のリズムは呼吸/いびきとほぼ一致します。実際、私はこのアプリを介して故作者/ストーリーテラーのビル・ホルムの録音を実行しましたが、それは本質的にリズム、レベルの変動性、および他のいくつかの測定のいびきと区別できませんでした。(少なくとも彼が起きている間は、睡眠時無呼吸がなかったようです。) ですから、これは少し長めのショット(そしておそらくフォーラムのルールの延長)ですが、私は音声を区別する方法についていくつかのアイデアを探しています。いびきをなんとかフィルタリングする必要はありません(それはいいと思います)が、音声で過度に汚染された「ノイズが多すぎる」サウンドとして拒否する方法が必要なだけです。 何か案は? 公開されたファイル: dropbox.comにいくつかのファイルを配置しました: Epica_Storm_the_Noisy_Sorrow_minus_10dB_wav.dat Holm_5db_noisy_wav.dat recordedFile20120408010300_first_ten_wav.dat 最初の曲はかなりランダムなロック(おそらく)音楽で、2番目の曲は故ビルホルムのスピーチの録音です。両方(いびきと区別するために「ノイズ」のサンプルとして使用します)は、信号を難読化するためにノイズと混合されています。(これにより、それらを識別する作業は非常に困難になります。)3番目のファイルは、真に最初の3分の1がほとんど呼吸し、真ん中の3分の1が呼吸/いびきの混合で、最後の3分の1はかなり安定したいびきです。(ボーナスで咳が出ます。) 多くのブラウザではwavファイルのダウンロードが非常に難しくなるため、3つのファイルはすべて「.wav」から「_wav.dat」に名前が変更されました。ダウンロード後、名前を「.wav」に戻すだけです。 更新:エントロピーは私にとって「トリックをやっている」と思っていましたが、それは主に使用しているテストケースの特性であり、あまりにもうまく設計されていないアルゴリズムでした。一般的な場合、エントロピーは私にとってほとんど役に立たない。 その後、1秒間に約8回サンプリングされた(メインFFTサイクルから統計情報を取得して)信号全体の振幅(パワー、スペクトルフラックス、その他のいくつかの測定を試しました)のFFT(いくつかの異なるウィンドウ関数を使用)を計算する手法を試しましたこれは1024/8000秒ごとです)。1024サンプルでは、​​これは約2分の時間範囲をカバーします。いびき/呼吸対音声/音楽のリズムが遅いためにこのパターンを見ることができることを望んでいました(また、「変動性」問題に対処するより良い方法かもしれません)あちこちにあるパターンの、私が本当にラッチできるものは何もありません。 (詳細:場合によっては、信号振幅のFFTは、約0.2Hzに強いピークと階段高調波を持つ非常に明確なパターンを生成します。しかし、ほとんどの場合、パターンはそれほど明確ではなく、音声と音楽はあまり明確に生成できません性能指数の相関値を計算する方法はあるかもしれませんが、約4次の多項式にカーブフィッティングする必要があり、電話で1秒に1回実行することは実用的ではないようです) また、スペクトルを分割した5つの個別の「バンド」に対して、同じ平均振幅のFFTを実行しようとしました。バンドは4000-2000、2000-1000、1000-500、および500-0です。最初の4つのバンドのパターンは全体的なパターンとほぼ同じでした(ただし、実際の「目立つ」バンドはなく、より高い周波数帯域ではほとんど無視できるほど小さい信号でしたが)。 バウンティ: 彼がこれまでで最も生産的な提案であったことを考えると、彼は新しいものを何も提供していませんが、ネイサンにバウンティを与えるつもりです。しかし、他の誰かが良いアイデアを思いついたら、他の誰かに喜んで表彰したいと思ういくつかのポイントがあります。

1
PSDと周波数スペクトルの2乗振幅の違いは何ですか?
信号のパワースペクトルは、フーリエ変換の振幅の2乗を取ることで計算できます。オーディオの人間であるため、私にとって興味のある信号は時系列になります。 この表現はPSD(パワースペクトル密度)とどのように異なりますか。そして、重要なことに、上記のパワースペクトルの代わりにPSDを使用する実用的な状況はどれですか。

3
時間領域の遅延は、周波数領域にどのような影響を与えますか?
時間制限のある信号、たとえば秒だけ続く正弦波がある場合、その信号のFFTを取得すると、周波数応答が表示されます。例では、これは正弦波のメイン周波数でのスパイクになります。TTT さて、同じ時間信号を取得し、それをある時定数で遅延させてからFFTを取得すると、どのように変化しますか?FFTはその時間遅延を表すことができますか? 私は、時間遅延が表していることを認識、周波数領域の変化を、私は何実際にその決定に苦労してるの手段を。exp(−jωt)exp⁡(−jωt)\exp(-j\omega t) 実際には、周波数ドメインはさまざまな信号間の時間遅延を決定する適切な場所ですか?

2
Pythonでスペクトログラムの解像度を改善しますか?
specgram()関数を使用matplotlibしてPythonで音声波形ファイルのスペクトログラムを生成していますが、出力は常に、通常の文字起こしソフトウェアPraatが生成できる品質よりも非常に劣っています。たとえば、次の呼び出し: specgram( fromstring(spf.readframes(-1), 'Int16'), Fs=framerate, cmap=cm.gray_r, ) これを生成します: Praatが次の設定で同じオーディオサンプルに取り組んでいる間: 表示範囲:0-8000Hz ウィンドウの長さ:0.005s ダイナミックレンジ:70dB 時間ステップ:1000 周波数ステップ:250 ウィンドウ形状:ガウス これを生成します: 私は何を間違えていますか?すべてのspecgram()パラメーターをいじってみましたが、解像度を改善できるものはありません。FFTの経験はほとんどありません。

3
ピッチ検出を改善するためのヒント
ユーザーがギターをチューニングできるシンプルなWebアプリを開発しています。私は信号処理の本当の初心者なので、私の質問が不適切であるかどうかを厳しく判断しないでください。 そのため、FFTアルゴリズムを使用して基本周波数を取得することができましたが、この時点でアプリケーションは何らかの形で機能しています。ただし、改善の余地があり、現在、FFTアルゴリズムに未処理のpcmを送信していますが、検出を改善する前/後のアルゴリズム/フィルターがあるかもしれないと考えていました。何か提案できますか? 私の主な問題は、特定の周波数を検出すると、その周波数が1〜2秒間表示された後、他のランダムな周波数にジャンプして、音が連続していても再び戻ってくるということです。 また、そのようなことを経験したことがある場合、他のタイプの最適化にも興味があります。

2
Goertzelアルゴリズムを使用すると、実際により良い周波数分解能が得られますか?
私はこの記事を読んでいますが、著者がGoertzelアルゴリズムに関して「周波数分解能」を自由に使用していることに少し混乱しています。 基本的な質問:Goertzelアルゴリズムを使用すると、実際に特定の対象帯域でより多くの周波数分解能が得られますか、それとも特定の対象帯域のみでFFTを効率的に計算しますか?サンプルの? たとえば、が100 KHz(固定)であり、データサンプル数が10000であるとしう(また固定)。FFTの長さもである通常のFFTを計算する場合、周波数分解能は予想どおりであり、10 Hzに等しくなります。これは、私のビンが-50,000 Hz〜50,000 Hzの10 Hzで区切られていることを意味します。FsFsF_sNNNNNNFsNFsN\frac{F_s}{N} 次に、Geortzelアルゴリズムを使用して、たとえば20,000〜21,000 Hzの範囲の周波数のみを表示したいとします。サンプル数に同じを使用し、FFTサイズに同じを使用する場合、周波数分解能はどうなりますか?まだ10 Hzですか?それとも Hzですか?NNNNNN21,000−20,00010000=0.121,000−20,00010000=0.1\frac{21,000-20,000}{10000} = 0.1 0〜50,000の場合と同じ inを使用して21,000〜20,000の周波数を評価することにより、メインローブ上のポイントを単純に補間するだけでは、周波数分解能を実際に向上させていないように感じます。NNN これは正しい理解ですか?

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