Python西皮.信号.雷梅兹高通滤波器设计产生奇怪的传递函数

2024-06-28 19:56:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python的设计等波纹高通滤波器西皮.信号.雷梅兹功能。然而,在我看来,产生的传递函数看起来很奇怪,通带峰值约15dB,阻带衰减只有6dB。相应的低通设计看起来不错(通带纹波约为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()

谁能给我解释一下发生了什么事吗?在

干杯,克里斯蒂安


Tags: importfordbbandasnpfunctionplt
1条回答
网友
1楼 · 发布于 2024-06-28 19:56:52

对于具有默认^{}参数type='bandpass'的高通滤波器,请使用奇数个抽头。在偶数个抽头的情况下,remez创建了一个II型滤波器,在Nyquist频率下为零。该算法很难在这种约束下创建高通滤波器。在

以下是L = 41时的增益图:

{1美元^

使用偶数个抽头,并且type='hilbert'。以下显示了使用L=40type='hilbert'获得的结果:

Remez result, L=40, type='hilbert'

然而,注意,FIR滤波器是IV型,在这种情况下,滤波器系数具有奇对称性。在

相关问题 更多 >