chevron_left

メインカテゴリーを選択しなおす

cancel
Wizard Notes https://www.wizard-notes.com/

音専門のエンジニアが書く、音響音楽解析の技術録、音楽のレビューおよび分析、作曲活動に関する雑記です。

Kurene
フォロー
住所
未設定
出身
未設定
ブログ村参加

2014/02/23

arrow_drop_down
  • 複数の2帯域分割(補完)フィルタを使ったマルチバンド処理のPython実装(3バンド以上)

    以前の記事では,低域・高域を別々に処理するようなマルチバンド処理(オーディオクロスオーバー)を実現するフィルタバンクの例として、2バンドの場合の実装方法を紹介しました. www.wizard-notes.com ただ,より実用的なプラグイン/ソフトウェアを作ることを考えると,3バンド以上に分割できることが望ましいです. しかし,3バンド以上のフィルタバンクは2バンドの構成方法のみで作ろうとすると非常に計算効率・使い勝手が悪いです. そこで,二分木構造の回路によるマルチバンドフィルタバンクの設計方法を紹介します. 元論文:Complementary N-Band IIR Filterbank B…

  • Python:FIR/IIRフィルタの直列/並列接続の周波数応答(伝達関数)プロット (scipy.signal.freqz)

    複雑な信号処理プラグインを開発する場合、複数のFIR/IIRフィルタを組み合わせることがよくあります。 そこで,FIR/IIRフィルタの直列/並列接続時の周波数応答をプロットするサンプルコードを作成しました。 回路全体の伝達関数を確認するだけでなく、フィルタ単体や部分的な回路の伝達関数も確認できるように、複数の伝達関数を入力として与えられるように設計しました。 また、カットオフ周波数を周波数応答とともに確認できるように垂直線プロットしています。 なお、直列回路全体の伝達関数は各フィルタの伝達関数の積,並列回路全体の伝達関数は各フィルタの伝達関数の和として計算することができます。 import …

  • Pythonでゲーム音楽(チップチューン)の基本波形を生成(サイン波,矩形波,のこぎり波,三角波,白色雑音)

    シンセサイザ(オシレータ)の基本波形として一般的なサイン波,矩形波,のこぎり波,三角波,白色雑音は,ファミコンのBGMのようなゲーム音楽(チップチューン)の作成や音信号処理のテストでよく利用されます. サイン波は基本周波数(音高)をとすると, として簡単に書けますが,矩形波・ のこぎり波・三角波は若干面倒です. ただ,Pythonだと scipy.signal.sawtooth, scipy.signal.square を使えばサイン波と同様の形式でプログラミングできるので非常に楽です. この記事では,Pythonでnumpy や scipy を使って基本波形5種を生成する方法を紹介します. …

  • マルチバンド(オーディオクロスオーバー)処理を実現するフィルタ(Butterworth, Linkwitz-Riley)のPython実装(2バンド)

    低域・高域のような周波数帯域別に信号処理する場合、いい感じに帯域を分割するフィルタが必要になります。 ソフトウェア/プラグインの具体例としてはマルチバンドコンプレッサが挙げられます。 このような回路の特性としては、音質に影響を与えるような振幅/位相歪みが小さいと嬉しいです。 具体的には,低域/高域通過フィルタの並列接続(加算)した際の伝達関数が以下のような特性を持つように設計します。 振幅特性: 特定の帯域を強調しない(フラットな特性を持つ) 位相特性: 直線位相に近い、遅れが小さい この記事ではオーディオクロスオーバーを実現するフィルタ(回路)としてバターワースフィルタとリンクウィッツライリ…

  • Pythonでゼロ位相フィルタリング (scipy.filter.filtfilt)

    はじめに ゼロ位相フィルタリングの実装方法 scipy.signal.filtfiltを使ったゼロ位相フィルタ lfilter x 2 でのゼロ位相フィルタリング 参考Webサイト はじめに 双2次フィルタ (SOS) やバターワース/チェビシェフフィルタなどといったIIRフィルタは,FIRフィルタと比べると少ない計算量で急峻な周波数特性を実現できる便利なフィルタです。 しかし,基本的に位相特性は非線形であり直線位相ではありません。出力波形が大きく崩れてしまう問題があります。 そこで、位相の遅れが発生しないフィルタリング方法としてゼロ位相フィルタリングという手法があります。 この記事では、ゼロ…

  • Python:半音ごとに音高を抽出するIIRフィルタバンクの作成と使い方 (librosa.filters.semitone_filterbank)

    はじめに 音の高さの分析は,メロディや和音の推定に使われる重要な前処理です. 本ブログではこれまで,音の高さの分析手法として一般的である,定Q変換やフーリエ変換を使う手法を紹介してきました. www.wizard-notes.com これらの手法は周波数領域で信号を処理する手法ですが,時間領域で各音高を抽出する手法としてIIRフィルタによる半音フィルタバンク (semitone filterbank)があります. この手法は Pythonの音楽信号分析ライブラリ LibROSA に実装されているため,手軽に利用することができます. そこで本記事では,LibROSAのIIRフィルタによる半音フィ…

  • Python: 高品質フェーズボコーダ pyrubberband でタイムストレッチ・ピッチシフト

    オーディオ信号の再生速度・音高の変更はよく利用される処理です。 そのアルゴリズムはいくつかありますが、リアルタイム処理向けの手法としてはフェーズボコーダという手法があります。 Pythonでは、音楽信号分析ライブラリLibROSAにおいてフェーズボコーダが用意されていますが、ナイーブな実装のため音質があまりよくないという問題があります。 ところで、高品質な再生速度・音高の変更が可能なフェーズボコーダ(タイムストレッチ・ピッチシフト)のライブラリとしてRubberBandが知られています。 このライブラリ自体はC++用ですが、実はPythonラッパーpyrubberbandがあるためPython…

arrow_drop_down

ブログリーダー」を活用して、Kureneさんをフォローしませんか?

ハンドル名
Kureneさん
ブログタイトル
Wizard Notes
フォロー
Wizard Notes

にほんブログ村 カテゴリー一覧

商用