MATLABでバタワースハイパスフィルタをつくる

4 次のバタワースハイパスフィルターをつくってみる。
1000 Hz でサンプリングされたデータに対し、カットオフ周波数 30Hzを指定。
その振幅応答と位相応答を表示。

[z, p, k] = butter(4, 30/1000,"high");
sos = zp2sos(z,p,k);
fvttool(sos,"Analysis", "freq");

f:id:yusuke_ujitoko:20190822204257p:plain

MATLAB修行中。

DRV2605Lのサンプルコードを動作させる

触覚/振動ドライバのDRV2605Lを使ってみる。
現状、日本語の情報が公式ドキュメント以外なく、まだあまり使われていないのかもしれない。

DRV2605Lのブレークアウト基板がAdafruitとSparkFunから出ているが、
私はAdafruitのものを用いている。

f:id:yusuke_ujitoko:20190817142329j:plain (左手前がDRV2605L。奥に見えるのがHaptuator Mark Ⅱ)

ArduinoとDRV2605Lをつないでいく。

  • Arduino電源(3-5V)をDRV2605LのVIN
  • ArduinoGNDをDRV2605LのVIN
  • ArduinoSCLをDRV2605LのSCL
  • ArduinoSDAをDRV2605LのSDA

アクチュエータとDRV2605Lもプラスマイナス間違えずにつなぐ。
アクチュエータはERMとLRAに対応している。

あとはgithubからArduino用のライブラリを落として、 exampleを動かすだけ。
Force ReactorやHaptuator MarkⅡは動くのを確認した。

Anaconda環境にMATLABエンジンをインストールする

先人たちのブログを見てもなかなかうまくいかなかったのでメモ。

Mathworkspython用のmatlab APIを提供している。
これを使えば、pythonからmatlabの機能を呼び出せるようになる。

  • 環境
    • Windows10
    • MATLAB R2018b
    • Anaconda3

手順

まずいきなり使用可能なpythonバージョンに制約がある。
MATLAB R2018だとpython2.7, 3.5, 3.6しか使えないので、
condaでいずれかのバージョンでpython環境を整えておく。
このバージョンの指定はMATLABのバージョンに依存しているので注意。

MATLABのコマンドウィンドウでmatlabrootと打って、
MATLABのインストールフォルダを見つける。
私の場合は'C:\Program Files\MATLAB\R2018b'だった。
インストールしているMATLABのバージョンによって異なるはず。

次に、コマンドプロンプト(Anaconda prompt)を管理者権限で起動する。
管理者権限でないとインストールの時にうまくいかないので注意。

MATLABインストールディレクトリの中の以下のフォルダに移動し、
そこにあるpython.exeを削除し、
Anacondaのインストールフォルダを指定した上でsetup.pyを実行する。

cd "matlabroot\extern\engines\python"
rm python.exe
python setup.py install --prefix="<anacondaのインストールフォルダ>"

これでインストール完了。
使うときに<anacondaのインストールフォルダ>を環境変数に入れればOK.

import sys 
sys.path.append("<anacondaのインストールフォルダ>\\lib\\site-packages")
import matlab.engine
eng = matlab.engine.start_matlab()
tf = eng.isprime(37)
print(tf)

Sweep信号をpythonで扱う

ちょっと前にM系列信号を扱った.
M系列信号と同じくシステム同定に用いられるSweep信号を,
pythonで生成できるライブラリがあるので試しに生成してみる.

scipy.signal.chirpでは4種類の形状(linear, quadrantic, logarithmic, hyperbolic)を指定できる.

f:id:yusuke_ujitoko:20190721172439p:plain