【Part2】Sound Player基板V2の音声データの作成方法と特性検討 | トドお父さん通信

トドお父さん通信

北部九州在住 高BMI中高年のオタク趣味の活動記録

みなさんこんばんは、福岡でおもちゃドクターもやっている トドお父さんです。

前回はテスト用のサイン波のWAVファイルの音声データからHEXファイルを作って、フラッシュメモリICに書き込む所まででしたね。

【Part1】Sound Player基板V2の特性検討と音声データの作成方法

 

今日は、 生成した音声ファイルのインデックス vos_mac.txt に従って各曲のスタート

アドレスをプログラムに書き込むところ、およびフラッシュに書き込んだPCMデータの

確認方法、また音声再生したデータの再現性と周波数特性などを評価してレポしますね。

 

また、余裕があればVer3でAB級アンプICとHブリッジICの切り替えができるように設計した

ので、両者の消費電力を含めた比較を行いたいと思います。(これは別途のポストにします)

 

さて、ATMEL STUDIOでビルドしたファイルのATTINY402/202への書き込み方法に

ついては、前のこの記事に詳しいです。

 

PA0 UPDI端子をFUSE書き込みでGPIOに変更しなければHVP(高電圧プログラム)の

必要もないので、プログラムはseriauUPDIと言われる中華製の安価なSrialUSB変換モジュール

にダイオードと抵抗1本を追加するだけで構成できるから簡単ですね!

[Part2] ATTINY202への書き込みとプログラムをやっています!

 

閑話休題:ATMEL STUDIOでorgel_2 のorgel_SW_402プロジェクトを開いたら、

main.cを開きます。

 

356行 付近のvoice_s に音声データのインデックスが入ってます。

まず、「キティミラーナ」の音声データのインデックスを全てコメントアウトし、今回作成した

インデックス(vo_mos)を書き込みます。

そしたら、main.cをセーブしてリビルドを行います。今回はreleaseフォルダに生成されます。

 

プログラムがビルドできたら、AVRDUESSを立ち上げて、プログラムの書き込みを行います。

詳しくは前の記事を参照ください。 

ATTINY202/402のFUSEビットをAVRDUDESSを使って書く方法

今回はMCUにt402(ATTINY402)を選んで、下記のフォルダにあるプログラム

orgel_SW_402.hexへのパスを指定します。

D:\Users\powpher\documents\Atmel Studio\7.0\orgel1_2_anpan_240820\orgel_SW_402\Release\orgel_SW_402.hex

 

さらにprogramボタンを押すと、Additional command lineに書かれたFUSE書き込み後に

ビルドしたプログラムの書き込みを実行します。

FUSEデータは -U fuse2:w:0x01:m -U fuse5:w:0xC4:m クロックを16MHz、PA0はUPDI

 

PA0 UPDI端子はSW0 (タクトSW)の入力に使っていますが、UPDIからGPIOに変更する

とHVP(高電圧プログラミング)の対応が必要となります。

そのときのFUSEデータは-U fuse2:w:0x01:m -U fuse5:w:0xC4:m  になります。

 

今回はUPDIのまま入力端子として使っていますが、きちんと”H"、”L"認識するようです。

Sleep時の電流が増すとの情報がありましたが、確認した所 1uA 以下になりました。

 

これで、基板のタクトSWを押すたびに、wavelistで指定した音声ファイルが順次ラウンド

ロビンで再生されるようになりますね。

 

これで、ようやく音声再生の波形をオシロで測定して波形と周波数特性を評価できます。

前回作ってフラッシュメモリICに保存したのは、下記のサイン波 音声データでしたね。

 

1.1kHz  0dB 30秒

2.400Hz  0dB 30秒

3.100Hz -6dB 20秒

4.400Hz -6dB 20秒

5.1kHz   -6dB 20秒

6.2kHz   -6dB 20秒

7.5kHz   -6dB 20秒

1.から 再生してみました。

 

  1kHz 0db            400Hz 0db

  
 

あれっ、なんか波形がおかしいですね。

WAVデータとHEXデータを比較して確認してみます。

 

WAVデータはAudicityで16kHzサンプル 8bit PCM信号になっていますから、

WAVデータのRIFFヘッダ44バイトを除けば同じデータになるはずです。

 

こちらが1kHz 16kHz 8bit -6dB のWAVファイル

 

こちらが1kHz 16kHz 8bit -6dB の生成したHEX

 

WAVファイルの45バイト目から、83h、98h、AEh、BBh、と続くデータになるはずが

飽和したFFhまでの拡大したデータになっているようです。

 

続いて 400Hz 16kHz 8bit -6dB のWAVファイル

 

こちらは400Hz 16kHz 8bit -6dBのHEXファイル

これも正しければ、WAVファイルの45バイト目から、81h、8Ah、94h、9Dh、と続くデータになるはずが、やはりFFhまでの拡大して飽和したデータになっているようです。
 

大泉さん作成の WAV2HEXのC++プログラムをVisual Studio 2022で開いてみます。

ファイル名の末尾に’#’ がつけば、no_volというフラグが0になって、データの

加工をしないようにプログラムされています。

 

またHEXデータを生成するmake_hex()というメソッドはパラメータとしてno_vol

有り/なし を渡すようになっています。

当然プログラムには問題がないようですが、私のファイル名の付け方がまずくて認識しない

のかもしれません。そこで、no_volの値に関わらず、データを加工しないようにします。

 

 

これらの変更をした後、リビルドをします。

現状のexeファイルと区別するために、出力をReleaseから、Debugに変更します。

batファイルのWAV2HEX.exeへのパスもDebugに修正します。

 

出力 HEXファイル名も区別のため、変えておく方がいいでしょう。

 

さて、できました。

今度はどうでしょうか?

 

まず、1kHz 16kHz 8bit -6db のHEXファイル

WAVファイルの45バイト目と同じ、83h、98h、AEh、BBh、になりました!

 

次に、400Hz 16kHz 8bit -6db のHEXファイル

WAVファイルの45バイト目からとおなじ、81h、8Ah、94h、9Dh、になっています。

 

これで波形データは正常です。ようやくきちんとオシロで測定できるようになりました!

 1kHz 0db           400Hz 0dB

  

0dBなのでサイン波が飽和しています。 これは正常です。

 

 100Hz -6dB            400Hz -6dB

  

 

 1kHz -6dB           2kHz -6dB

  

 

5kHz -6dB

-6dBでは、0xFFの飽和データが現れないので、ちゃんとサイン波になっています。

振幅を見ると、2~5KHzくらいまでは、ちゃんと周波数特性が取れているようです。

5kHzでは、波形の振幅が少し弱くなります。サンプリングのせいかもしれませんね。

 

この実験に先立ち、アンプ前にいれたCRフィルタの定数は少し変更しました。

時定数 τ=CR で、1kΩと0.1uFで時定数は0.1mS(10kHz)になりますが、

フィルタとしてのカットオフ周波数は f=1/2πCR になります。(勘違いしてました💦)

 

つまり、この時のカットオフ周波数は ≒ 1.5kHz で、-3dBになります。

サンプリング周波数は16kHzにした場合、4~8kHzくらいまで帯域を伸ばしたいですね。

 

R8 1kΩ → 220Ω に変更しローパスフィルタのカットオフ周波数を1.5 →7KHzにしました。

  

 

以上の内容で、Sound Player基板の周波数特性の検討を終了します。

音声のHEX化で思わぬ問題が出たので、検討してよかったです。

今後は、Audicityで音声を事前に加工して、HEX化の際は加工なしにしたいと思います。

サイン波での試験では、スピーカからの音声はノイズっぽい感じは全く出ていません。

 

あとは、実際に音楽を鳴らして、音質の改善を確認したいと思います。

すこしPWMが残っているので、気にはなるところです。

少し高音が落ちても、フィルタを利かすか、現状でいくか検討が必要ですね。

 

それでは、おやすみなさい。

 

過去記事

[Part1] ATTINY402で音声再生のテストをしました

[Part2 テスト終了です] ATTINY402で音声再生のテストをしました

ATTINY用Sounds Player基板の設計をしました!

[Part1] ATTINY用Sounds Player基板を作って動作確認しました!

おもちゃ修理用のSOUND PLAYER基板の小型版 V2を設計しました!