2019|python|Python言語を使って、FIRディジタルフィルタを作成します。入力・出力ともwavファイルとします。FIRフィルタの定義式は、次のように畳み込みの定義式と同じです。x(n)は入力信号、y(n)は出力信号、b(i)は乗算器のフィルタ係数、Nは遅延器の数(フィルタ係数の数はN+1)です。実際にプログラム化するには次のように行います。入力信号x(n-N)にフィルタ係数b(N)を乗算これらを加算した値が出力信号値y(n)になります。乗算器等は次のように構成され、『ある定数』との乗算を行ってから足しあわせます。次に示すa0,a1,a2,...の定数や、遅延器の数を変えることにより、ローパス、ハイパス、バンドパスなど様々なフィルタを実現できます。FIRディジタルフィルタスクリプトの作成Python言語を使ってFIRディジタルフィルタスクリプトを作成します。「wavファイルの作成とwavファイル情報の表示」で作成したwavファイルを入力します。記録時間は30秒から3秒にしました。load_wave関数はwavファイルの読み込みです。save_wave関数はwavファイルの書き込みです。makeCoefficient関数はフィルタ係数の作成です。main関数から起動されます。main()makeCoefficient関数で読み込まれるファイル「constant」の内容を次に示します。この係数により高周波成分が減衰し、波形も滑らかになります。次のコマンドで作成したFIRディジタルフィルタスクリプトを実行します。firtest.py入力したwavファイル「100-500-1000-8000hz.wav」を次に示します。https://tomosoft.jp/design/wp-content/uploads/2019/07/100-500-1000-8000hz.wavFIRディジタルフィルタ後のwavファイル「fir.wav」を次に示します。高周波成分が減衰したため高い音が小さくなり、低音が拡大されています。https://tomosoft.jp/design/wp-content/uploads/2019/07/fir.wavaudacityアプリを用いて、入力した波形「100-500-1000-8000hz.wav」(上側)とFIRディジタルフィルタ後の波形「fir.wav」(下側)を比較します。audacityアプリでFIRディジタルフィルタ後の波形をFFT処理すると、100、500、1000、8000hzのそれぞれが変わっていないことが確認できました。