chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

時間ができたのでFFTを理解したい、、その前にラプラス変換を学んでみる

背景:某社雑誌向け解説記事執筆や某社向け研修会も終わり、休みの日の用事もなくなった。土日ゆっくりできるようになった
課題:頭がついていくかどうかわからないが、波を扱うなら必須?となるFFTをもう一度勉強したいと思った。
取り組み:FFTを学ぶのもありだが、その前にFFTによく似たラプラス変換ってのもあるようで、LCR回路を設計するには時間tによる微積が出てくるらしく、微分方程式を解くために、ラスプラス変換が必須?らしい。ということで、ラプラス変換を学んでみる(理解しきれるかどうか不明)
日本電気技術者協会というサイトに丁寧な説明があったのでこれを聞いてみる。
ラプラス変換とその使い方1<基礎編>ラプラス変換とは何か 変換の基礎事項は | 音声付き電気技術解説講座 | 公益社団法人 日本電気技術者協会
微分について、「乗数を一つ減らして係数に設定する」「sinの微分がcosでcosの微分が-sin」ぐらいしか覚えていないので、logとかeの扱いを忘れていて*1、ここはもう一度数IIIを復習すべきと思って、「ふたたびの微分積分」も読み直す*2

■メモ
【大学数学】フーリエ解析入門①(フーリエ級数展開 I)/全5講【解析学】 - YouTube
【大学数学】フーリエ解析入門⑤(フーリエ変換)/全5講【解析学】 - YouTube

*1:中学生の時は証明せずに暗記してしまっていた?

*2:かつて勉強しようと買ったけど、本棚にしまい込んでいた

がさつな性格なのでどこかに忘れた鍵を見つけられるようにAirTagを付けた

基本忘れることはないのだが、数年に一度キーチェーン(家の鍵とかいろんな鍵の束)を会社のロッカーに挿したまま帰ってしまい、ヨメに怒られるケースが発生する*1。先日もプログラミング研修会の朝に家の鍵が無いのに気づいてかなり慌てた*2。もうジジイで細かい気配りもできず忘れっぽくなっている。万一紛失すると影響の大きい品物の管理は無線タグに助けてもらうのがよかろうと考えた。いろんなメーカから無線タグが出ているのですが、Appleエコシステムにがっちり取り込まれてしまっている自分としてはAirTagが無難かと思い買ってみた。
AirTagを買った状態では電源がOffになっていて、フィルムを剥がして本体から引っこ抜くとAirTagの電源が入るようだ。その後は、AirTagとiPhoneがBLEで通信してペアリングされるようだ。AirTagとiPhoneが勝手にネゴシエーション*3?するので、裏側で何が行われているのか、詳細は分からない。セットアップ中にAirTagを命名するステップがあり、「鍵」と名前付けした。iPhoneの「探す」アプリで今鍵がどこにあるのか地図上に表示される。

しかし改めて考えると、これは保険と同じで、万一発生するかもしれない紛失(リスク)に対して先にお金を払っている。紛失しない場合はAirTagの出番はなくお金は無駄になるのか??ひょっとすると過剰投資なのかもしれない。あるいは、安心料みたいなものか。無くすかもというリスクに対する安心のためにAirTag代(約5千円)を払っている*4。。
以下はありえないぐらいに不細工なAirTagの取付状態。AirTag用のケースも発注したけど、納期がかなり先になるのでテープで仮止め。

しかし、そもそも紛失の際は、iPhoneとAirTagが別々になってしまってBLEも届かないぐらいに離れるのだが、そうなった時AirTagは自分の場所をどうやって知らせるのだろうか?他人のiPhoneを踏み台にしてAppleのサーバに居場所を送信するのか!?周りにiPhoneが無いような荒野だったら??最終通信断の位置で「あなたのAirTagここまでは追跡できていました・・・」と報告する?? iPhoneとAirTagのBLE通信ができなくなった時点で紛失と判断してアラートを出す??(利用者にとっては制限の強い仕様だが、Apple側はサーバ不要なので運用コストは0円だろう)。世界中のAirTagがAppleのサーバにPING飛ばすとは考えられないので、やっぱり後者の仕様なんだろうな。あまり細かく考えずに買ったけど。。普段はAirTagと自分のiPhoneが定期的に通信しているのだろう。だったら、iPhone側はBLEを切ってはいけないと。AirTagの基本設計としては、大事なものは常に身の回りにある。身の回りにあるものはiPhoneも同じ。だから、AirTagとiPhone間でBLE通信させたらよかろう。BLE通信できなくなったら紛失と判断しよう。。そんなところなんだろうか(詳細調べてないので推測ですが)(他人の行動ログを不正に取るためAirTagが悪用される記事もあったので、上記のような低レベルの設計ではなく、AirTagは他人のiPhoneを踏み台にしてAppleサーバにPING飛ばしてるのか??・・だとするとすごい仕様だ・・)
■追記
その後、AirTag用のケースが届いたのでそちらに収納した

*1:ヨメは心配性なので、鍵が無いことがばれるとめちゃくちゃ怒られる

*2:会社のロッカーにキーチェーンを挿したままであった

*3:お互いをどうやって見分けるのか?ユニークIDなしに個体の特定ができるの??

*4:AirTagの電池は1年は持つらしい。電池が切れそうになるとアプリが知らせてくれて、ボタン電池は自分で交換できるらしい(CR2032)。電池を交換し続けることで数年以上使えるわけで、月々換算の支払額は安いものになるなーと納得

真空管アンプが設計できるようになりたいので「情熱の真空管アンプ」本を買った

*1手に入った真空管でアンプが作れるように、真空管アンプの設計製作手引書「情熱の真空管アンプ」を購入した。執筆された木村哲さんは真空管アンプでは著名な方らしく、師と仰ぐ人も多いらしい。

届いた本を読んでいると、歴史や設計根拠等が非常に丁寧に解説されており、著者の誠実な人柄が伝わってくる。この本をしっかり読んで、好きに回路が組めるようになりたい。「情熱の真空管アンプ」サポートサイトもあり、URLは以下
Audio & Tubes & Amplifiers & Data Library
サイトでは、木村哲さんはALSを発症されたと書かれております。難病のため大変な毎日と思いますがどうかご自愛ください
■追記
自分が持っている電気回路の知識は、E=IRとキルヒホッフぐらいしかないけど、この本はステップを踏んでアンプ設計に必要な知識を説明してくれているため非常に分かりやすい。本としての分量は多いかもしれませんが、少しずつ理解していけば、自分の頭の中に体系化された知識が構築されるのではと期待。あとは、、アンプ設計ノウハウ習得のわくわく感の強さ、学びの速さと、自分が飽きてしまう速さとの競争か・・

今用事*2があって休みの日は余裕がないのだが、落ち着いたら日本橋真空管ショップに行って、店のオヤジと少し話をしてみたい*3。多分同じ真空管ならネットで買う方が安いのだろうけど、、授業料ということで。。といっても一本一万円以上もするような高価な真空管は買う気が無いが。手ごろな出力段用の真空管を買って、自分でEp-Ip特性のグラフを書いて理解したい。

*1:流通している真空管は限られており、有名な球は値段も高く自由に選んで購入できる状況ではないと推測される

*2:プログラミング教室の準備

*3:頑固オヤジだったら嫌だなー。自分も大概だろうけど

RL78でLチカ

某社向けプログラミング研修を開催してRL78について質問をいただいた。自分はマイコンといえば、ArmとかEspressifのESP32(Xtensa)とかしか使っておらず、RL78って全く知らなかった。勉強のため久しぶりに素*1マイコン(RL78)*2でLチカさせた。緑色のLEDはP56に接続されているらしいので、P56をL/Hさせたい。あまり調べていないのでかなりええ加減な作りになっている*3

void main(void)
{
    R_MAIN_UserInit();
    /* Start user code. Do not edit comment generated here */
    while (1U)
    {
	long j;
        P5=0B11111111;
	for(j=0;j<200000;j++);
	P5=0B00000000;
	for(j=0;j<200000;j++);
	
    }
    /* End user code. Do not edit comment generated here */
}

*1:今風にはベアメタルと言うらしい

*2:RL78/G11スティック型評価ボード

*3:P5xポートを全部L/H

GoogleのAI Bardに作曲について質問してみた

テクノ音楽を作ってください

かしこまりました。テクノ音楽を作ってみますね。

**テンポ:128 BPM**

**ドラムトラック**

* キック:4分音符
* スネア:8分音符
* ハイハット:16分音符

**ベーストラック**

* 音色:シンセベース
* オクターブ:1オクターブ
* ピッチ:0

**リードトラック**

* 音色:シンセ
* ピッチ:1オクターブ
* コード:Cmaj

**エフェクト**

* ドラムトラック:リバーブ
* ベーストラック:フィルター
* リードトラック:ディストーション

**コード進行**

Cmaj - Dmaj - Emaj - Fmaj

**メロディー**

Cmaj - Dmaj - Emaj - Fmaj
このコードは、シンプルなテクノ音楽のテンプレートを表しています。テンプレートを元に、オリジナルのテクノ音楽を作ってみてください。

以下に、コードの説明をします。

テンポ
テンポは、音楽の速さを表します。128 BPMは、テクノ音楽の標準的なテンポです。

ドラムトラック
ドラムトラックは、テクノ音楽の重要な要素です。キック、スネア、ハイハットを組み合わせて、リズムを生み出します。

ベーストラック
ベーストラックは、テクノ音楽の低音を支える重要な要素です。シンセベース音色を使い、低音を響かせます。

リードトラック
リードトラックは、テクノ音楽のメインメロディーを奏でる重要な要素です。シンセ音色を使い、メロディーを奏でます。

エフェクト
エフェクトは、音色を変化させて、より個性的なサウンドにすることができます。リバーブ、フィルター、ディストーションなどのエフェクトを使い、音色を変化させます。

コード進行
コード進行は、音楽の進行を表現します。Cmaj、Dmaj、Emaj、Fmajのコード進行は、シンプルながらも、テクノ音楽らしい印象を与えます。

メロディー
メロディーは、音楽の旋律を表現します。Cmaj、Dmaj、Emaj、Fmajのコード進行に沿って、メロディーを作成します。

これらのコードを参考にして、オリジナルのテクノ音楽を作ってみてください。

Cmaj、Dmaj、Emaj、Fmajのコード進行って、ドレミファと和音を一音ずつ上げていくだけのことなのでは?
しかもメジャーコードなので、、単にめでたいだけの曲になるのではなかろうか。。

teenage engineeringのOP-Zを買った

teenage engineeringのOP-Zを買った*1。最初結構手ごろな値段と思っていたらそれはもう在庫がないと言われた。買いたい買いたいと思っていて、気持ちが抑えきれず、結構割高な値段になったが買った。
届いてふたを開けてちょっとボタンを押してみたが、これはなかなか厄介な装置だと気づいた(気づくまで30秒)。YouTubeでデモとか見ていたのだけど、想像以上に難しく、適当にボタンを押してどうにかなるものではないと認識した。それに、、なんかボタンの調子がおかしい。メトロノームのボタンが。購入したお店に問い合わせ中・・・本体も結構湾曲している。使っているうちに本体が湾曲してボタンが押しにくくなるという記事も読んだが、買った時点から若干湾曲して押しにくいとは。。

■追記
修理専門サイトには、OP-Zのボタン修理手順も掲載されている。ショップからの回答が思ったような内容でない場合は、自分で分解修理するか・・
Teenage Engineering OP-Z Function Key Plastic Buttons Replacement - iFixit Repair Guide

■追記
購入したショップのサポートに問い合わせしたら、保証期間中なので交換対応となった。交換後、届いたOP-Zを確認するとボタンの動作は全く問題ない(細かいこと言うと、ダブルトリガー?と思わせる症状は若干見られたが、ひどくなったら接点復活剤で治るらしい)。ボタンは問題ないが、やっぱり若干そっている。そりの度合いは1m以下なのでまぁめげるほどではないが。

■追記
3日ほど使った感想として、ボタンの鍵盤+音源付きの機械なので、スイッチ入れたらすぐに何か弾くことができる。センスのない自分がボタンをプチプチやって曲を作っても、面白みのない音楽しかできない(FL-Studioを使って曲作っても面白みのない曲しかできないのと同じ)。まあOP-Zの良さとしては、、作曲解説本等を読んですぐにOP-Zで試せるというところだろうか。シーケンサも付いてるのでOP-Zに記録することが可能。楽器?を触って曲のようなものを作ってる時間が増えた。一方で気になるのは、入ってる音源がどうも厚みに欠ける気がして、若干薄い音楽しか作れないのではないか*2・・・まあ音源差し替えたり、サンプリングができるそうなので、気に入った音源に入れ替えたらいいのだろうけど。メロディーは16トラックのうち4トラックしか使えない。思いついたモチーフや曲想をOP-Zでささっと記録しておいて、あとでゆっくりでかいシンセで作り直すという感じなんだろうか。当面の目標としては、ボタンでプチプチ入力するのはつらいので、MIDIキーボードから入力できるようにしたい。



Teenage Engineering OP-Z: The Best Guides, Tutorials & Reviews
OP-Z Tutorials
op1.fun - jungle pads by Glazed Brightmore

*1:残り人生は音や波に全振りポリシィに従い・・

*2:あんまり浸る感じではないというか

室内環境計測装置を改良する

背景:室内環境計測装置(仮)を作って、温度、湿度、CO2は計測していた。が、センサー(SCD41)の仕様により、気圧が計測できていなかった
やりたいこと:I2Cで接続できる気圧センサがあるのでこれをくっつけて気圧も計測する
詳細:

組み込みRustはビルドするまでが結構大変で、時間が経つとどこに環境を作ったのかとか、どうやってビルドしたか?とかかなり忘れている。しょうがないので、GitHubにある、Embedded Rust Trainings for Espressifからstd環境用の入門コードを落としてきて、WSL環境で展開、intro/hardware-checkに入って、cargo buildと打ってみた。大体はビルドできたが、cfg.tomlが無いと怒られたので、exampleからcfg.tomlを複製、自宅のWiFiSSID等を設定

cp cfg.toml.example cfg.toml
vi cfg.toml

再度トライ、最後のリンカー?のところで、ldproxyが無いと怒られた。これは入れてなかった。以下でインストール

cargo install ldproxy

再度ビルド

cargo build

これでビルドは通った。自分の環境はWSLなので、このままではUSBシリアルで焼けない。そこで、以下でWSLからUSBシリアルに接続できるようにする
PowerShellで実行

usbipd wsl list
usbipd wsl attach --busid 2-1

espflashを使って、Flashにプログラムを書き込む。 espflash monitorでデバッグ出力をウオッチ

cargo espflash board-info
cargo espflash erase-flash
cargo espflash flash
espflash monitor

以下がNeoPixelによるカラフルなLチカ(サンプルコードのまま)

次は、templateをベースにプロジェクトを作ってみる。プロジェクト名は、aq-sensorとする

$  cargo generate --git https://github.com/esp-rs/esp-idf-template cargo
🤷   Project Name: aq_sensor
⚠️   Renaming project called `aq_sensor` to `aq-sensor`...
$ cd aq-sensor/
$ cargo build

ビルドの途中でエラーになって中断。なぜか

  ERROR: rust/esp32-c3/aq-sensor/.embuild/espressif/espidf.constraints.v5.1.txt doesn't exist. Perhaps you've forgotten to run the install scripts. Please check the installation guide for more information.
  CMake Error at lang/rust/esp32-c3/aq-sensor/.embuild/espressif/esp-idf/v5.1.1/tools/cmake/build.cmake:363 (message):
    Some Python dependencies must be installed.  Check above message for
    details.

espidf.constraints.v5.1.txt doesn't exist.が無いを怒られている?本当に?
エラーメッセージ(.embuild/espressif/esp-idf/v5.1.1/tools/cmake/build.cmake:363 (message):)を頼りに調べると、どうやら以下の、check-python-dependenciesでエラーになっているようであった。これならもう少し調べて不足しているパッケージを足せばビルドが通る!?

        idf_build_get_property(python PYTHON)
        idf_build_get_property(idf_path IDF_PATH)
        message(STATUS "Checking Python dependencies...")
        execute_process(COMMAND "${python}" "${idf_path}/tools/idf_tools.py" "check-python-dependencies"
            RESULT_VARIABLE result)
        if(result EQUAL 1)
            # check_python_dependencies returns error code 1 on failure
            message(FATAL_ERROR "Some Python dependencies must be installed. Check above message for details.")
        elseif(NOT result EQUAL 0)
            # means check_python_dependencies.py failed to run at all, result should be an error message
            message(FATAL_ERROR "Failed to run Python dependency check. Python: ${python}, Error: ${result}")
        endif()

単体で走らせるとこれは問題無いようであった

python3 .espressif/esp-idf/v5.1.2/tools/idf_tools.py check-python-dependencies
Constraint file: /home/sumi/.espressif/espidf.constraints.v5.1.txt
Requirement files:
 - .espressif/esp-idf/v5.1.2/tools/requirements/requirements.core.txt
Python being checked: /home/sumi/.espressif/python_env/idf5.1_py3.10_env/bin/python
Python requirements are satisfied.

■追記
WSL上に構築したRustビルド環境はどうも何かパラメータ(オプション設定?)がおかしいようで、cargoによるconfigを行うと最後のesp-idfのビルドでエラーになる。原因を探すより作り直した方が早そうだ。以前、素のUbuntuにRustビルド環境を構築したので、そっちを使ってみた。するとそちらは正常に最後までビルドできた。一方、各種ライブラリのバージョンが上がったせいか 、Flashに乗り切らなくなった。以下のようなエラーが出る

$ cargo espflash --release
New version of cargo-espflash is available: v2.1.0

Serial port: /dev/ttyACM1
Connecting...

   Compiling mqtt_tsp_try v0.1.0 (/home/rustbld00/lang/rust/mqtt_tsp_try)
    Finished release [optimized] target(s) in 1.92s
Chip type:         ESP32-C3 (revision 4)
Crystal frequency: 40MHz
Flash size:        4MB
Features:          WiFi
MAC address:       34:85:18:00:b3:ac
App/part. size:    1260720/1048576 bytes, 120.23%
Error:
  × Supplied elf image is too big and doesn't fit configured app partition

Flashは4MBあるはずなのに、1.2MBでもう一杯とはどういうことか??と思っていた。すると、これはFlashパーティションに分割されていて、どうやらデフォルト設定の場合、1MB+α程度らしい。でかいプログラムを乗せたかったらパーティションを切りなおさないといけないらしい。あぁ勉強になる。

■ご参考URL
ESP32: how to read and write the partition table of an ESP device? | mixable Blog
Partition Tables - ESP32-C3 - — ESP-IDF Programming Guide latest documentation
K型熱電対温度計データロガーをESP32-C3(Rust)で作り、InfluxDBで表示する