バードコールの録音でオーディオの一部を自動的にセグメント化するアルゴリズムを記述しようとしています。私の入力データは1分間のwaveファイルであり、出力では、さらに分析するために個別の呼び出しを取得したいと考えています。問題は、S / N比が環境条件とマイクの品質(モノラル、8 kHzサンプリング)の質が悪いためにかなりひどいことです。
ノイズ除去をさらに進める方法についてのアドバイスをいただければ幸いです。
これが私の入力の例です。ウェーブ形式で1分の音声録音:http : //goo.gl/16fG8P
これは信号がどのように見えるかです:
バンドパスフィルタリングでは、1500〜2500 Hzの範囲にあるものだけを維持していますが、状況は改善されますが、それでも期待からはほど遠いです。このスペクトルにはまだ多くのノイズが存在しています。
また、長期的な(32サンプル間隔を超える)平均エネルギーをプロットし、そこからいくつかのクリックを削除しました。結果は次のとおりです。
残りのすべてのノイズについて、開始検出アルゴリズムに非常に低いしきい値を設定して、最後の10秒間の鳥の鳴き声を選択する必要があります。問題は、そのような方法で微調整すると、次のレコーディングで誤検知が大量に発生する可能性があることです。
移動平均フィルターは、風雑音に少し役立ちます。他のアイデアは?「スペクトラルサブトラクション」を考えていましたが、鶏と卵の問題があるようです。ノイズのみの領域を見つけるには、オーディオをセグメント化し、オーディオをセグメント化して、ノイズを除去する必要があります。このアルゴリズムを含むライブラリや、疑似コードの実装を知っていますか?Methinks Audacityは、このような方法を使用してノイズを除去します。これは非常に効果的ですが、ノイズのみの領域をマークするのはユーザーに任されています。
私はPythonで書いており、それは無料のオープンソースプロジェクトです。
読んでくれてありがとう!