Cześć,
Na zajęciach miałem do zaprojektowania filtry rzędu 2, 6 i 60. Miałem zaprojektować przynajmniej 2 z: Chebyshev type I, Chebyshev type II, Butterworth, Elliptic (2 typy filtrów, z czego 3 filtry jednego typu o różnej liczbie rzędów, czyli 6 filtrów). Zdecydowałem się na zaprezentowanie filtrów Czebyszewa typu I i II, jednak napotkałem pewien problem podczas wykreślania zer filtru Czebyszewa typu I, który miał 60 rzędów. Program do rysowania koła jednostkowego, biegunów i zer filtru wyrzucał mi błąd, w którym mówił, że macierz zer filtru jest 0-wymiarowa. Zatem sprawdziłem i faktycznie, była to pusta macierz.
import scipy.signal as sig
no1, de1 = sig.iirfilter(60, [0.3], rp = 1, btype = 'lowpass', ftype = 'cheby1')
zeros, poles, gain = sig.tf2zpk(no1, de1)
print(zeros)
Przetestowałem interesujący mnie fragment kodu, a Python Online Compiler (OnlineGBD) wyrzuca taki błąd:
/usr/lib/python3/dist-packages/scipy/signal/filter_design.py:338: BadCoefficients: Badly conditioned filter coefficients (numerator): the results may be meaningless
"results may be meaningless", BadCoefficients)
Czyli to nie jest błąd tylko jupytera.
Nie jest to raczej błąd w składni. Chciałbym zauważyć, że powyższy kod działa dla filtrów Czebyszewa o rzędach 42 i niższych, dla 43 macierz zer jest pusta. Wykres częstotliwościowy jest normalnie rysowany, nawet jeśli nie ma zer. Czy to jest błąd w którejś z wbudowanych funkcji Pythona? Macie może jakiś pomysł?
Jakby ktoś był zainteresowany całym kodem, to pod spodem załączam link do całego body.
Pozdrawiam
PS na górze piszę w formie przeszłej, ponieważ ostatecznie zdecydowałem się zaimplementować filtr Eliptyczny, dla którego wszystko działa, ale chciałbym dociec, gdzie znajduje się mój błąd.
- freqz.txt (1 KB) - ściągnięć: 75
- Draw_IIR_2.txt (2 KB) - ściągnięć: 129
- 2.4.4.txt (3 KB) - ściągnięć: 107
- check_stability.txt (1 KB) - ściągnięć: 91