我正在使用Python和Numpy/Scipy做一些数字过滤工作。
我正在使用scipy.signal.iirderesign生成我的滤波器系数,但它要求滤波器通带系数的格式我不熟悉
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。我不确定)
接受函数
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
。作为奈奎斯特频率π的一部分,这是2*fc/fs = fc/(fs/2)
。一些生活准则:
实值信号的偶分量(余弦之和)的DFT是实对称的,而奇数分量(正弦之和)的DFT是虚对称的。因此,对于实值信号,如典型滤波器的脉冲响应,幅度谱是对称的,而相位谱是反对称的。因此,您只需为范围0到pi指定一个过滤器,该范围被规范化为[0,1]。
如果采样率为fs,则奈奎斯特速率为fs/2。这表示您可以拥有的最高可表示频率,而无需锯齿。它也相当于文档中引用的规范化值1。因此,如果您正在设计一个角频率为fc的低通滤波器,您可以将其输入为fc/(fs/2)。
例如,fs=8000,所以fs/2=4000。你需要一个角频率为3100,截止频率为3300的低通滤波器。结果值为wp=fc/(fs/2)=3100/4000。阻带频率为3300/4000。
有道理吗?
相关问题 更多 >
编程相关推荐