2026-03-01から1ヶ月間の記事一覧
SPRESENSEのArduino環境でマルチコアのプログラムを作成していたところ、メモリ不足でサブコアを起動できない、という事態が発生しました。具体的には、MP.begin(subid) が -12 (= ENOMEM) を返します。ENOMEM とは Out of Memory つまりメモリ不足です。SPR…
【2026/04/07 追記あり】AIスタックチャンのウェイクワード登録/検出処理 (WakeWord.cpp) をSPRESENSEマイコンに移植したやつですが、さらに改良しました。前回の記事↓ 改善点 (1) マルチコア対応 音声のデジタル信号処理をサブコアで実行するようにしました。ただ…
Windowsを使用しているとき、急に画面が「your device ran into a problem and needs to restart」と表示された黒い画面になり、再起動することがあった。システムファイルチェックをと、コマンドプロンプトを管理者として実行し、下記コマンドを実行。 DISM…
最近、Windows11でファイルを画面上中央あたりにドラッグすると、「ここにドロップして共有、移動、またはその他の操作を行います」というなんか邪魔なやつが表示されるようになった。「ドラッグトレイ」というものらしい。無効化するには、「設定」→「シス…
AIスタックチャンのウェイクワード登録/検出処理 (WakeWord.cpp) をSPRESENSEマイコンに移植しました。 ハードウェア SPRESENSE拡張ボードのMIC Aチャンネルにエレクトレットコンデンサーマイクを接続。負荷抵抗 2.2kΩでバイアスします。詳細は下記ドキュメントを参…
前回の記事のつづき ESP32ではesp_dspライブラリが利用できるが、ARMではCMSIS-DSPライブラリが利用できる。 使い方 #include <arm_math.h> arm_rfft_fast_instance_f32 S; arm_status status = arm_rfft_fast_init_f32(&S, nfft); arm_rfft_fast_f32(&S, data, data, 0)</arm_math.h>…
謎のコード ESP32の音声処理のプログラムに次のようなコードがあった。 dsps_fft4r_fc32(data, nfft / 2); dsps_bit_rev4r_fc32(data, nfft / 2); dsps_cplx2real_fc32(data, nfft / 2); dataは音声のサンプル列つまり実数の配列であり、nfft はFFTサイズで…
C++で実装。ただし、音声データは符号付き16ビットPCMとし、ひとまず計算にはfloat型を用いて処理の重さも考慮しないものとします。 ノイズ抑制 (Noise Suppression) 一般的には、窓関数→FFT→ノイズ推定→減算処理→IFFT→重ね合わせ しかしやってみるとなかな…
前回の続きです。 simplevox::VadEngine デフォルトの設定は下記の通り サンプルレート = 16000 Hz フレーム時間 = 10 msec フレーム長 = フレーム時間 × サンプルレート = 160 サンプル VADモード = レベル0 (レベル0~4, 高いほど判定が厳しい) hangbefore…
AIスタックチャンのウェイクワード検出のソースである WakeWord.cpp をざっくり解読します。 コメントにある通り、ややこしいです。 仕様・用語 サンプルレート: 16000Hz VAD : 音声アクティビティ検出 (人が話していることを検出) MFCC : メル周波数ケプストラム係…
現状はラジコンでしかない センスチャン を、どんなロボットにしていくか。 まずは本家である スタックチャン の機能を調査しました。 Moddable版ファームウェア (ししかわさん版) Renderer: 顔の描画 Driver: モータ等の駆動 TTS: 音声合成 事前生成 : ビルド時に生成し…
以前にもまとめましたが、自分でも整理できてなかったので別の切り口でまとめ直します。 Special Thanks to ししかわ@meganetaaan さん : スタックチャンの原作者 robo8080 さん : AIスタックチャンの作者 タカオ@mongonta555 さん : タカオ版スタックチャンの作者 秋田純一 先生 …