1次IIRオールパスフィルタでローパス/ハイパスフィルタを作る(Python実装)
「信号処理に欠かせないオールパスフィルタ―の概要・使い方・利用例」では、オールパスフィルタによって低演算量で様々な周波数特性のフィルタを作成できることを紹介しました。 www.wizard-notes.com この記事では、その具体例として1次IIRオールパスフィルタの並列回路でローパス/ハイパスフィルタを作成します。 1次IIRオールパスフィルタ 1次IIRオールパスフィルタの詳細はこちらの記事を参考にしてください。 今回は位相が90度遅れる周波数 fc を4つ用意し、それぞれのフィルタ係数用パラメタ λを算出しました。 sr = 44100 worN = 4096 # 0.3, 2.8, …
様々な周波数特性を実現するオールパスフィルタ―の概要・使い方・利用例
信号処理におけるフィルタとしては、ローパス/ハイパスフィルタのような振幅特性を活用するフィルタが良く知られています。 しかし、一方で位相特性のみに影響を与えるオールパスフィルタという種類のフィルタがあります。 実は、オールパスフィルタは並列回路で利用することで様々な周波数特性を低演算量で実現できる非常に便利なフィルタです。 そこで本記事では、オールパスフィルタ―の概要・使い方・利用例を紹介したいと思います。 オールパスフィルタ―とは どんな利用用途があるか? オールパスフィルタのフィルタ構成 単純な遅延 (FIRフィルタ) 1次IIRオールパスフィルタ 2次IIRオールパスフィルタ N次IIR…
Python:VSTプラグインのようなエフェクター(音響効果処理)を簡単に実装・リアルタイム再生できるクラスの作成
入出力の管理リアルタイム音響信号処理を使った身近な機器としては、ボーカルやギターなどの楽器で利用されているエフェクターが挙げられます。 エフェクターは信号処理としては簡単なのですが、実際にPCでプログラミングをして音を出力するのは準備が割と大変です。 そこで本記事では、Pythonでエフェクターをリアルタイム音響信号処理として簡単に実装可能&音としてすぐに聞けるクラスを作りました。 VSTなどのフレームワークのように audio_process(x, y)のような信号処理の関数を書くだけでエフェクターが実装・試聴できます。 使い方 Playerクラス実装の参考記事 使い方 以下のGithub上…
Pythonでボーカルやギターなどのエフェクターを簡単に実装・リアルタイム再生処理できるクラスの作成
入出力の管理リアルタイム音響信号処理を使った身近な機器としては、ボーカルやギターなどの楽器で利用されているエフェクターが挙げられます。 エフェクターは信号処理としては簡単なのですが、実際にPCでプログラミングをして音を出力するのは準備が割と大変です。 そこで本記事では、Pythonでエフェクターをリアルタイム音響信号処理として簡単に実装可能&音としてすぐに聞けるクラスを作りました。 VSTなどのフレームワークのように audio_process(x, y)のような信号処理の関数を書くだけでエフェクターが実装・試聴できます。 使い方 Playerクラス実装の参考記事 使い方 以下のGithub上…
Python:numba (jit)で音響信号処理の高速化 - 2次IIRフィルタの処理時間計測
数値計算でよく利用されている Python (CPython) ですが、for文の処理が遅いという問題点があります。 音響信号処理ではC/C++風に配列の各要素にアクセスが必要な処理を for文を使って実装することが多いため、これは致命的です。 そこで、Python用のjitコンパイラ numba で(リアルタイム)音響信号処理をどれくらい高速化できるか、音響信号処理でよく使われる2次IIRフィルタを使って計測・比較してみました。 numbaについて 概要 型指定 処理時間比較用スクリプト 測定環境 計測結果 関連文献 numbaについて 概要 A ~5 minute guide to Num…
オーディオテクニカの耳かけヘッドホン ATH-EM700 の分解と音質比較
[:w500px] オーディオテクニカの耳かけヘッドホン ATH-EM700 ですが、故障により1台を分解することにしました。 修理の際に役立つと思い、 ATH-EM700 の内部構造をメモとして記録しておきたいと思います。 また、せっかくなので ATH-EM700 と他のオーディオテクニカの耳かけヘッドフォンの音質を比較します。 www.phileweb.com ATH-EM700 の分解 音質比較 まとめ ATH-EM700 の分解 分解前にATH-EM9Dと比較。 ATH-EW9などと比べても、ATH-EM700 は薄い筐体となっています。 耳掛けは EM700 のほうがよく開き、筐体に…
適応逆ノッチフィルタによるサイン波/調波成分の抽出(Python実装)
前回紹介した適応ノッチフィルタ は、正弦波信号を除去するアルゴリズムでした。 www.wizard-notes.com www.wizard-notes.com しかし、音楽信号処理でよくある楽音を抽出したいという要求には適応ノッチフィルタは利用しにくいです。 そこで今回は、正弦波信号を抽出する適応逆ノッチフィルタを紹介します。 適応逆ノッチフィルタの構成 直列適応逆ノッチフィルタ 実装 実行結果 まとめ 参考文献 適応逆ノッチフィルタの構成 逆ノッチフィルタの周波数応答(振幅特性)は下図のようになります。 ちょうどノッチフィルタの振幅特性を反転したような特性です。 そのため、ノッチフィルタの…
多段適応ノッチフィルタで複数の正弦波を除去/ドラム・打楽器音の抽出(Python実装)
前回の記事では、適応ノッチフィルタを使って音高が未知の正弦波を除去しました. www.wizard-notes.com しかし、正弦波が複数ある区間ではうまく動作しませんでした。 そこで、今回は複数の正弦波を除去できる、多段適応ノッチフィルタを紹介します。 また、多段適応ノッチフィルタの活用方法としてドラム・打楽器音を抽出してみます。 多段適応ノッチフィルタの構成 実装 適用結果 まとめ 多段適応ノッチフィルタの構成 [px] 構成方法としては、任意の数の適応ノッチフィルタを直列で接続すればOKです。 基本的には、接続した適応ノッチフィルタの数だけパワーの大きいサイン波を除去できます。 しかし…
Python:sounddeviceを使った音声ファイルの再生・リアルタイム処理の実装方法
以下の記事では,Pythonで音の再生・録音を行うためのライブラリ sounddevice を紹介しました。 Python-sounddevice で音声や歌声をリアルタイム収音・再生・録音 - Wizard Notes この記事では、音の信号処理/アプリ開発でよく使う、音声ファイルの再生をsounddeviceを使ってどのように実装するかを紹介します。 方法1: オーディオをそのまま再生する 方法2: オーディオをリアルタイム処理して再生 方法2.1 マルチスレッド処理 方法3: オーディオをリアルタイム処理して再生(同期処理) まとめ 方法1: オーディオをそのまま再生する soundde…
Python:適応ノッチフィルタで正弦波(周期性雑音)を除去
音響信号処理の良い参考書である プログラム101付き 音声信号処理 では、適応信号処理の一例として適応ノッチフィルタが紹介されています。 ただし、プログラムがC言語のみであり、また、数学的な説明が僅かであるため仕組みが分かりにくいです。 そこで、適応ノッチフィルタのPythonにおけるリアルタイム実装とアルゴリズムの詳細を説明したいと思います。 適応ノッチフィルタについて 信号処理における雑音除去の一つのユースケースについて、未知の狭帯域雑音(正弦波信号)を除去が挙げられます。 具体的な対象としては、交流電源由来のノイズやモーター/エンジンなどの回転音、音楽信号であれば調波楽器の基音・倍音成分…
グラフィックイコライザの周波数特性を補正するための最小二乗法による利得最適化
前回は、単純なグラフィックイコライザとして、1/Nオクターブバンドごとに双二次フィルタを用意し直列接続した実装を解説しました。 www.wizard-notes.com しかし、この手法だと、グラフィックイコライザ全体の周波数特性として各中心周波数での振幅値が指定値から大きくズレてしまうという問題がありました。 この問題の解決方法として、最小二乗法での利得最適化によってグラフィックイコライザの振幅特性を補正する手法を紹介します。 なお、元論文は下記になります。 Abel, Jonathan S., and David P. Berners. "Filter design using secon…
Python:1/1, 1/3オクターブバンド グラフィックイコライザの実装
音源制作の現場で最も利用されているプラグインの一つとして、ある周波数帯域を増幅/減衰させるイコライザがあります。 その一種であるグラフィックイコライザをPythonで実装してみます*1。 グラフィックイコライザについて オクターブバンド分割(中心周波数と帯域幅の決定) 実装 周波数特性のプロット まとめ、単純なグラフィックイコライザの問題点 参考文献 グラフィックイコライザについて イコライザにおいて重要なパラメタは、 中心周波数 帯域幅(Q値) 増幅/減衰させる量 の3つになります。 フィルタの構成方法はいくつがありますが、特に双2次フィルタ(Biquad filter)を使う方法がよく知ら…
「ブログリーダー」を活用して、Kureneさんをフォローしませんか?