Python 离散时间采样IIR滤波器系统中从采样/截止频率到pi弧度/采样的转换

Python 离散时间采样IIR滤波器系统中从采样/截止频率到pi弧度/采样的转换,python,signal-processing,scipy,digital-filter,Python,Signal Processing,Scipy,Digital Filter,我正在使用Python和Numpy/Scipy做一些数字过滤工作 我正在使用scipy.signal.iirdesign生成我的滤波器系数,但它需要我不熟悉的格式的滤波器通带系数 wp, ws : float Passband and stopband edge frequencies, normalized from 0 to 1 (1 corresponds to pi radians / sample). For example: Lowpass: wp =

我正在使用Python和Numpy/Scipy做一些数字过滤工作

我正在使用scipy.signal.iirdesign生成我的滤波器系数,但它需要我不熟悉的格式的滤波器通带系数

wp, ws : float

  Passband and stopband edge frequencies, normalized from 0 to 1 (1 corresponds 
      to pi radians / sample). 
  For example:
  Lowpass: wp = 0.2, ws = 0.3
  Highpass: wp = 0.3, ws = 0.2
()

我不熟悉数字滤波器(我有硬件设计背景)。在模拟环境中,我将确定所需的坡度和3db下降点,并从中计算组件值

在这种情况下,如何获取已知的采样率、期望的转角频率和期望的衰减,并从中计算
wp,ws


(这可能更适合math.stackexchange。我不确定)

如果采样率为fs,则Nyquist速率为fs/2。这表示在没有混叠的情况下可以具有的最高可表示频率。它也相当于文档中提到的标准化值1。因此,如果您正在设计角频率为fc的低通滤波器,则应将其输入为fc/(fs/2)

例如,fs=8000,所以fs/2=4000。您需要一个角频率为3100、阻带频率为3300的低通滤波器。结果值为wp=fc/(fs/2)=3100/4000。阻带频率为3300/4000

有意义吗?

使用函数
x(t)=cos(2*pi*fa*t)
。如果我们以fs频率采样,则采样函数是
x(n*ts)=x(n/fs)=cos(2*pi*n*fa/fs)
。混叠(折叠)前的最大频率是Nyquist频率fa=fs/2,标准化为
(fs/2)/fs=1/2
。归一化角频率为
2*pi*1/2 rad/sample=pi rad/sample
。因此,信号
x[n]=cos[pi*n]=[1,-1,1,-1,…]

给定频率的采样版本,例如转角频率
2*pi*fc rad/s
将是
2*pi*fc/fs rad/sample
。作为奈奎斯特频率pi的一部分,这就是
2*fc/fs=fc/(fs/2)

一些生活准则:

exp[j*w*n] = cos[w*n] + j*sin[w*n]
x_even[n] = 0.5*x[n] + 0.5*x[-n]
cos[w*n] = 0.5*exp[j*w*n] + 0.5*exp[-j*w*n]    # cos is even
x_odd[n] = 0.5*x[n] - 0.5*x[-n]
j*sin[w*n] = 0.5*exp[j*w*n] - 0.5*exp[-j*w*n]  # sin is odd

实值信号的偶数分量(余弦之和)的DFT是实的和对称的,而奇数分量(正弦之和)的DFT是虚的和反对称的。因此,对于实值信号,例如典型滤波器的脉冲响应,幅度谱是对称的,而相位谱是反对称的。因此,您只需为0到pi的范围指定一个过滤器,该范围被规范化为[0,1]

这是有道理的。不过,我还是很好奇——π弧度是从哪里来的?