コードまたはアプリケーションでアンチノイズを作成するにはどうすればよいですか? リアルタイムである必要はありません。サウンドトラック全体とは正反対のサウンドです。したがって、両方を一緒にプレイすると、お互いに相殺されます。
2 に答える
あなたが利用可能な純粋なノイズを持っているなら(私はそれを自分で試していません)fftにあなたはfftw-3を使うことができます
1ノイズのみを含むバッファを取得します2ノイズの長さが信号全体と一致するようにノイズをゼロパッドします3ノイズスペクトルNを計算します4信号スペクトルXを計算しますNに存在するXの周波数を除外し、結果をに保存しますY6Yからyを再構成します
Matlabまたはオクターブで:
n=length(x);
n(1:noise_end-noise_start+1)=x(noise_start:noise_end);
N=fft(n);
X=fft(N);
% Filter noise frquencies
y=ifft(Y);
アイデアは、ノイズ信号のスペクトルを使用して、目的の信号のノイズを低減することです。ノイズのスペクトルがわかっている場合は、これらの周波数をフィルターで除去します。
あなたの説明から、あなたはただソース信号を反転する必要があるように聞こえます。それをして元の値に合計すると、問題なく座っていることになります-inf
。
しかし、あなたが実際にやりたいと思うのは、バックグラウンドノイズの測定に基づいて信号のノイズを減らすことです。これは基本的に次のようにすることで実現されます。
- 選択したノイズサンプルのスペクトル分析。これは、FFTを実行することで得られます。
- 修正したい領域の時間領域から周波数領域への変換。(繰り返しますが、FFTです。)
- 修正したいオリジナルからそのノイズを差し引きます。
あなたは何か近いものになってしまうでしょうが、間違いなくそこからの信号に対してもっと仕事をしたいと思うでしょう。ここにはたくさんの計算が含まれていますが、Stack OverflowでDSPを検索すると、いくつかのことを読むことができます。うまくいけば、これはあなたが始めるのに役立つでしょう。