音源のフィルター処理

初心者質問ですみませんが、192kHzでサンプリングした音源を「クロスオーバー周波数26または22kHz、カットオフ減衰量170または80dB/オクターブのローパスフィルタとハイパスフィルタ」にかけたいと考えています。
正直、質問していて私自身にもわかっていないことが多いのですが、論文に書いてあるので、そのまま質問させていただきます。
どなたか、matlabでこのフィルターをかけることができる、コードを教えていただけないでしょうか?
具体例があると良いのですが。宜しくお願い致します。

 Accepted Answer

takemoto
takemoto on 17 Aug 2020

0 votes

Audio Toolboxから提供される機能で実現可能かと思います。
>>data = audioread('aaa.wav');
>>crossFilt = crossoverFilter(1,'CrossoverFrequencies',26e3,'CrossoverSlopes',80) ;
>>[y1,y2] = crossFilt(data);
とすれば、26kHzをクロスオーバー周波数とした、highバンド側とlowバンド側の出力が得られるはずです。

5 Comments

Cir 2t
Cir 2t on 17 Aug 2020
ありがとうございます。
audio toolboxですか・・・・・
signal processingtoolboxなら、あるのですが。
それで、行う方法はないでしょうか?
たびたびすみませんが、指南していただけるとありがたいのですが。
takemoto
takemoto on 17 Aug 2020
Audio Toolboxをお持ちでなければ、high側とlow側について、それぞれご自身でフィルタを自作する必要があるかと思いますが、Signal Processing Toolboxをお持ちということなので、フィルタ設計自体は関数が利用できます。例えば、バタワースフィルタで実現するのであれば、以下のURLで、単体のフィルタ設計の手順が紹介されています。
high側のフィルタとlow側のフィルタに同じカットオフ周波数を設定し、所望の減衰量(スロープ)となる様にフィルタの次数を設定すれば実現できそうですが、いかがでしょうか?
Cir 2t
Cir 2t on 17 Aug 2020
ありがとうございます。たびたびすみません。
バンドパスバタワースフィルターのことでしょうか?もしそうであるならば、以下の点がよくわからないです。
「低域カットオフ周波数 500 Hz と高域カットオフ周波数 560 Hz をもつ 20 次のバタワース バンドパス フィルターを設計します。サンプルレート 1500 Hz」
[A,B,C,D] = butter(10,[500 560]/750);
上記の文から、butter内の10,750が出てくるのは、なぜでしょうか?
takemoto
takemoto on 17 Aug 2020
クロスオーバーフィルタは、一般には、所定のクロスオーバー周波数を境界点として、その高域成分と低域成分を分割するのに使用しますので、二分割の場合はバンドパスではなく、ハイパスフィルタとローパスフィルタの組み合わせとなりますが、三分割以上の場合は、それにバンドパスを加えた構成になるかと思います。
ご案内した上記例題のパラメータの意味ですが、10はフィルタの次数です。20次のフィルタを、二つのフィルタのカスケード接続で構成するため、単体のフィルタの次数を10としているのだと思います。 750は、ナイキスト周波数(サンプリング周波数の半分)です。butter関数は、カットオフ周波数の値を、ナイキスト周波数を1として正規化した値で設定するために、この用な表現になっているのではないでしょうか。
以上、参考となれば幸いです。
Cir 2t
Cir 2t on 20 Aug 2020
よくわかりました。色々とご指導ありがとうございました。

Sign in to comment.

More Answers (0)

Categories

Find more on Audio Processing Algorithm Design in Help Center and File Exchange

Asked:

on 15 Aug 2020

Commented:

on 20 Aug 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!