音声・オーディオ版MNIST "FSDD (Free Spoken Digit Dataset)" の紹介と,メルスペクトログラム算出
7万枚の手書き数字の画像+ラベルのデータセットである MNIST は,今では機械学習・深層学習のHello Worldとして非常に多くの人に利用されていて有名です. MNISTの1つのデータは 白黒画像・28x28ピクセル,全体でも7万件なので大規模データですがデータセットのデータサイズは小さいので使いやすいです.また,内容も手書き数字10種類の画像というシンプルである程度パターンが抽出できそうなデータであるため,データ分析や機械学習の練習によく利用されているのだと思います. そんな MNIST の音・オーディオ版のようなデータセットがないか調べたところ,このFSDD を見つけたので紹介します…
球面 (Spherical) K-means のクラスタリングのデモと実装例(Python,PyQtGraph)
データをクラスタリングするアルゴリズムの代表的な手法の一つとして,K-means (k平均法)が知られています. シンプルな動作原理でクラスタリングできるので取っつきやすく,また,新たな仮定や制約を追加することで様々な派生アルゴリズムが提案されてきました. 今回は,「原点からの方向(角度)でクラスタリングする」という制約でクラスタリングする Spherical K-means を紹介します. K-meansの実装 使うデータ クラスタリングするデータ:x.shape==(サンプル数, 特徴量次元数) ↑の各サンプルがどのクラスタに属すか:labels.shape==(サンプル数, ラベル数) …
Pythonで12音平均律の各音高をカラフルにライブプロット
PyQtGraphの複数の線グラフプロットを利用して,12音平均律で音高ごとに色を変えてライブプロットしたら綺麗&役立つかなと思い作ってみました. もう少しブラッシュアップしようと思ったのですが,後述の理由でお蔵入りになったので,供養としてソースコードと実装方法を公開します. デモ動画・ソースコード 実装の流れ PyQtGraphにおける複数のカーブプロット 12音平均律のエネルギー抽出 お蔵入り理由 デモ動画・ソースコード github.com https://github.com/Kurene/pyqtgraph-app/blob/main/pqg_pitchlines.py 実装の流れ …
日本学生支援機構 貸与型奨学金の繰上返還による機関保証料の返金額について
私は大学・大学院時代に,日本学生支援機構の貸与型奨学金(第1種 x 2と第2種)を機関保証で利用していました. 返済金額がそれなりに大きいので,少しでも返済負担を減らすべく,社会人になってから第1種と第2種をそれぞれ繰上返還することで,機関保証料の一部が返金となりました. ちょうど今日,昔の家計簿や通帳を見直していたら,過去2回分の奨学金の繰上返還で戻ってきた機関保証料の返金額を確認できました. 貸与金額や機関保証料の金額などの条件によって変わると思いますが,機関保証を利用&繰上返還を検討している人の参考になる情報だと思うので,参考金額として公開したいと思います. 第2種(大学4年間) 貸与…
Python:PyQtGraphでメルスペクトログラムをリアルタイム描画
音楽再生ソフトやプラグインでよく見かける,スペクトログラムのリアルタイムプロット. どの周波数帯域で音が鳴っているのかをリアルタイムで可視化できるので非常に便利です. Pythonでスペクトログラムのリアルタイムプロットをやろうとすると,やはりリアルタイム性が問題になってきます. Pythonの代表的なグラフプロットライブラリである matplotlibですが,表示するデータの大きさにもよりますが,仕様上,FPSだと10Hz(1秒に10回)程度の描画が限界です. なので,リアルタイム描画にmatplotlibを使うと,どうしてもカクついた描画になってしまいます. www.wizard-note…
PyQtGraph example Python をver. 3.8にアップデートして PyQtGraphをインストール後,PyQtGraphを使ったスクリプトを実行した際に以下の2つのエラーが発生しました. ImportError: cannot import name 'sip' from 'PyQt5' Exception: pyqtgraph requires Qt version >= 5.12 (your version is 5.9.7) この2つのエラー対処後,PyQtGraphを使ったスクリプトが正常起動したので,その方法をメモとして残します. バージョン情報 Python=…
Windows+Python 3.7, 3.8, 3.9, 3.10 でのPyAudioのインストール方法・エラー対処
PyAudio Pythonのバージョンを3.5からアップデートしたところ,PyAudioのインストールで引っかかったのでメモ. 調べてみると,PyPIのPyAudio wheel は Python 2.7, 3.4, 3.5, 3.6 以外には非対応となっています. pip will fetch and install PyAudio wheels (prepackaged binaries). Currently, there are wheels compatible with the official distributions of Python 2.7, 3.4, 3.5, and…
Python:音の広がりや位相を見るフェーズスコープをPyQtGraphとPyAudioで実装
Pythonにおけるリアルタイム音楽信号処理アプリのデモ/教材として,音の広がりや位相を見るフェーズスコープをPyQtGraphとPyAudioで実装してみました. 起動すると,PC上で音楽を再生しながらフェーズスコープを描画することができます. 全ソースコードは以下にあります. github.com 少し複雑なソースコードなので,この記事ではソースコード理解の助けとなる実装方法の要点とノウハウを書きたいと思います. 実装方法の要点・ノウハウ Pythonにおけるリアルタイム音楽再生・分析方法 ループバック機能を利用した,PC上の音のリアルタイム取得 データのプロット方法 フェーズスコープの計…
matplotlib の散布図の色・アルファ値(透明度)を滑らかにグラデーションさせる(cmap利用)
データの分析や可視化で散布図を使う時には,プロットしたデータの座標や,そのデータが示すラベルや値に応じて色を変えることが多々あります. matplotlibでRGBA値を変える方法は、以下のようになっています。 # 全て同じ色・透明度を設定する場合 plt.scatter(x, y, c="red", alpha=0.3) # 各要素の色・透明度を個別に設定する場合 c = [(0,0,0,1), (0.5,0.5,0.3,0.5)] # RGBA値のタプルを格納した配列 plt.scatter(x, y, c=c) ここで,各要素の色・透明度を個別に設定する場合,色・アルファ値(透明度)をデ…
ステレオ楽曲の位相差を確認できるフェーズメーターの作り方(極座標ベース)
前回の記事では,ステレオのL, R チャネルの信号を,リサージュ図形の として与えることで音の広がりを可視化しました. www.wizard-notes.com この記事では,直交座標 を極座標(絶対値と偏角) 表記にしたバージョンを紹介します. 参考: Goniometer Algorithm - DSP and Plug-in Development Forum - KVR Audio ただの座標変換であるため,最終的なプロットは直交座標系のものと変わりません。 しかし,絶対値と偏角は振幅の大きさと位相差に対応しているため,振幅の大きさと位相差に応じて色を変える等の高度な描画がやりやすくな…
音の広がりや位相差を可視化するリサージュメーター(ゴニオメーター)のPython実装
DTMなどで音の広がり感を可視化するには,リサージュ図形に基づく方法があります. リサージュ リサジュー:Lissajousとは 偏ったDTM用語辞典 - DTM / MIDI 用語の意味・解説 g200kg Music & Software 2つの信号を元に作られるリサージュ図形を利用し,2次元平面上にプロットした点群の形状を見ることで音の広がり感を確認することができます. 例えば,iZotopeの無料プラグインである Ozone Imager V2 でも "Lissajous" をクリックすると確認できます. Ozone Imager V2 なお,この方法により音の広がりを確認する…
Python:SymPyでTeX記法の数式を画像(PNG)として保存する
Pythonを使って TeX の数式を画像として保存する方法がないか調べたところ、SymPy という Welcome to SymPy’s documentation! — SymPy 1.0.1.dev documentation SymPyは数式による処理を行うライブラリであり,独自の記法もありますが TeX 記法を扱うこともできます。 インストール方法 Anaconda などのディストリビューションでPythonをインストールした場合は、インストール済みとなっていると思います。 もしインストールされていない場合は、以下のようにpipを使って導入してください。 pip install sy…
PyQtGraph:3Dプロット (GLSurfacePlotItem, GLMeshItem) の高さ(z軸)で色を変える方法
PyQtGraph の3Dサーフェス/メッシュプロットでは,高さに応じて色を変えることができます。 具体的には,GLSurfacePlotItem もしくは GLMeshItem のコンストラクタのキーワード引数 としてshader='heightColor'を指定します. n_x, n_y = 128, 128 xy_init = 1.0, 4.0 x_range = -10, 10 y_range = -10, 10 x = np.linspace(x_range[0], x_range[1], n_x) y = np.linspace(y_range[0], y_range[1], n_…
Python:PyQtGraphで2次元波動方程式の数値シミュレーションをリアルタイムプロット(有限差分法)
PyQtGraphで美しいリアルタイムプロットができることを最近知ったので、実装例として2次元波動方程式の数値シミュレーション(有限差分法)をリアルタイム実行・プロットしてみました。 実装のための数式導出と、PyQtGraphを使ったソースコードを合わせて紹介します。 2次元波動方程式の有限差分法の更新式導出 以下の2次元波動方程式の初期値・境界値問題の解を有限差分法によって近似的に解くことを考えます。 この を 平面上の格子点での値として求めていきます。ただし、 平面のそれぞれの方向の格子間隔(微小変化)を )とします. 右辺,左辺の項をそれぞれテイラー展開し2階中心差分を導出します。詳…
Python:PyQtGraphで散布図グラフをリアルタイムプロット
matplotlibよりも滑らかなリアルタイムプロットができる PyQtGraph で散布図をリアルタイムプロットしてみました。 PyQtGraphで散布図リアルタイムプロット、1000点でも60fps程度で動いてくれたので良き pic.twitter.com/R6ntYYMIQF— Kurene (@_kurene) 2021年6月10日 1000点でアルファ値(透明度)を設定していますが、約60fpsでリアルタイムプロットできていることを確認しました。 こちらの散布図の実装方法とソースコードを紹介したいと思います。 PyQtGraphにおける散布図リアルタイムプロットの流れ 散布図の属性 …
PyQtGraph:プロットの基礎と、GraphicsWindowをGraphicsLayoutWidget に置き換える際の注意点
PyQtGraph の公式実装例*1やWeb上にあるソースコードを見ると、例えば PyQtGraph でのリアルタイムプロットのコードは以下のように実装されています。 # -*- coding: utf-8 -*- from pyqtgraph.Qt import QtGui, QtCore import numpy as np import pyqtgraph as pg app = QtGui.QApplication([])# PyQtのアプリ生成 win = pg.GraphicsWindow() # GraphicsWindow() オブジェクト生成 win.resize(500, …
Python: PyQtGraphでリアルタイムプロット/アニメーション(サンプルコード・実装デモ付き)
PyQtGraph の導入理由 matplotlib ではダメなのか? PyQtGraph のメリット・デメリット PyQtGraph の導入方法 PyQtGraphのエラー対処 リアルタイムプロット/アニメーションの実装例 1次元プロット(折れ線グラフ) 複数の折れ線・カーブプロット 2D散布図プロット(2D点群) 2Dイメージプロット(スペクトログラム) 3D サーフェスプロット(波のシミュレーション) 公式サンプルコード・描画デモ まとめ 参考文献 PyQtGraph の導入理由 matplotlib ではダメなのか? Pythonにおけるグラフプロットライブラリとしては matplot…
PyQtGraph:MKLライブラリに関するエラー対処(mkl_blas_dgem2vu.dll)
Pythonで本格的なリアルタイムプロット向けのライブラリである PyQtGraph 。 このPyQtGraph を導入・サンプル実行する際にエラーが発生したので、その内容と対処方法をメモしたいと思います。 環境 Win10 64-bit Python 3.6.5 conda 4.6.14 導入の流れとエラー発生 PyQtGraph の Webページに従い、 pip install pyqtgraph として PyQtGraph を導入しました。この時点で特にエラーはありませんでした。 次に、サンプルコードを実行するため、Pythonインタプリタを起動し、 import pyqtgraph.e…
matplotlib: 折れ線グラフのリアルタイムプロットでラベルやカラーなどの属性を変える(音声信号でのデモ付き)
前回の記事では、matplotlibでの折れ線グラフのプロット画像のラベルや属性を変更しました。 www.wizard-notes.com 今回は、折れ線グラフのリアルタイムプロットでラベルやカラーなどの属性を変えるコードを実装をしました。 import numpy as np import matplotlib.pyplot as plt length = 100 x = np.arange(0, length) y = np.array([ np.random.normal(0, 5.0, length), np.random.normal(0, 1.0, length), np.rand…
matplotlib: 折れ線グラフで複数の配列・ラベル・カラーなどの属性をまとめてセットする
折れ線グラフで複数の配列・ラベル・カラーなどの属性をまとめてセットする場合、単純な方法としては以下のように一つの信号 (y_arr) ずつplt.plot()するコードが考えられます。 length = 100 x = np.arange(0, length) y = np.array([ np.random.normal(0, 5.0, length), np.random.normal(0, 1.0, length), np.random.normal(0, 3.0, length), ]) labels = ['foo', 'bar', 'baz'] lines = [] for y_a…
「ブログリーダー」を活用して、Kureneさんをフォローしませんか?