co jest lepsze: próbkowanie w górę lub w dół?

13

Chcę porównać dwa sygnały lub krzywe. krzywa próbkowana przy 30 Hz próbka krzywej przy 2000 Hz

Niestety mają różne częstotliwości próbkowania. Pierwsza próbkowana jest przy 30 Hz, druga przy 2000 Hz. Matlab ma funkcję „resample” i pomyślałem, że znacznie ułatwi to porównywanie.

Moje pytanie brzmi: czy mądrzej jest próbkować w dół drugą krzywą, czy próbkować w górę pierwszej?

Edycja: Zrobiłem, jak mi kazano. Na zdjęciu po lewej stronie są oryginalne krzywe. Krzywe po prawej stronie są ponownie próbkowane. Próbka w prawym górnym rogu jest próbkowana w górę, próbka w prawym dolnym rogu jest próbkowana w dół.

Wiem, że krzywe mają różną długość po ponownym próbkowaniu. Jednak drugi sygnał zostanie przycięty do długości pierwszych sygnałów. porównanie

NelsonOrange
źródło
1
Głosowałem za twoim pytaniem. Jak myślisz, co jest mądrzejsze.
jeśli bardzo wysoka precyzja nie ma znaczenia (w tym przypadku myślę, że nie ma), możesz próbkować w dół, szczególnie jeśli przyspiesza to proces i cenisz swój czas w pracy
użytkownik1306322
@Stanley Pawlukiewicz, najwyraźniej tracę wszystkie małe szczyty poprzez próbkowanie w dół. Zatem upsampling może być dobrym rozwiązaniem. Z drugiej strony nie potrzebuję małych szczytów. Myślałem nawet o wygładzeniu drugiego sygnału. Więc w moim przypadku może to nie ma znaczenia, jeśli próbuję w górę lub w dół.
NelsonOrange
Czy potrzebujesz więcej informacji zwrotnych i odpowiedzi?
Laurent Duval

Odpowiedzi:

18

W skrócie:

  • Upsampling : nie powoduje / nie powinien tracić informacji (jeśli jest przeprowadzany mądrze), to jest bezpieczniejszy ,
  • Próbkowanie w dół : może utracić informacje (jeśli zostanie wykonane nierozsądnie), ale bardziej wydajne obliczeniowo .

Więc jeśli porównać dane z różnymi szybkościami, a w fazie oceny, gdy próbuje się określić, jak porównanie powinno być zrobione (które funkcje są w porównaniu z tym, co metryczny, z których externals, jak precyzyjnie, sprawnie, solidności, etc), bardzo podstawowym pierwszym podejściem byłoby podniesienie próby obu sygnałów o liczbę całkowitą w celu uzgodnienia ich próbkowania . Tutaj jest całkiem OK, 6000 Hz może działać dla obu.

Powodem może być praktyka DSP:

  • dzięki upsamplingowi liczb całkowitych nie musisz stosować skomplikowanych technik filtrowania, a prosta interpolacja liniowa jest łatwa. Pamiętaj jednak, że upsampling dodaje trochę informacji.
  • z sygnałami o tej samej skali, możesz wyodrębnić cechy i porównać je: szum, zmienność, nachylenia, pochodne itp. Możesz zastosować poprawną korektę skali / przesunięcia (nie mają tej samej amplitudy), użyć liniowej lub nie transformacje liniowe (Fouriera itp.), aby sprawdzić, czy cechy podobieństwa istnieją w różnych domenach
  • na tym etapie powinieneś być w stanie ocenić i skwantyfikować funkcje / dane potrzebne do zbudowania algorytmu. Możesz oszacować, co możesz stracić z obu danych. Na przykład możesz stworzyć swój algorytm i zobaczyć, jak dobrze jest sygnalizować próbkowanie w dół i jak daleko możesz posunąć się. Tutaj twój algorytm zaczyna być bardziej wydajny.

Gdy poświęcisz temu trochę czasu, jesteś bardziej gotowy, aby zacząć od nowa i zdecydować, czy powinieneś próbować, czy nie, jaką metodą itp. Osiągnąć bezpieczeństwo i wydajność .

Aby zapewnić alternatywy, jeśli zdecydujesz się porównać dane w domenie Fouriera, możesz łatwo rzucić dwa sygnały o różnej długości i częstotliwości próbkowania na tę samą liczbę współczynników Fouriera, pomagając w porównaniu w dziedzinie częstotliwości.

Laurent Duval
źródło
14
Próbkowanie w dół prawie zawsze spowoduje utratę informacji, nawet jeśli nie zostanie to wykonane w sposób nierozsądny. Jednak utrata informacji może być naprawdę mądra, więc ...
opuściłem około
@leftaroundabout W jakich przypadkach próbkowanie w dół nie może utracić informacji?
Willem,
2
@leftaroundabout Nie zgadzam się. Utrata informacji jest zawsze gorsza niż zachowanie. Jedyną mądrą rzeczą jest wiedzieć, które informacje należy wyrzucić, aby uzyskać lepszą reprezentację sygnału, a nie samą utratę informacji.
AlexTP,
5
@Willem: W bardzo oczywistym przypadku sygnał prądu stałego można próbkować w dół do pojedynczej próbki. Zasadniczo każdy sygnał, który nie ma składników powyżej (nowego) limitu Nyquista, może być bezpiecznie próbkowany w dół.
MSalters
1
Można argumentować, że żadna informacja nie jest tracona z sygnału DC na sygnał 1 próbki, ponieważ można przekonwertować z powrotem na sygnał identyczny z sygnałem pierwotnym z 1 próbki. Można argumentować, że informacje zostały utracone, ponieważ jeśli podasz 1 próbkę sygnału osobie bez dalszych informacji i zapytasz „Czy to sygnał DC?” odpowiedzią będzie „Nie wiem, za mało informacji w jednej próbce”.
Anonimowy tchórz
7

Jeśli używasz funkcji takiej jak wykres (x, y), najłatwiejszym sposobem wyświetlenia ich na tym samym wykresie jest po prostu nie ponowne próbkowanie żadnego z nich, ale po prostu wypełnienie każdego wektora x odpowiednimi wartościami dla każdego sygnału, więc oba pojawiają się w miejscu chcesz na wyświetlaczu.

Możesz również skonfigurować wykres tak, aby miał dwie różne osie x (po jednej dla każdej krzywej) z różnymi etykietami i legendami, jeśli chcesz.

Teraz o ponownym próbkowaniu. Użyję Fs jako częstotliwości próbkowania.

Próbkowany sygnał nie może zawierać składników częstotliwości powyżej Fs / 2. Jest ograniczony.

Również sygnał, który zawiera tylko składowe częstotliwości aż do częstotliwości F, może być dokładnie reprezentowany przy częstotliwości próbkowania 2F.

Pamiętaj, że ta „dokładna” reprezentacja jest matematyczna, a nie wizualna. Aby uzyskać dobrą reprezentację wizualną, posiadanie 5-10 próbek na okres (a więc żadnych znaczących składników częstotliwości powyżej Fs / 10 lub więcej) naprawdę pomaga mózgowi połączyć kropki. Zobacz ten rysunek: ten sam sygnał, niższa krzywa ma niższą częstotliwość próbkowania, nie ma utraty informacji, ponieważ częstotliwość jest niższa niż Fs / 2, ale nadal wygląda jak bzdura.

wprowadź opis zdjęcia tutaj

Jest to jednak dokładnie ten sam sygnał. Jeśli nadpróbkujesz (rekonstruujesz) ten na dole za pomocą filtra cynkowego, dostaniesz ten na górze.

Decimacja (próbkowanie w dół) spowoduje zawrócenie wszystkich składników częstotliwości wyższych niż nowy Fs / 2 do sygnału. Dlatego zwykle umieszczamy stromy filtr dolnoprzepustowy przed decymatorem. Na przykład, aby próbkować w dół od Fs = 2000 Hz do Fs = 30 Hz, najpierw zastosowalibyśmy dolnoprzepustowy wyższego rzędu z odcięciem nieco poniżej 15 Hz, a dopiero potem dziesiętnie.

Jednak ten filtr wprowadza przejściowe problemy z reakcją, będzie miał opóźnienie fazowe przy określonych częstotliwościach i może zmienić aspekt wizualny twojego sygnału, czego nie chcesz robić, jeśli chodzi o wizualne porównanie. Obowiązuje powyższa zasada, nie próbuj za dużo, zawsze utrzymuj Fs jako 5-10x najwyższą częstotliwość zainteresowania, jeśli chcesz, aby kształt sygnału coś znaczył. Dlatego zakres 200 MHz musi próbkować przy 1-2 Gsps.

Moje pytanie brzmi: czy mądrzej jest próbkować w dół drugą krzywą, czy próbkować w górę pierwszej?

Jak powiedziano powyżej, najmądrzej jest w ogóle nie zadzierać z danymi i po prostu prezentować każdemu z nich własną oś x na tym samym wykresie.

W niektórych przypadkach wymagana byłaby konwersja częstotliwości próbkowania. Na przykład, aby zmniejszyć liczbę punktów, zmniejszyć zużycie pamięci, przyspieszyć ... lub sprawić, by oba sygnały używały tych samych współrzędnych „x” do wykonywania na nich obliczeń.

W tym przypadku można również użyć pośredniego Fs, próbkować w dół sygnał z wysokimi Fs i próbkować w górę ten z niskimi Fs. Lub po prostu zmniejsz próbkę tego z wysokim Fs.

Uważaj na kryteria Nyquista i nie wybieraj zbyt niskiej częstotliwości próbkowania, w przeciwnym razie stracisz wierność kształtu fali przy wysokim sygnale Fs, dostaniesz przesunięcia fazowe z powodu filtra dolnoprzepustowego itp. Lub jeśli znasz zawartość wysokiej częstotliwości jest nieistotny, możesz dokonać świadomego wyboru. ja

Jeśli użyjesz interpolacji liniowej do dopasowania współrzędnych „x”, pamiętaj, że potrzebuje ona również dość wysokich Fs. Interpolacja działałaby na górnym sygnale na wykresie powyżej, nie działałaby na tym na dole. To samo, jeśli interesują Cię min, max i tym podobne.

I ... zauważ, że nadpróbkowanie / próbkowanie w górę będzie również bałagan z reakcją przejściową, przynajmniej wizualnie. Na przykład, jeśli przeskanujesz krok, usłyszysz dużo dzwonienia z powodu odpowiedzi impulsowej filtra cynkowego. Wynika to z tego, że otrzymujesz sygnał o ograniczonym paśmie, a ładny krok z kwadratowymi narożnikami ma nieskończoną przepustowość.

Jako przykład wezmę kwadratową falę. Pomyśl o oryginalnym próbkowanym sygnale: 0 0 0 1 1 1 0 0 0 1 1 1 ... Twój mózg widzi falę kwadratową.

Ale rzeczywistość jest taka, że ​​powinieneś obrazować każdą próbkę jako kropkę, a między kropkami nie ma nic. To cały sens próbkowania. Między próbkami nie ma nic. Więc kiedy ta fala prostokątna została przesadzona za pomocą interpolacji sinc ... wygląda to śmiesznie.

wprowadź opis zdjęcia tutaj

Jest to po prostu wizualna reprezentacja ograniczonej fali kwadratowej. Wiggles trochę istnieje ... a może nie. Nie ma sposobu, aby dowiedzieć się, czy były one w oryginalnym sygnale, czy nie. W takim przypadku rozwiązaniem byłoby uzyskanie oryginalnej fali prostokątnej z wyższą częstotliwością próbkowania, aby uzyskać lepszą rozdzielczość na krawędzi, idealnie, aby uzyskać kilka próbek na krawędzi, aby nie wyglądała już na krok nieskończonej przepustowości. Wtedy, gdy nadpróbkowanie takiego sygnału, wynik nie będzie miał artefaktów wizualnych.

Tak czy siak. Jak widać ... po prostu zadzieraj z osiami x. To o wiele prostsze.

peufeu
źródło
4

Próbkowanie w dół traci informacje. Próbkowanie w górę jest bezstratne, gdy czynnik jest liczbą całkowitą (biorąc pod uwagę, że pamiętasz również czynnik), ale niektóre informacje są tracone, gdy czynnik nie jest liczbą całkowitą. Próbkowanie w górę mogłoby teoretycznie utracić więcej informacji niż próbkowanie w dół, w przypadku bardzo specyficznych czynników ponownego próbkowania.

Którego powinieneś użyć? To zależy od wymaganego poziomu pewności.

Jeśli nie potrzebujesz pewności matematycznej i potrzebujesz tylko heurystyki, próbkowanie w dół jest szybsze, a próbkowanie w górę jest dokładniejsze .

Jeśli chcesz ograniczyć dokładność obliczeń: jest to możliwe, ale nie mogę ci w tym pomóc.

Willem
źródło
+1, ponieważ udało ci się wycisnąć kilka ważnych informacji w bardzo zwięzłej odpowiedzi.
dsp_user
3

Zależy to od tego, co rozumiesz przez „porównaj” i „mądrzej”. Mądrą rzeczą, która nie jest trudna w Matlabie, jest zrobienie tego w obie strony i samodzielne podjęcie decyzji.

Właściwie, jeśli zmienisz swoje pytanie wynikami z obu podejść, głosowałbym za twoim pytaniem, a więcej osób uznałoby je za interesujące i najprawdopodobniej pomogłoby w znalezieniu „porównania”


źródło
1

Chciałbym zwrócić uwagę na problem występujący podczas wykonywania próbkowania, który może być kluczowy w tej operacji. Gdy sygnał jest próbkowany w górę, a punkty końcowe danych są dalekie od wartości zerowych, następuje efekt zbocza . W praktycznych doświadczeniach ten niepożądany efekt należy wyeliminować. Udostępniam tej społeczności krótki esej ze zdjęciami i kodem, który napisałem na ten temat, który może pomóc w zrozumieniu.

https://medium.com/@davidpinyol91/edge-effects-when-resampling-a-signal-on-matlab-how-to-solve-it-cc6458ab1306

Dacapi
źródło