Python scipy.signal.remez 高通滤波器设计产生奇怪的传递函数
Python scipy.signal.remez high pass filter design yields strange transfer function
我正在尝试使用 python 的 scipy.signal.remez 函数设计等波纹高通滤波器。然而,由此产生的传递函数对我来说看起来很奇怪,通带中有 ~ 15 db 的峰值,而阻带衰减只有 6 dB。相应的低通设计看起来不错(~ 0.1 dB 通带纹波和 40 dB 阻带衰减):
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
# Minimum working example for remez (equiripple) filter designs:
from __future__ import division, print_function
import numpy as np
import scipy.signal as sig
import matplotlib.pyplot as plt
F_PB = 0.1 # corner frequency of pass band
F_SB = 0.15 # corner frequency of stop band
W_PB = 1 # weight factor for pass band
W_SB = 1 # weight factor for stop band
L = 40 # filter order
#b = sig.remez(L, [0, F_PB, F_SB, 0.5], [1, 0], [W_PB, W_SB], Hz = 1) # low pass
b = sig.remez(L, [0, F_PB, F_SB, 0.5], [0, 1], [W_PB, W_SB], Hz = 1) # high pass
# Calculate H(w), w = 0 ... pi, 1024 Pts.
[w, H] = sig.freqz(b, worN = 1024)
# Translate w to normalized frequencies F = 0 ... 0.5:
F = w / (2 * np.pi)
plt.figure(1)
plt.plot(F, 20 * np.log10(abs(H)))
plt.title(r'Magnitude transfer function in dB')
plt.show()
谁能给我解释一下这是怎么回事?
干杯,克里斯蒂安
对于具有默认 remez
参数 type='bandpass'
的高通滤波器,使用奇数个抽头。使用偶数个抽头,remez
创建一个 II 型滤波器,其在奈奎斯特频率处为零。该算法很难创建具有这种约束的高通滤波器。
这是 L = 41
:
时的增益图
或 使用偶数次点击,并且 type='hilbert'
。下面是用L=40
和type='hilbert'
得到的结果:
但是请注意,在这种情况下,FIR 滤波器是类型 IV——滤波器系数具有奇对称性。
我正在尝试使用 python 的 scipy.signal.remez 函数设计等波纹高通滤波器。然而,由此产生的传递函数对我来说看起来很奇怪,通带中有 ~ 15 db 的峰值,而阻带衰减只有 6 dB。相应的低通设计看起来不错(~ 0.1 dB 通带纹波和 40 dB 阻带衰减):
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
# Minimum working example for remez (equiripple) filter designs:
from __future__ import division, print_function
import numpy as np
import scipy.signal as sig
import matplotlib.pyplot as plt
F_PB = 0.1 # corner frequency of pass band
F_SB = 0.15 # corner frequency of stop band
W_PB = 1 # weight factor for pass band
W_SB = 1 # weight factor for stop band
L = 40 # filter order
#b = sig.remez(L, [0, F_PB, F_SB, 0.5], [1, 0], [W_PB, W_SB], Hz = 1) # low pass
b = sig.remez(L, [0, F_PB, F_SB, 0.5], [0, 1], [W_PB, W_SB], Hz = 1) # high pass
# Calculate H(w), w = 0 ... pi, 1024 Pts.
[w, H] = sig.freqz(b, worN = 1024)
# Translate w to normalized frequencies F = 0 ... 0.5:
F = w / (2 * np.pi)
plt.figure(1)
plt.plot(F, 20 * np.log10(abs(H)))
plt.title(r'Magnitude transfer function in dB')
plt.show()
谁能给我解释一下这是怎么回事?
干杯,克里斯蒂安
对于具有默认 remez
参数 type='bandpass'
的高通滤波器,使用奇数个抽头。使用偶数个抽头,remez
创建一个 II 型滤波器,其在奈奎斯特频率处为零。该算法很难创建具有这种约束的高通滤波器。
这是 L = 41
:
或 使用偶数次点击,并且 type='hilbert'
。下面是用L=40
和type='hilbert'
得到的结果:
但是请注意,在这种情况下,FIR 滤波器是类型 IV——滤波器系数具有奇对称性。