2

つまり、基本的に、私の問題は、ある周波数の高調波ノイズ源によって破損した.wav形式の音声信号があることです。私の目標は、このノイズが発生する周波数を特定し、ノッチフィルターを使用してノイズを除去することです。これまで、次を使用して音声信号をmatlabに読み込みました。

[data, Fs] = wavread('signal.wav');

私の質問は、高調波ノイズが発生している周波数をどのように特定できるかということです。それを行ったら、その周波数でノッチフィルターを実装するにはどうすればよいですか?

注:現在使用しているMATLABのバージョン(2010)が原因で、iirnotch()コマンドまたはfdesign.notch()にアクセスできません。

4

2 に答える 2

2

一般的な手順は、スペクトルを分析して問題の周波数を特定し、その周波数を中心にフィルターを設計することです。ほとんどの実際のアプリケーションでは、それはすべて少しばかげています。周波数は移動し、ノイズと信号を区別する簡単な方法はないため、巧妙なテクニックと少しの当て推量を使用する必要があります。ただし、単調な破損があることがわかっている場合は、そうです、FFT とノッチ フィルターでおそらくうまくいくでしょう。

信号処理ツールボックスの一部であると思われるなどを使用して信号を分析しfft、フィルターを設計できます。fir1信号処理ツールボックスがない場合は、周波数ドメインへの変換のように「手動で」行うことができ、不要な周波数を削除します (周波数ベクトルの関連要素をゼロにすることにより)。タイムドメインに戻します。まさにそれに関するチュートリアルがあります here .

および関数は十分に文書化さfftfir1ています。Mathworks サイトを検索してコード例を取得し、実行に移してください。

于 2012-11-13T08:40:41.830 に答える
1

xenoclastの回答に追加/修正するには、周波数ドメインでのフィルタリングが機能する場合と機能しない場合があります。周波数ドメインでのフィルタリングには多くの厄介な問題があり、その一部をここで取り上げます: http://blog.bjornroche.com/2012/08/why-eq-is-done-in-time-domain.html

もう 1 つの問題は、ファイル全体を一度に処理しようとすると、フィルターの「幅」または Q がファイルの長さに依存することです。これはうまくいくかもしれませんし、うまくいかないかもしれません。長さが異なるファイルが多数ある場合、この方法で同様の結果が得られるとは思わないでください。

独自の IIR ノッチ フィルターを設計するには、RBJ オーディオ フィルター クックブックを使用できます。ヘルプが必要な場合は、ここにチュートリアルを作成しました。

http://blog.bjornroche.com/2012/08/basic-audio-eqs.html

私のチュートリアルではベル/ピーキング フィルターを使用していますが、それに従って、RBJ のノッチ フィルターに置き換えるのは簡単です。

最後に 1 つ: これが実際に .wav ファイル内のオーディオ信号であると仮定すると、耳を使って問題の周波数を見つけて修正することもできます。

  • フィルター設定をリアルタイムで調整できるオーディオ編集プログラムでファイルを開きます (大胆な方法でこれができるかどうかはわかりませんが、おそらく可能です)。
  • 高ゲインに設定された「ブースト」または「パラメトリック」フィルターを使用し、ノイズが最も強調されるまで周波数設定をスイープします。
  • ブースト フィルターを同じ周波数のノッチ フィルターに置き換えます。ノイズ除去と信号保存のトレードオフを行うために、幅を微調整する必要がある場合があります。
  • 必要に応じて繰り返します (倍音が多いため)。
  • 結果のファイルを保存します。

もちろん、一部のオーディオ編集アプリには、特に 50/60 Hz のノイズに適したハーモニック ノイズ リダクション機能が組み込まれています。

于 2012-11-13T16:01:40.200 に答える