【问题标题】:Find equivalent digital filter找到等效的数字滤波器
【发布时间】:2018-03-21 21:50:50
【问题描述】:

我正在尝试为简单的 RC 滤波器找到等效的数字滤波器。预兆图不对齐,我不知道为什么。

================================================ =====

import numpy as np
import scipy.signal as sig
import matplotlib.pyplot as plt

# Analog filter
tau = 0.001 # param
lti = sig.lti([1], [tau, 1])

# Equivalent digital filter
fs = 20000 # param

T = 1 / fs
wd = 1 / tau
wa = 2 / T * np.tan(wd * T / 2)
dtau = 1 / wa
dnum, dden = sig.bilinear([1], [dtau, 1], fs)
dlti = sig.dlti(dnum, dden)

w, mag, phase = sig.bode(lti)
dw, dmag, dphase = sig.dbode(dlti)

plt.figure()

plt.subplot(211)
plt.semilogx(w, mag)    # Bode magnitude plot
plt.semilogx(dw, dmag)

plt.subplot(212)
plt.semilogx(w, phase)  # Bode phase plot
plt.semilogx(dw, dphase)

plt.show()

【问题讨论】:

    标签: scipy signal-processing


    【解决方案1】:

    sig.bode 在第一个参数中返回频率数组 [rad/s]

    sig.dbode 改为返回频率数组 [rad/time_unit]

    数字信号的时间单位是一个样本,所以需要乘以采样率将弧度/样本转换为弧度/秒:

    plt.subplot(211)
    plt.semilogx(w, mag)    # Bode magnitude plot
    plt.semilogx(dw * fs, dmag)
    
    plt.subplot(212)
    plt.semilogx(w, phase)  # Bode phase plot
    plt.semilogx(dw * fs, dphase)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-06
      • 2010-11-07
      • 1970-01-01
      • 2011-03-04
      • 2016-02-08
      • 2022-01-07
      • 2019-03-12
      • 1970-01-01
      相关资源
      最近更新 更多