2016年11月5日土曜日

Octaveレッスン(8) - バンドパスフィルタをかける

*バンドパスフィルタをかける

butter関数を使用して各種バタワースフィルタを作成できる。
標準の関数ではないので、事前にsignalパッケージをロードするコマンドの実行が必要:
pkg load signal
次数10、低域カットオフ周波数 440 Hz 、高域カットオフ周波数 660 Hzのバンドパスフィルターを作成する例:
Fs = 44100;     % sampling rate
[b, a] = butter(10, [440 660]/(Fs/2));
[b, a] に、伝達関数の係数が返される。

500Hzの正弦波と800Hzの正弦波の合成波に、バンドパスフィルタをかける:
[y500, t] = gen_sin(Fs, 500); % sampling rate 44100Hz, sin 500Hz
[y800, t] = gen_sin(Fs, 800); % sampling rate 44100Hz, sin 800Hz
yy = y500 + y800;
sound(y500, Fs)  % play sound
sound(y800, Fs)  % play sound
sound(yy, Fs)  % play sound
yy2=filter(b, a, yy);
sound(yy2, Fs)  % play sound
合成波yyから800Hzの成分が除去されて、yy2には500Hzの成分だけ残る。
sound()コマンドでyy2を再生するとy500と似た再生音が聞こえる。
・・・となるはずだが、yy2が破裂音のような変な音になってしまう。

先日、同様の手順でうまくいったのだが要調査。



0 件のコメント:

コメントを投稿