SonofSamlawのブログ

うひょひょ

ΔΣDACに遅れはあるか?インパルス応答で調べた(2次)

 

DAC 考察(1): new_western_elec (way-nifty.com)

において、

ーーーー

とても大雑把に言うと、DACは2種類に分類出来ます。

 ■マルチビット系DAC

 ■ワンビット系DAC

メリット・デメリットを挙げると、

マルチビットは、変換の直線性を保つのが難しく誤差を生じやすい。

その為DAC-ICを量産するという意味では難しい部分があり、価格が高めになってしまう。

サンプリング毎に、その瞬間の電圧や電流を表現可能で、時間的なズレ(遅延)が発生しないので、アタック音などが明確。 ガツンとくる音が表現できる。 音が太い、厚いと表現することもある。

対する1bit系は、⊿Σ変調(ノイズ・シェーピング)により1と0のみのPWMもしくは、PDMに変換しているので静特性において誤差が少なく直線性が良い。 量子化で発生する誤差の蓄積を次のサンプリングへと加算して行く。 その積み重なった誤差が量子化器の敷居を超えた時に初めて出力へと現れるという原理から、どうしても遅延が発生する。

サンプリング周期のその瞬間、瞬間を表現した信号ではなという点でマルチビットとの音の差が発生すると考えられる。 綺麗で優しい音になる傾向がある。

最近の流行りのPCM-DSD変換もこのワンビットDACの低速版と考えることが出来る。

詳しくは、こちらが参考になると思います。

http://www.tij.co.jp/jp/lit/ml/jajt042/jajt042.pdf

ーーーー

などと書いてあるんでテストしてみた。

遅れはなかった。

ΔΣ DAコンバータ ノイズシェイピングが理解できる - SonofSamlawのブログ (hatenablog.com)

 

 

インパルス応答で、1つはインパルスのフィルタ通過後、もう一つはΔΣDACパルス密度列を同じフィルタに通した後のもので、両者は一致している。遅れはない!

 

 

 

プログラム

 

REM 2次 44.1kHz 2次フィルタ10000Hz

DIM v(100000),c(100000),e(100000),u(100000),vv(100000),vvv(100000),vvvv(100000),uu(100000),uuu(100000),uuuu(100000)
LET n=100000
LET t=2.84E-6
LET tt=0

REM Hz
LET f=1000

LET OM=2*PI*f

LET v(1)=0
LET c(1)=0
LET e(1)=0

LET m=100
SET WINDOW 0,m,-0.02,0.1

FOR i=3 TO n
   LET tt=tt+t
   LET u(i)=0.3*SIN(tt*OM )
   IF i=10 THEN
      LET u(i)=1
   else  
      LET u(i)=0
   END IF  
    
    
    
   LET c(i)=u(i)-e(i-2)+2*e(i-1)
    
   IF c(i)>0 THEN
      LET v(i)=0.5
   else  
      LET v(i)=-0.5
   END IF  
    
   LET e(i)=c(i)-v(i)  
NEXT I

LET a=2*PI*10000
FOR I=3 TO n
   LET vv(i)=(v(i)+v(i-1)-vv(i-1)*(1-2/(t*a)))/(2/(t*a)+1) 
NEXT i
FOR I=3 TO n
   LET vvv(i)=(vv(i)+vv(i-1)-vvv(i-1)*(1-2/(t*a)))/(2/(t*a)+1) 
NEXT i
FOR I=3 TO n
   LET vvvv(i)=(vvv(i)+vvv(i-1)-vvvv(i-1)*(1-2/(t*a)))/(2/(t*a)+1) 
NEXT i

 

LET a=2*PI*10000
FOR I=3 TO n
   LET uu(i)=(u(i)+u(i-1)-uu(i-1)*(1-2/(t*a)))/(2/(t*a)+1) 
NEXT i
FOR I=3 TO n
   LET uuu(i)=(uu(i)+uu(i-1)-uuu(i-1)*(1-2/(t*a)))/(2/(t*a)+1) 
NEXT i
FOR I=3 TO n
   LET uuuu(i)=(uuu(i)+uuu(i-1)-uuuu(i-1)*(1-2/(t*a)))/(2/(t*a)+1) 
NEXT i

 


REM FOR I=3 TO m
REM  PLOT LINES:  i, u(i);
REM NEXT I

PLOT POINTS:0,0

REM FOR I=3 TO m 
REM PLOT LINES:  i, v(i);
REM PLOT LINES:i+1,v(i);
REM NEXT I

PLOT POINTS:0,0
FOR I=3 TO m
   PLOT LINES:  i, vvvv(i);
   PLOT LINES:i+1,vvvv(i);
NEXT I

PLOT POINTS:0,0
FOR I=3 TO m
   PLOT LINES:  i, uuuu(i);
   PLOT LINES:i+1,uuuu(i);
NEXT I

END