実現したいこと
マイクから入力されてくる音声信号(人間の声や物音など様々)に乗っているホワイトノイズを除去しながらほとんど遅延なく出力したいです。
###前提
AD変換はサンプリング周波数32kHzで入力前に16kHzのLPFを入れています。
それでもマイクの影響か回路の影響か、サーッというホワイトノイズのようなものが入ってきます。
出力音声を上げるとノイズも大きくなることから、データとして取得した段階で既にノイズが入ってきていると考えています。
ノイズの原因の特定も行いますが、プログラム面でノイズを除去することが目標です。
###試したこと
初歩的ですが、音声に窓関数をかけてFFTし、周波数ごとの強度で表示させた後に閾値以下の強度しか持たない周波数を0、もしくは1/10程度に下げましたがうまくいきません。
具体的には人の声が人の声らしくないと言いますか、言葉を言葉として聞き取れない、子音が消えているような感じと、車のスリップ音のようなキュルキュルした音が混ざっています。
強度が強い周波数の周りの周波数は例え強度が閾値以下であっても重要なのかもしれないと思い、強い強度周辺かつ閾値以下の周波数は弱めないようにもしましたが根本的には変わっていません。
FFTのプログラムは正しいことは確認済みです。
FFTは要素数128で行っています。これより多くすると「実現したいこと」で挙げた「ほとんど遅延なく」という部分が達成されなくなるので128より増やすことは考えておりません。
また、他にもAD変換や出力時点での不具合は無く、正しく処理されていることは確認済みです。
(DA変換時や出力時で少しノイズが乗る可能性はありますが…)
どのくらいをノイズと定めるのか、これは居る環境によって変わるとは思うので閾値も動的に変化させた方がいいとは思うのですが、それはまた今後やっていくものとして、今回は静的な閾値として考えさせてください。
自分では中々進歩がないので質問させていただきました。
何か知恵があれば教えていただけると幸いです。
また、何か条件等についての質問には答えられますが、実際に何か手法を教えていただいた場合、それを試すのは少し時間がかかるのでご了承いただきたいと思います。
回答2件
あなたの回答
tips
プレビュー