- 基本の1次ΔΣ変調器
出力式:
Y = X + (1 - z^-1) Qn
構造:
・入力 X と出力 Y を減算
・差分を積分器 (1 / (1 - z^-1)) に通す
・量子化器 Qn を加え、出力 Y としてフィードバック
- 2次ΔΣ変調器
積分器が2段になる:
Y = X + (1 - z^-1)^2 Qn
構造:
・入力 X とフィードバック z^-1 Y を加算 → 積分器へ
・さらにもう1段の積分器 → 量子化器へ
・量子化器の出力 Y を z^-1 経由で再び入力側に戻す
ここで z^-1 は「1サンプル遅延」を意味する。
つまり「出力を1サンプル遅らせて引き算している」=フィードバック。
- 一般 L 次 ΔΣ変調器
Y = X + (1 - z^-1)^L Qn
構造:
・積分器をL段直列に接続
・各段の入力に「出力 Y の遅延 z^-1」をフィードバック
・これによりノイズ伝達関数が (1 - z^-1)^L となる
- 周波数領域でのフィードバック効果
z = e^(jω) と置換
(1 - z^-1)^L = (1 - e^(-jω))^L
低周波近似:
|(1 - e^(-jω))^L| ≈ ω^L
→ フィードバックにより量子化ノイズは低周波で急激に抑圧される。
- フィードバックの意味
・z^-1 によって「1クロック遅れの出力」を戻す → システム安定化
・この遅延フィードバックがなければ、出力が即座に戻り発散してしまう
・z^-1 フィードバックを含むことで「ループの因果性」を確保できる
import numpy as np
import matplotlib.pyplot as plt
# ==========================
# Parameters
# ==========================
fs = 1000 # Sampling frequency [Hz]
f_in = 10 # Input sine frequency [Hz]
N = 256 # Number of samples
A = 0.8 # Input amplitude (normalized, <1)
t = np.arange(N) / fs
x = A * np.sin(2 * np.pi * f_in * t) # input sinewave
# ==========================
# 1st-order ΔΣ modulator
# ==========================
y1 = np.zeros(N) # output
v1 = 0 # integrator state
for n in range(N):
v1 += x[n] - y1[n-1] if n > 0 else x[n] # integrator with feedback z^-1
y1[n] = 1 if v1 >= 0 else -1 # 1-bit quantizer
# ==========================
# 2nd-order ΔΣ modulator
# ==========================
y2 = np.zeros(N)
v2_1 = 0 # first integrator state
v2_2 = 0 # second integrator state
for n in range(N):
e = x[n] - (y2[n-1] if n > 0 else 0) # feedback z^-1
v2_1 += e # 1st integrator
v2_2 += v2_1 # 2nd integrator
y2[n] = 1 if v2_2 >= 0 else -1 # quantizer
# ==========================
# Plot results
# ==========================
plt.figure(figsize=(12,6))
plt.subplot(3,1,1)
plt.plot(t, x, label="Input sine")
plt.title("Input signal")
plt.grid(); plt.legend()
plt.subplot(3,1,2)
plt.step(t, y1, where='post', label="1st-order ΔΣ output")
plt.title("1st-order Delta-Sigma output (with z^-1 feedback)")
plt.grid(); plt.legend()
plt.subplot(3,1,3)
plt.step(t, y2, where='post', label="2nd-order ΔΣ output")
plt.title("2nd-order Delta-Sigma output (with z^-1 feedback)")
plt.grid(); plt.legend()
plt.tight_layout()
plt.show()