Как сделать КИХ-фильтр методом Паркс-Макклеллана в python - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь сделать КИХ-фильтр в python с помощью метода Паркс-Макклеллана. Но я не смог найти, как это сделать. Это спецификации фильтра, мне нужно изменить код Matlab на python,

fs = 10000; % sampling frequency fCut1=2000; % cuting frequency fCut2=3000;
fCut3=4000;
df=50;
w=[0 fCut1-df fCut1+df fCut2-df fCut2+df fCut3-df fCut3+df fs/2]/(fs/2); % normalized frequencies
A=[0 0 0 1 1 0 0 0 ];% amplitudes
n=50;
a = 1; % FIR Filter
% Find the characteristics for LP with Parks-McClellan algorithm b = firpm(n,w,A);
titleString = ['Custom Filter, Parks-McClellan optimal FIR, order ' num2str(n)];
   plotFreqPhaseResp(b,a,fs,titleString,[fCut1 fCut2 fCut3])

До сих пор я придумал это:

import numpy.linalg as lin
import numpy as np
import scipy.signal as sp
import matplotlib.pyplot as plt
fs = 10000
fCut1=2000
fCut2=3000
fCut3=4000
df=50
w=np.true_divide([0,fCut1-df,fCut1+df,fCut2-df,fCut2+df,fCut3-df,fCut3+df,fs/2],(fs/2))
A=[0 ,0 ,0 ,1, 1, 0, 0, 0 ]
N=50

b=sp.firwin(N,w,pass_zero=True)
a=np.array(1.)
w,H=sp.freqz(b,a,worN=512,plot=None)
f=w/(np.pi)

plt.figure()
plt.close('all')
plt.plot(f,abs(H))
plt.grid(True)

Но выдает ошибку «Файл» / Пользователи / burakmacbook / Документы / Документы - MacBook Air Бурака / Uni / 3/3: 2 / DSP / LAB-RO / untitled11.py ", строка 21, в b = sp.firwin (N, w, pass_zero = True)

File" / Users / burakmacbook / opt / anaconda3 / lib / python3 .7 / site-packages / scipy / signal / fir_filter_design.py ", строка 400, в firwin повысить ValueError (" Неверная частота среза: частоты должны быть "

ValueError: Неверное срезание частота: частоты должны быть больше 0 и меньше, чем fs / 2. Я должен видеть это plot.

...