電子回路わからん日記

にゃーんと言いながら電子回路いじってます

リアルタイムDSDコンバータのシミュレーション

前回の続きです。

audio-diy.hatenablog.com

 

今回は前回作成した関数を用いてPCMからDSDへの変換のシミュレーションを行います。


シミュレーションの流れ

前回でもお伝えしたかと思いますが、ここで改めてシミュレーションの流れを伝えます。

  1. 浮動小数点数で正弦波を作る
  2. 正弦波を浮動小数点数から符号付き整数(リニアPCM)へ変換
  3. リニアPCMを0次ホールドで64倍に補間(I2SのBCLKを模擬するため)
  4. 補間したデータを1次ΔΣ変調
  5. 変調したデータをローパスフィルタに通しリニアPCMの正弦波と比較

ざっとこんな感じです。


シミュレーションプログラム

シミュレーションプログラムは下記GitHubにアップロードしています。

github.com

 

実行して得られた画像は下の通りです。振幅は[-1, 1]の区間に正規化しています。

最初DSDを通すローパスフィルタは実回路を模すためにIIRで試したんですが、発散してしまいグチャグチャになったので今回は簡単のため10タップの移動平均フィルタです。このあたりもしっかり勉強しなくちゃですね・・・・

f:id:AUDIY:20211227001422p:plain

10タップと次数が小さいのでアレですが、平均化されたデータとPCMデータの振幅値はほぼ一致していますね。

 

1次ΔΣ変調はちゃんと機能していそうです。


ということで、次回からこの「リアルタイムDSDコンバータ」FPGA内部の回路として落とし込んでいきます。

 

実は低次のΔΣ変調であればシミュレーションプログラムをコーディングするよりもFPGAに落とし込む方が簡単だったりします。

 

もちろん、FPGAに落とし込むために作成したVerilogコードもGitHub上で共有できればと思います。