Na potrzeby tej odpowiedzi wykorzystam terminologię Matlaba i zdefiniuję „próbkowanie w górę” jako proces wstawiania zer między próbkami wejściowymi oraz „interpolację” jako połączony proces próbkowania w górę i filtrowania w celu usunięcia aliasów m - 1 ( m jest współczynnikiem interpolacji), które wprowadza upsampling. Aby uzyskać wyjaśnienie, w jaki sposób / dlaczego upsampling wprowadza aliasy, zobacz ten wątek .m - 1m - 1m
Ważne jest, aby zrozumieć, że można użyć dowolnego filtra dolnoprzepustowego, aby pozbyć się aliasów i tym samym zakończyć interpolację. Jednak niektóre filtry mają zalety, gdy są używane w interpolacji. Poniżej omówię różne smaki filtrowania interpolacji.
Filtr FIR
Interpolujące filtry FIR są wydajne, ponieważ łączą upsampling i filtrowanie aliasów w jednym kroku. Jest to najłatwiej widoczne na przykładzie. Załóżmy, że mamy sekwencję danych i chcemy ją interpolować dwa razy. Pierwszym krokiem jest zwiększenie próby dwa razy. Zmienia się od pierwotnej sekwencji danych x 0 , x 1 , . . . x N do x 0 , 0 , x 1 , 0 , . . . x N .x [ n ]x0, x1, . . . xN.x0, 0 , x1, 0 , . . . xN.
Załóżmy teraz, że mamy filtr dolnoprzepustowy FIR, , którego użyjemy do usunięcia aliasu. Kiedy zwijamy sekwencję danych o podwyższonej próbce z filtrem, połowa zaczepów filtra jest stymulowana przez próbki niezerowe, a połowa zaczepów jest nieaktywna, ponieważ odpowiadają próbkom zerowym. Połowa, która jest stymulowana, a połowa nieaktywna, obraca się w przód iw tył, gdy filtr przechodzi przez dane. Te dwa zestawy zaworów są czasami nazywane fazami filtrów.h [ n ]
Ten sam efekt można osiągnąć pośrednio przez wyeliminowanie próbkowania w górę i filtrowanie oryginalnej sekwencji danych za pomocą interpolującego filtra FIR. Interpolujący filtr FIR wytwarza wyników dla każdej próbki wejściowej. Dla wszystkich m wyjść filtr będzie działał na tych samych próbkach wejściowych c e i l ( K / m ) (gdzie K jest liczbą zaczepów filtra, a „ceil” jest funkcją sufitu).mmc e i l ( K/ m)
Mam nadzieję, że przykład zilustruje, jak to działa. Załóżmy, że mamy filtr sześciostopniowy i interpolujemy dwa razy. Krany filtrów to [1 -2 4 4 -2 1]. Gdybyśmy dosłownie interpolowali, a następnie filtrowali próbki, stuknięcia filtrów byłyby ustawione w linii (po całkowitym zachodzeniu na siebie) w następujący sposób:
0 : 1x2): - 20 : 4x1: 40 : - 2x0: 1
Następna próbka ...
x3): 10 : - 2x2): 40 : 4x1: - 20 : 1
Następna próbka ...
0 : 1x3): - 20 : 4x2): 40 : - 2x1: 1
I tak dalej. Chodzi o to, że filtr interpolujący pomija faktyczne wstawianie zer i po prostu zmienia na przemian zestaw kranów, których używa obecnie. Zatem poprzednia sekwencja wyglądałaby teraz następująco:
x2): - 2x1: 4x0: 1
x3): 1x2): 4x1: - 2
x3): - 2x2): 4x1: 1
Blokada zerowego zamówienia
Interpolator wstrzymania rzędu zerowego to taki, który po prostu powtarza każdą próbkę razy. Więc czynnik dwóch ekstrapolator rzędu zerowego nawróconych interpolator x 0 , x 1 , . . . x N do x 0 , x 0 , x 1 , x 1 , . . . x N , x N . Ta metoda jest atrakcyjna, ponieważ jest niezwykle łatwa do wdrożenia, zarówno pod względem kodowania, jak i obciążenia obliczeniowego.m - 1x0, x1, . . . xN.x0, x0, x1, x1, . . . xN., xN.
m
Wstrzymanie pierwszego rzędu
x0, x1, . . . xN.x0, x0+ x12), x1, x1+ x2)2), . . . xN.
[ 12)1 12)][ 13)2)3)1 23)12)]
Filtr trójkątny to dwa splecione ze sobą filtry prostokątne, co odpowiada kwadratowi cynku w dziedzinie częstotliwości. Jest to zdecydowany krok w górę od blokady zerowego rzędu, ale nadal nie jest świetny.
Filtr IIR
Nigdy nie korzystałem z interpolującego filtra IIR, więc niewiele o nich powiem. Zakładam, że obowiązują te same argumenty, co w przypadku zwykłego filtrowania - filtry IIR są bardziej wydajne, mogą być niestabilne, nie mają fazy liniowej itp. Nie wierzę, że mogą łączyć etapy próbkowania i filtrowania tak jak filtr FIR, ale mogę się mylić.
Interpolacja FFT
Wrzucę ten, nawet jeśli nie jest to zbyt powszechne (oczywiście nie sądzę, że trzymanie zera jest powszechne). W tym wątku omówiono ponowne próbkowanie FFT, gdzie ponowne próbkowanie to zarówno interpolacja, jak i dziesiętna.
Wytrzymałość wyższego rzędu
Interpolatory wstrzymania drugiego rzędu są zwykle określane jako „interpolatory kwadratowe”. Są nieliniowe i dlatego nie mogą być implementowane jako filtry FIR, które są liniowe. Nie rozumiem dobrze matematyki za nimi, więc nie będę omawiać ich wyników. Powiem jednak, że uważam, że są one dość powszechne poza przetwarzaniem sygnału.
Istnieją również metody wyższego rzędu (trzy lub więcej). Są to tak zwane „regresje wielomianowe”.
EDYTOWAĆ:
Filtry grzebieniowe integratora kaskady (CIC)
Zapomniałem wspomnieć o filtrach CIC . Filtry CIC są używane z dwóch powodów: używają tylko sumatorów / odejmatorów (nie jest to już tak wielka sprawa, ponieważ mnożenia są szybkie i tanie) i mogą dość skutecznie dokonywać naprawdę dużych zmian częstotliwości próbkowania. Ich wadą jest to, że są one zasadniczo wydajną implementacją kaskadowego filtra prostokątnego, więc mają wszystkie wady filtrów prostokątnych, jak omówiono powyżej. Interpolatory CIC są prawie zawsze poprzedzone kompensującym filtrem FIR, który wstępnie zniekształca sygnał w celu wyeliminowania zniekształceń wprowadzonych przez CIC. Jeśli zmiana częstotliwości próbkowania jest wystarczająco duża, warto kosztować filtr wstępnego zniekształcenia.
Odpowiedź Jima całkiem dobrze to obejmuje. Wszystkie metody upsamplingu mają ten sam podstawowy schemat:
Główną różnicą między metodami jest sposób implementacji filtrowania dolnoprzepustowego. Idealnym upsamplerem byłby idealny filtr dolnoprzepustowy, ale to niepraktyczne. Uwzględnienie problemu w dziedzinie częstotliwości pozwala znaleźć odpowiedni algorytm próbkowania w górę dla określonych wymagań:
Interpolatory nieliniowe wysokiego rzędu (splajn, pustelnik, Lagrange) zwykle nie działają dobrze, ponieważ błąd interpolacji jest silnie zależny od sygnału i prawie niemożliwy do odwzorowania na konkretne wymaganie.
źródło
Rozważając różnicę między próbą i wstrzymaniem (tj. Powtarzaniem wartości próbek) a dopełnieniem zerowym, warto zdać sobie sprawę (jak zauważają Jim i Hilmar), że próbkowanie i wstrzymanie można interpretować jako próbkowanie w górę przez dopełnianie zerowe, a następnie Filtr FIR, którego odpowiedź impulsowa składa się z prostokątnego impulsu.
Na przykład, kiedy upsampling od 2 kHz do 64 kHz (współczynnik 32), możemy to zaimplementować, wstawiając 31 zer między każdą parą próbkowania 2 kHz, a następnie filtrując według filtru FIR, który składa się z 32 jedynek, ze wszystkimi innymi współczynniki zero.
sinc
Okazuje się, że ta
sinc
funkcja ma swoje wartości null w dokładnie tych harmonicznych częstotliwości próbkowania niższej. W naszym przykładowym zastosowaniu upsamplingu z 2048 Hz do 65536 Hz odpowiedź częstotliwościowa operacji próbkowania i wstrzymania ma wartości zerowe przy 2048 Hz, 4096 Hz itp.Na tej podstawie dochodzę do wniosku, że każdy filtr interpolujący, który całkowicie tłumi harmoniczne oryginalnej częstotliwości próbkowania, będzie przypominał „próbkuj i przytrzymaj”. Czy to jest poprawne?
źródło