Oto sinusoida częstotliwości f = 236.4 Hz
(ma długość 10 milisekund; ma N=441
punkty przy częstotliwości próbkowania fs=44100Hz
) i jej DFT, bez dopełniania zera :
Jedyny wniosek, jaki możemy wyciągnąć patrząc na DFT, to: „Częstotliwość wynosi około 200 Hz”.
Oto sygnał i jego DFT, z dużym wypełnieniem zerowym :
Teraz możemy podać znacznie bardziej precyzyjny wniosek : „Patrząc uważnie na maksimum widma, mogę oszacować częstotliwość 236 Hz” (powiększyłem i stwierdziłem, że maksimum to blisko 236).
Moje pytanie brzmi: dlaczego mówimy, że „zero-padding nie zwiększa rozdzielczości” ? (Często widywałem to zdanie, a potem mówią „dodaje interpolację”)
=> W moim przykładzie wypełnienie zerami pomogło mi znaleźć właściwą częstotliwość z bardziej precyzyjną rozdzielczością!
Odpowiedzi:
Rozdzielczość ma w tym kontekście bardzo konkretną definicję. Odnosi się do twojej zdolności do rozpoznania dwóch oddzielnych tonów na pobliskich częstotliwościach. Zwiększyłeś częstotliwość próbkowania swojego widma, ale nie uzyskałeś żadnej zdolności rozróżniania dwóch tonów, które mogą mieć na przykład 236 Hz i 237 Hz. Zamiast tego będą „stopić się” w jedną kroplę, bez względu na to, ile zastosujesz wypełniania zerowego.
Rozwiązaniem zwiększającym rozdzielczość jest obserwowanie sygnału przez dłuższy czas, a następnie użycie większego DFT. Spowoduje to, że główne płaty, których szerokość jest odwrotnie proporcjonalna do rozmiaru DFT, więc jeśli będziesz obserwować wystarczająco długo, możesz faktycznie rozpoznać częstotliwości wielu tonów, które są blisko siebie.
-
Aby zobaczyć, jak to się dzieje, oto wykres powiększonej FFT dodania dwóch sygnałów: twojej pierwotnej sinusoidy i tej, która różni się od niej częstotliwością od 0 do 100 Hz.
Tylko w kierunku końca różnicy 100 Hz wykresu (tutaj po lewej stronie) można je rozróżnić (rozwiązać).
Kod Scilab do generowania wykresu poniżej.
źródło
x(n)
dłuższe (z0
końcem), zachowujęx(n)
długość N, ALE zmiana jest tutaj: zamiastDFT(k) = \sum x(n) exp(-2*i*pi*n*k/N)
dlak=0,1,...,N-1
, robięDFT2(k) = \sum x(n) exp(-2*i*pi*n*k/(10*N))
dlak=0,1,...,10*N-1
... To jest jak dodawanie kolejnych przedziałów (10 N
przedziałów zamiastN
przedziałów częstotliwości), ale utrzymanie tego samegox(n)
długościN
. Teraz pojemniki będą miały 10 Hz, 20 Hz, ..., 100 Hz, 110 Hz, 120 Hz, ..... => Czy to to samo, co wypełnianie zerami: brak dodatkowej rozdzielczości, a jedynie interpolacja?DFT2(k) = \sum x(n) exp(-2*i*pi*n*k/(10*N))
zak=0,1,...,10*N-1
i zachowanie tej samejx(n)
długościN
daje ten sam wynik niż dopełnianie zera: naprawdę nie większa rozdzielczość, a jedynie interpolacja?Termin „rozdzielczość” ma wiele znaczeń, które mogą dezorientować ludzi próbujących się porozumiewać, używając dwóch różnych znaczeń.
W sensie optycznym, będąc w stanie rozwiązać dwa w pobliżu wyraźnie oddzielone punkty (lub dwa sąsiednie szczyty w widmie) zamiast jednego rozmytego kropelka, wypełnienie zerą nie pomoże. Jest to znaczenie najprawdopodobniej używane w przypadku stwierdzenia, że wypełnienie zerem nie zwiększa rozdzielczości.
Jeśli wymaganie dotyczące rozdzielczości wymaga zapadnięcia (na przykład obniżenia minimum 3 dB) między pikami widmowymi, wówczas rozdzielczość będzie nawet niższa niż odstępy między przedziałami FFT, np. Nawet Fs / N, ale 2X do 3X to lub więcej, w zależności od zastosowanego okna. Słabszym wymogiem rozdzielczości może być tylko odstęp częstotliwości ortogonalnych wektorów bazowych DFT, np. Fs / N.
Jeśli chodzi o punkty kreślenia, tak, wypełnienie zerą da ci więcej punktów do wydrukowania, tak jak w rozdzielczości DPI (punktów kreślenia na cal). To może ułatwić wybranie ekstremy za pomocą gałki ocznej. Są to jednak te same punkty, które można uzyskać, wykonując interpolację wydruku o bardzo wysokiej jakości (interpolacja Sinc) bez żadnego dopełniania zera, więc tak naprawdę nie dodają żadnych informacji, których inaczej nie można by obliczyć bez dopełniania zera.
Jeśli chodzi o śledzenie wysokości tonu, interpolacja paraboliczna lub Sinc (interpolacja między przedziałami wyników FFT) okienkowanego wyniku FFT niezerowanego z zerami, może dać równie dobry wynik, jak z bardziej intensywnego obliczeniowo dłuższego wykresu FFT z zerowaniem. W ten sposób wypełnienie zera zapewnia „lepszy” wynik śledzenia skoku niż zbieranie pików bez wypełnienia zera i bez interpolacji, ale często o wiele mniej efektywnie niż przy użyciu interpolacji.
Jeśli dodasz szum do swojego przykładu, ale nieco mniej niż sygnał, przekonasz się, że pik z wypełnieniem zerowym może być tak samo niedokładny jak pik z wypełnieniem zerowym. Tak więc, w bardziej ogólnym przypadku, być może nie znalazłeś „właściwej” częstotliwości z większą dokładnością niż wcześniej. Zero-padding interpoluje tylko niedokładny wynik z powodu szumu, co jest kolejnym powodem, dla którego mówi się, że nie zwiększa rozdzielczości.
źródło
f=236.4 hz
w tym samym czasie,10ms
ale przy fs = 192 kHz zamiast 44,1 kHz: Czy rzeczywista rozdzielczość częstotliwości będzie wyższa?sinc
krzywa podobna w DFT będzie węższa czy nie? Jeśli nie, oznacza to, że zwiększenie częstotliwości próbkowania nie doda rozdzielczości (co oznacza zdolność do rozwiązywania częstotliwości)