工具/软件:
尊敬的 TI:
在 PCM3070 上、我想使用一个双二阶滤波器、我尝试使用从“PCM3070 应用参考指南“ SLAU332 第 23 页中获得的传递函数计算系数 N0、N1、N2、D1 和 D2:

我使用 Spyder v6.0.6 进行以下代码的计算:
将 NumPy 导入为 NP
将 matplotlib.pyplot 作为 plt 导入
从 scipy 导入信号
#参数输入
fc = 1000 # frekuensi center dalam Hz
Gain_db = 6 #增益达拉姆 dB
Q = 1.0 # Q 因子
Fs = 44100 #采样率
#比例因子 Q23
a = 2**23
#命中参数双二阶滤波器(峰值 EQ)
A_GAIN = 10**(gain_db/40)
Omega = 2 * NP.PI * fc / FS
Alpha = np.sin (omega)/(2 * Q)
# Koefisien 浮点(双二阶峰值 EQ)
B0 = 1 +α* A_GAIN
B1 =–2 * np.cos(ω)
B2 = 1 — α* A_GAIN
A0 = 1 +α/ A_GAIN
A1 =–2 * np.cos(ω)
A2 = 1 — α/A_gain
# Normalizasi agar a0 = 1.
b0 /= a0
B1 /= a0
b2 /= a0
a1 /= a0
a2 /= a0
#康维尔斯克定点 Q23(PCM3070 型)
N0 = int (b0 * A)
N1 = int (B1 * A / 2) # Karena di H(z) ada 2*N1
n2 = int (B2 * A)
D1 = int (-A1 * A / 2)
D2 = int (-A2 * A)
打印(“N0 =“、N0)
打印(“N1 =“、N1)
打印(“N2 =“、N2)
打印(“D1 =“、d1)
打印(“D2 =“、D2)
# Frekuensi respon
W、h = signal.freqz([b0、B1、B2]、[1、 A1、A2]、磨损=2048、FS=FS)
#绘制幅度响应图
PLT.Figure(图大小=(10、5))
plt.semilogx(w、20 * np.log10 (abs (h))
PLT.TITLE (f'Biquad 滤波器频率响应((fc ={<xmt-block1>fc</xmt-block>}Hz、Gain ={gain_db}dB、Q ={Q})</s>fc
PLT.xlabel ('频率 (Hz)')
PLT.ylabel(“经度 (dB)“)
plt.grid(which='both'、LineStyle='--'、linewidth=0.5)
PLT.axvline (fc、color=red'、LineStyle=':'、label=f' fc ={fc}Hz')
plt.legense()
PLT.xlim (20、Fs/2)
PLT.ylim(–15、15)
plt.show()
参数条目:
频率中心= 1000Hz
增益 = 6dB
Q factor = 1.0
采样率= 44100Hz
A = 2^23
系数输出结果由您自己计算:
N0 = 8788157
N1 =–7906226
N2 = 7186155
D1 = 7906226
D2 =–7585704
通过 PurePath Studio 计算系数输出结果:
N0 = 8388607
N1 =–7543271
N2 = 6852365
D1 = 7904299
D2 =–7581812
问题是、为什么我的计算结果与 PurePath Studio 生成的结果不同?
我使用的代码/公式是否有问题?
请告知:
此致、


