人間の音声ノイズフィルター


17

誰もが非音声を減衰させるフィルターを知っていますか?私は音声認識ソフトウェアを書いていますが、人間の音声以外はすべて除外したいと思います。これには、バックグラウンドノイズ、くだらないマイクによって生成されるノイズ、またはバックグラウンドミュージックも含まれます。パワースペクトルの6 dBロールオフを補正する1次フィルターを既に実装していますが、ノイズが聞こえます(ただし、音声はずっと明瞭に聞こえます)。ローパスフィルターを使用することを考えましたが、次の2つの理由でそれを行うのは不安です。

  1. ローパスプレフィルターが残りの音声処理に干渉するかどうかはわかりません。人間の耳は20 kHz未満の音しか検出できませんが、音声の処理に必要な高次の高調波を除去するリスクはありません(これが事実かどうかはわかりませんが。私はチャンスを取りたくない)。

  2. 特定の子音(f、h、sなど)の励起は、ほぼ完全にホワイトノイズであることを理解しています。いわば、良いノイズを除去するノイズフィルターを実装したくありません。

理想的には、マイクに向かって話している人のスピーチだけを残したいと思います。あなたが何かアイデアを持っているか、私が見逃している何かがある場合、私に知らせてください。大変感謝いたします!


私は考えます。よく答えられた同様の質問(フィルターと音響処理)をここで見たからです。
ゼッタスロー

:このようなこの一つとしてstackoverflow.com/questions/6452926/...
Zetta SURO

経験則:特定の言語や特定のプラットフォームで特定のDSPアルゴリズムを実装する方法を知りたい場合は、SOのトピックになります。特定のプログラミング角度のないDSPアルゴリズム/テクニックに関する質問であれば、ほぼ間違いなくDSP.SEに属します(より良い品質の回答が得られる傾向があります)。
ポールR

わかった。ここに移行しましたか?もしそうならありがとう。移行方法がわからなかったため、ここで再確認しました。
Zetta SURO

私ではない-フラグを立てて、モデレーターがそれを動かせるかどうか尋ねたので、TPTBの1人がそれをしたと思う(誰でもありがとう!)。
ポールR

回答:


8

電話で使用される音声通信チャネルは、通常300 Hz〜3 kHzの周波数応答を持っています。これは通常のスピーチで多くのエネルギーを拒否しますが、明瞭度はまだ非常に良いです-主な問題は、特定の破裂子音、例えば「p」と「t」がより高い周波数成分なしで区別するのが少し難しいことです。

一般消費者向けオーディオで一般的に見られる20 Hz〜20 kHzの帯域幅全体と、音声通信に使用される最も積極的なフィルタリング(上記参照)の間の「スイートスポット」を探しているのでしょう。たとえば、50 Hzから8 kHzまでのバンドパスフィルターから始めることをお勧めします。たぶんせいぜい数dBしかSNRを改善することはないでしょうが、特に高周波数のバックグラウンドノイズが多い場合には役立つかもしれません。


ありがとう!私の友人は実際に音声チャンネルを提案しましたが、私はそれがいくつかの子音であまりにも多くのエネルギーを減衰させると疑っていました。50 Hz〜8 kHzを試して、どのように機能するかを確認します。
ゼッタスロー

2
私が探していた「迅速な」ソリューションであるという理由だけで、この答えを選択します。残りの答えは、長期的には役立つので、私は間違いなくもっと調査する必要がありますが、これは私が最初に探していた簡単なフィルターソリューションです。
ゼッタスロー

5

音声の帯域幅に一致する通過帯域フィルターを使用すると役立ちます。

複数のマイクを持っている場合(現在は携帯電話の場合)、それを利用できるICAに似た方法がたくさんありますが、質問は、入力が1つしかないことを示唆しています。

あなたがしたいのは、「シングルマイクソース分離」(Roweisの画期的な論文から取られた名前)であり、「シングルセンサー」とも呼ばれます。警告:これは解決された問題とはほど遠いものであり、この分野のすべての研究はごく最近のものであり、アルゴリズムやアプローチが「明確な勝者」になることはありません(ガウス混合モデル+ FSTが音声認識用であったのとは異なります)。

そのための良いフレームワークは、Wienerフィルタリングを使用することです。Benaroyaらを参照。「ウィーナーフィルタリングとマルチウィンドウSTFTに基づく単一センサーソース分離」(セクション1と2をお読みください。本当に必要な場合を除き、多重解像度のことは気にしないでください)。要するに、信号のSTFTを計算し、各STFTフレームについて、音声スペクトルとノイズスペクトルの推定値を取得しようとし、Wienerフィルタリングを使用して、そこから音声スペクトルの最良の推定値を復元します(これスペクトルを「ソフトマスキング」するようなものです)。

問題は次のとおりです。STFTフレームが与えられた場合、そのフレームから音声とノイズ成分を推定します。Benaroyaの論文で説明されている簡単なアプローチは、ベクトル量子化によるものです。多くの話者が数時間音声を聞き、STFTを計算し、LBGを実行して512または1024の典型的な音声フレームのコードブックを見つけます。ノイズについても同じことを行います。次に、入力信号のフレームが与えられたら、それを非負方向に投影し(乗算勾配更新手順については論文で説明されています)、音声ベースとノイズベースに入力すると、音声とノイズの推定値が得られます。非負の射影を処理したくない場合は、最も近いものを使用してください。これは、「シングルセンサーソース分離」部門でおそらく機能する最も単純なものです。

音声認識システムは、実際に分離システムに何らかの入力を提供できることに注意してください。音声認識システムを使用して、デコードの最初のパスを実行します。各フレームについて、最高のスコアを獲得したガウス分布から平均MFCCベクトルを取得します。反転してスペクトルに戻します。ブーム、音声のようなビットの最も可能性の高いスペクトル位置を提供するマスクがあり、Wienerフィルタリングの入力として使用できます。これは少し手を振ったように聞こえますが、要点は、ソースを分離するには適切なモデルが必要であり、逆向きの音声認識システムは、音声信号の優れた生成モデルの地獄です。


1

問題は、ICAの説明によく使用される「カクテルパーティ」の問題と非常に似ているため、おそらく独立コンポーネント分析(ICA)の実行を検討する必要があります。要するに、ICAは相互に独立した信号のコンポーネントを見つけます。これは、環境内の他のノイズ(食器洗い機、ホワイトノイズ、ファンの渦)が音声の信号源から独立しており、分離できることを前提としています。

ICAはPCA(主成分分析)に似ていますが、主軸の分散を最大化する代わりに、独立性を最大化します。ICAの実装には、使用しているコーディング環境にプラグインするものが多くあります。


4
ICAは、分離するソースと同数の入力信号を必要とします。音声ノイズ除去では、1つの信号しか残されていないため、ICAは役に立ちません。
ピクネット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.