2015-01-03 3 views
1

파이썬의 scipy.signal.remez 함수를 사용하여 등역 하이 패스 필터를 설계하려고합니다. 그러나 결과 전달 함수는 통과 대역에서 최대 15dB의 피킹과 단지 6dB의 정지 대역 감쇠로 인해 매우 이상하게 보입니다. 해당 로우 패스 디자인은 괜찮아 보입니다 (~ 0.1 dB 통과 대역 리플 40 dB 정지 대역 감쇠) :파이썬 scipy.signal.remez 고역 통과 필터 설계로 이상한 전달 함수가 생깁니다

#!/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'와 고역 통과 필터를 들어

답변

2

기독교, 홀수 탭을 사용합니다. 짝수 개의 탭을 사용하면 remez은 Nyquist 주파수에서 0을 갖는 Type II 필터를 생성합니다. 알고리즘은 이러한 제약 조건을 가진 고역 통과 필터를 만드는 데 어려움을 겪습니다.

Remez result, L=41

또는 도청 및 type='hilbert'의 짝수 번호를 사용 :

여기 L = 41이 이득의 플롯이다. 필터 계수는 홀수 대칭을 - FIR 필터는이 경우 IV 타입이라고하지만

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

참고 다음은 L=40type='hilbert'로 얻은 결과를 나타낸다.

+0

나는 그것을 알았어야만했는데 왜 밴드 순서 필터가 심지어 실패했는지 설명합니다 ... 정확한 답변을 많이 주셔서 감사합니다! 불행하게도, 나는 당신을 투표 할 수 없습니다. – Chipmuenk

관련 문제