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

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

2
オーディオ信号の対数フーリエ変換(LFT)
音楽をできるだけ正確に分析するようにしています。もちろんFFTを試しましたが、いくつか問題がありました。 低周波は人間の聴覚よりも解像度が非常に低いことがわかりました。この問題を解決するために非常に長い時間のFFTを試してみましたが、44100Hzのサンプルレートで8192サンプル/秒で分析しても(時間分解能の欠如を意味します)、低周波数では十分な分解能が得られませんでした。 私はいくつかの解決策があることを発見しました。 最初に、FFTビンの2次補間。 しかし、それは完璧な方法ではないようです。この方法の問題は次のとおり です。1。「freqビン間のfreqを決定する場合、補間を行うためにどの3つのビンを選択する必要がありますか?」 2.「これを行っても、結果に関する実際の追加情報はありません。補間は一種のトリッキーな方法だと知っています。」 次に、目的の頻度で各周波数ビンを抽出するので、ビンを対数的に抽出できます。 しかし、重大な計算コストの問題があります:(多分)N ^ 2。 第三に、LFT(対数フーリエ変換)。 これは対数間隔のサンプルを必要とし、信じられないほど速い速度で私が探しているものとまったく同じ結果をもたらします。/programming/1120422/is-there-an-fft-that-uses-a-logarithmic-division-of-frequency しかし、そのアルゴリズムについてはわかりません。紙を理解して実装しようとしましたが、英語と数学のスキルが不足していたため不可能でした。 したがって、LFTの実装の助けが必要です。
9 audio  fft 

1
車両に取り付けられた加速度計を使用してどのようにしてポットホールを検出できますか?
私は現在DSPとFFTを勉強しています。これに非常に慣れておらず、Arduinoと趣味のプロジェクトで長い間電子機器を扱っています。最近、私はあなたの毎日の通勤に沿って道路の粗さを測定するために、くぼみをマッピングすることを目的としたプロジェクトを行っています。これは道路の外形ではありませんが、旅行中にドライバーが感じる乗り心地の粗さです。ポットホールに衝撃が加わったときに、Z軸の「垂直」加速度を測定するために加速度がマウントされています。単純化するために、クォーターカーモデルのように、ばねが力を弱めます。 基本的には、FFTを使用して垂直加速度の支配的な周波数を見つけることにより、ポットホールを検出する検出器を作成したいのですが、パターンに一致させて、車のドアのドアのスラミングやマンホールカバーを検出できます。たぶん将来的には穴から。 FFTが適しているかどうかは不明ですが、入力やアドバイス、アイデアは大歓迎です。ドライブパスとエンジンからの高周波数の振動を除去するために、ローパスフィルターを作りました。 車の乗客/ドライバーが感じた「荒さ」に関するアイデアはありますか?私は滑らかな道路、砂利道、レンガ道、悪路で路上試験を行い、垂直加速度の大きさのしきい値を考え出し、「ラフ」と見なされるものに何らかの方法でスケールを付けることを考えていました。 検出されたポットホールもGPSの場所でログに記録されます。私はこのためにRasberry Piを使用しようとしています。データストレージとその速度は、そのための優れたプロジェクトです。 本やチュートリアル、知恵など、どんな助けやアイデアにも感謝します。 更新: ここに追加データを引き継ぎます: /electronics/56238/accelerometer-data-smoothing-filtering-pothole-detection
9 fft 

3
DCを拒否するのに適したFFTウィンドウ関数とは何ですか?
FFTを使用して、本質的に信号のパワーエンベロープを分析しています(含まれているプロジェクトの情報については、こちらを参照してください)。また、パワー番号は常に正なので、ウィンドウを使用したいDC成分を除去します。 50/50の正と負の関数、通常のすべての正の関数。 「フラットトップ」関数を使用して、a0バイアスを取り除き、それを余弦波から正弦波に変換しましたが、それが最適(または意味がある)かどうかはわかりません。 なにか提案を?

1
離散フーリエ変換-基本をすばやく見つける?
まず、私は謝罪します。私はソフトウェア開発者であり、純粋な数学に飛び込んでいないのは非常に長い期間なので、私の質問は馬鹿げているように見えるかもしれません。私は望みません。 コンテキストは、音楽のピッチ認識です。 音符を取り、それにフーリエ変換を適用すると、特定の周波数の振幅の合計が無限になります。たとえば、任意の楽器で基本がである音符を演奏すると、フーリエ変換後、F 、2 F 、3 F 、… 、n Fで高調波が発生します。すべての周波数には、楽器の音色を定義する特定の振幅があります(ピアノ、声、トランペットなどすべてはこの音に従いますが、すべての倍音に対して異なる振幅があります)。FFFF、2 F、3 F、… 、n FF、2F、3F、…、んFF, 2F, 3F,\ldots,nF 今私がしたいのは、与えられたオーディオ信号からです、見つけます。それだけ。常にバックグラウンドノイズなどがあるため、見た目よりも複雑です。さらに、Fは必ずしも最大の振幅を持つ周波数である必要はありません。FFFFFF したがって、を見つけるための私のアイデアは、DFT(実際には速度のFFT)を適用し、周波数Fを見つけることです。これにより、F + 2 F + 3 F + … + n FがFFT出力で最大になります。FFFFFFF+ 2 F+ 3 F+ … + n FF+2F+3F+…+んFF + 2F +3F + \ldots + nF それは可能だと思いますか?それは非常に短い時間で可能だと思いますか(<5ミリ秒としましょう)?
9 audio  fft  pitch 

1
波形の信号対雑音比を推定する方法は?
I信号を有する:、iは= 0 ... N - 1。f私(t私= I Δ T )f私(t私=私Δt)f_i(t_i=i\Delta t)i = 0 … n − 1私=0…ん−1i = 0\ldots n-1 信号は、ゆっくりと変化する「トレンド」を中心に急速に変化するようです。急速に変化する部分はノイズであり、ゆっくり変化する部分は実際の信号であると想定しています。 信号の信号対雑音比(SNR)をどのように推定しますか? :私はtreshold周波数を決定することができればという思い、私は次の式を使用できます。ωtωt\omega_t Fはフーリエ変換を示し、F(T)。S/ N= ∫ωt0| F(ω )|2∫∞ωt| F(ω )|2S/N=∫0ωt|F(ω)|2∫ωt∞|F(ω)|2S/N=\frac{\displaystyle\int_0^{\omega_t}|F(\omega)|^2}{\displaystyle\int_{\omega_t}^{\infty}|F(\omega)|^2}FFFf(t )f(t)f(t)
9 fft  noise  snr 

2
勾配ベースのハフ変換を実装する方法
私はエッジ検出にハフ変換を使用しようとしています、そして基礎として勾配画像を使用したいと思います。 私はこれまでやっていること、画像所与のIサイズの[M,N]とその偏導関数gx、gy、各画素の勾配角度を計算することですthetas = atan(gy(x,y) ./ gx。同様に、勾配の大きさをとして計算しmagnitudes = sqrt(gx.^2+gy.^2)ます。 ハフ変換を作成するには、次のMATLABコードを使用します。 max_rho = ceil(sqrt(M^2 + N^2)); hough = zeros(2*max_rho, 101); for x=1:M for y=1:N theta = thetas(x,y); rho = x*cos(theta) + y*sin(theta); rho_idx = round(rho)+max_rho; theta_idx = floor((theta + pi/2) / pi * 100) + 1; hough(rho_idx, theta_idx) = hough(rho_idx, theta_idx) + …

3
正弦波のFFT結果を確認するにはどうすればよいですか?
FFTアルゴリズムへの入力として、オーディオファイル(正弦波)1000Hzが与えられました。アレイに8192のパワースペクトルサンプルがあります。 出力が正しいか間違っているかを確認する最も簡単な方法は何ですか? サイレントオーディオファイルを指定すると、すべてのサンプルの出力がゼロになります。サイン波では、o / pは20(0番目のサンプル)から26059811(743番目のサンプル)に増加し、徐々に40に減少します。 出力範囲がわかれば、FFTが機能しているかどうかを技術的に証明できます。 どんなアイデアも役に立ちます。 技術的な疑問については、このリンクを参照してください。
9 fft  audio 

2
オーディオ入力/スペクトルを正しく分析する方法
私はJavaと信号処理にかなり慣れていますが、オーディオ処理を扱うプロジェクトが割り当てられました。私に与えられたトピックは、曲(任意の曲)を分析するコンポーネントを持ち、現在再生されている周波数(リアルタイム)に応じてデータを出力するゲームです。つまり、曲が再生されると、現在の周波数が出力されます(1秒ごとに現在の周波数が出力されます)。 Stackoverflowで FFTを使用するように言われました。彼らは「ただFFTをする」と言いますが、それは私には何も意味しませんか?どのようにFFTを行いますか?私はチュートリアルを読み、基本的にそれが何であるかを理解していますが、次のようにそれを実装する方法についての手がかりはありません。 そのような処理に最も適したオーディオファイルのデータタイプは何ですか? FFTの入力は正確には何ですか 結果を解釈する方法 誰かがオーディオ信号を処理する方法について簡単なウォークスルー/チュートリアルを提案できますか?さらに、Java用のFFTの適切な実装を誰かが知っている場合は、その提案をいただければ幸いです。
9 fft  audio  java 

2
2の累乗ではないサイズのFFT
私の質問は、2の累乗ではない信号の入力サイズに関するものであり、そのfftを取得する必要があります。一部のソリューションでは、1800のfftを取得したい場合、2の累乗にするために2048の長さまでゼロパッドし、基数2のアルゴリズムを適用するとします。ただし、ゼロパディングなしで異なるアルゴリズムの組み合わせを適用し、必要なFFTを計算する他のソリューションもあります。私の質問は、サイズ1800のFFTを計算するために異なるアルゴリズムの組み合わせを使用する場合、1800のFFTをとる必要がある場合に、信号を2048の長さにゼロパディングすることは結果に違いを生じますか。違いがあるか、または結果は同じになります。
9 fft 

5
ピアノのピッチ検出
私はピアノのチューニングプログラムに取り組んでおり、その一部にはリアルタイムのピッチ検出が必要です。これは私がこれまでに行ったスキームで、ある程度は機能しますが、おそらくいくつかの改良を使用できます。 モノラル、44.1kHz、16ビットPCMオーディオを2 ^ 14サンプルのチャンクでキャプチャしています。最後の4つのサンプルを長さ2 ^ 16のバッファーに結合し、ハンウィンドウをバッファーに適用して、FFTを実行します。次に、FFTの結果を2つの解像度でバケット化します。最初に、200バケットにバケット化してから、この粒度でHPSピッチ検出アルゴリズムを実行します。ここで正確な周波数を取得する必要はありません。近づきたいだけです。次に、12000バケットにバケット化すると、10Hzから10kHzまで1セントの解像度になります。200ビンHPSアルゴリズムからおおよその周波数がわかったら、12000ビンケースのその範囲でピークを検索して、より正確な周波数を取得します。 これは、キーボードの中央にあるノートでは問題なく動作するようです。低音で発生するのは、通常、実際の音の2番目または3番目の部分である約1.5秒の音の誤認と、その後の正しい音の誤認です。 何が起こっているのかを確認するために作成したすべてのスペクトルプロットでは、予想されるピークよりも広い幅があります。この幅は、200ビンから12000ビンのケースで視覚的にある程度一貫しています。200ビンの場合、ピークが狭くなると予想していました。 ですから、信号処理は私にとっては初めてなので、私が質問することは考えられない問題があるかもしれませんが、特定の質問に関しては、サンプルサイズはこのタスクに十分ですか?ハーンはウィンドウの正しい選択ですか?FFTの前にデータを平滑化する必要がありますか?ビンの数に対してHPSはどの程度敏感ですか?多くのビンを使用した場合、非調和性により、部分音がHPSアルゴリズムの2、3、4などで除算する単純なアプローチと基本波をオーバーラップしない可能性があると考えていました。
8 fft  audio  pitch 

2
radix-4 FFTの実装
4ポイントの基数4のFFTを実装しましたが、出力条件をdftに一致させるために、出力条件を操作する必要があることがわかりました。 私のコードはマトリックス式のかなり直接的な実装なので、何が問題なのか明確ではありません // | // radix-4 butterfly matrix form | complex multiplication // | // +- -+ +- -+ | a+ib // X[0] = | 1 1 1 1 | |x[0]| | * c+id // X[1] = | 1 -i -1 i | |x[1]| | ------- // X[2] = | …
8 fft 

2
スペクトル平坦度の標準偏差—では、概念的に何を測定しているのですか?
いびきを特定するための私の終わりのない探求で、「スペクトルの平坦性」が信号の「品質」の公正な尺度であるように見えることがわかりました。 FFTパワーデータポイントの相乗平均を同じポイントの算術平均で割ったものとして、スペクトル平坦度を計算しています。(R ∗ 2 + I∗ 2 )(R∗2+I∗2)(R*2 + I*2) 次に、(ここでは少しひねりを加えて)実行中の(50フレームを超える)算術平均とスペクトル平坦度の標準偏差を計算し、実行中の標準偏差を実行中の平均で割った「正規化」標準偏差を計算しています。 私のサンプルでは、音声が「良い」(つまり、眠っている被験者の呼吸音やいびき音を確実に追跡している)場合、この指標は約(最大程度)よりも大きく、通常は落ちるオーディオが「泥の中に」ある場合、未満。(他の要因と一緒に動くしきい値を使用することで、この差別をある程度改善できますが、それはおそらく別のトピックです。)また、バックグラウンドノイズが大きい場合(たとえば、誰かが部屋に入ってざわめくとき)は、測定値がを超えることもわかります。)。0.5 0.2 1.00.20.20.20.50.50.50.20.20.21.01.01.0 だから、私の基本的な質問は:私が測定しているものの名​​前(「スペクトル平坦度の正規化された標準偏差」を超えて)はありますか、そしてメトリックが「意味するもの」の概念的な説明を誰かが提供できますか? (私は信号の「品質」について他のダースのメトリックを試しましたが、これはこれまでで最も良いようです。) 追加: 私はおそらく、単純なスペクトル平坦性が測定しているもの(ウィキペディアの記事のみ)について特に優れた概念的なハンドルを持っていないことを認めるべきです。そのため、それ以上の説明はありがたいです。

3
ライン検出用のFFT
ほとんどの人が尋ねるのとは異なる方法でFFTを使用しようとしています。通常の繰り返しの垂直線があるグラフの写真を撮り、画像を処理して、線が平均してどれだけ離れているかをピクセルで判断できるようにしたいと考えています。私はキャニーエッジ検出とハフライン検出を試してみましたが、関心のあるラインのみを正確に検出できるほど画像を最適化できないと思います。 したがって、私の試みは、画像の10行をスキャンして、ピクセル値をピクセル列に対応するビンに蓄積することです。グラフ化すると、非常に見栄えの良い波形になります。これに対してDFTまたはFFTを実行すると、ライン反復の周波数であると思われるピークを見つけることができます。(これは誤った仮定である可能性があります) 私の質問は、この番号は何に対応していますか?つまり、ピクセル単位であるため、サンプリングレートがどうなるか混乱していると思います。これはFFTの有効な使用法だと思いますが、私が成功するはずだと思う時点でここに落ちています。 例として。幅300ピクセルの画像を作成しました。正確に30ピクセル間隔で描画された1ピクセル幅の線があります。2つのピークが見つかりました。1つは75に、もう1つは実際のコンポーネントの225(対称に見える)です。(架空のコンポーネントが再生されるとは思いませんか??)線が30ピクセル離れていることを知っています。75と225はどのように関連していますか? 私はこれを得るために一生懸命努力しています、そしてあなたが推薦することができるどんな助けにも感謝します。この時点で、エッジ検出をあきらめ、このアプローチを試してみたいと思います。 前もって感謝します。
8 image  opencv  fft  dft 

2
短時間フーリエ変換(STFT)の時間分解能
STFTの時点がどのように計算されるかを理解するのに苦労していますが、決定的な答えを見つけることができません。4Hzの定常信号があり、3秒のオーバーラップがある64秒のウィンドウを使用するとします。つまり、256ポイントのウィンドウと12ポイントのオーバーラップです。 で開始しtime=0、最初の64秒を取り、FFT /パワースペクトル密度などを実行するとします。次に、それがの値であると言えt=32ますか?次のウィンドウは、3秒のスライドがにローカライズされた後t=35ですか? もしそうなら、そして私が本当に始めたいと思ったt=0なら、私は事実上から始めてt=-32、最初の128ポイントをゼロで埋め、最初の128ポイントを信号から取得しt=0ます。
8 fft  stft 

1
画像データのFFT:境界効果を回避するための「ミラーリング」
Matlabに米の画像を読み込んで表示します。 g = imread('rice.png'); imshow(g); この画像のFFTを取り、シフトします。 G = fft2(g); imshow(log(abs(fftshift(G)) + 1), []); 画像の中心を介してax軸とy軸を配置すると、画像が対称であることがわかりましたg(-x、-y)= g(x、y)。1D信号の場合、実信号のFFTには対称の実部と非対称の虚部があることがわかります。これが2次元で表示されているものでしょうか。 元の画像は上部より下部の方が暗いため、周期的な境界で強い水平方向の不連続性があり、FFTの垂直線が発生しています。 この境界効果を解消したい。これに対する一般的なアプローチは、ウィンドウ処理のようです。 しかし、私はこの問題を「ミラーリング」と呼ばれる論文で見つけた手法で解決したいと思っています。論文はあまり具体的ではなかったので、このアプローチを理解するには、あなたの助けが必要です:-)。 最初に、元の画像から対称的な「タイル」を作成します。 tile=[flipdim(g,2) g; flipdim(flipdim(g,1),2) flipdim(g,1)]; imshow(tile); 次に、この「タイル」のFFTを使用します。 Tile=fft2(tile); imshow(log(abs(fftshift(Tile)) + 1), []) 縦線は(ほとんど)なくなっているようです。ただし、ミラーリングにより対称性が高まったようです。 正しい結果は何ですか?元の画像のFFTまたは「ミラーリングされた」画像のFFT? 境界効果をなくし、純粋に本物のFFTを取得できるように、「ミラーリング」できる方法はありますか? どんな答えも事前にありがとう!

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