Najlepszy sposób na wysłanie sygnału o bardzo niskiej częstotliwości (250 Hz)?

8

Jestem programistą stojącym przed elektronicznym pytaniem, więc pomyślałem, że tutaj jest miejsce, w którym można zadać pytanie!

  • Mam czujnik pola magnetycznego, który dostarcza mi wartości pola magnetycznego (oś XYZ) 250 razy na sekundę.
  • Obwód elektroniczny z programowalnym mikroprocesorem steruje cewką, która może zmieniać pole magnetyczne wystarczająco blisko tego czujnika. Jednak oba urządzenia nie są ściśle ustawione, więc nie mogę polegać na pomiarze położenia.
  • Chcę wysłać 2 różne rodzaje sygnałów z obwodu do czujnika, które mogą wytrzymać silne hałasy w polu magnetycznym i być krótsze niż pół sekundy (Tak, sekundy - jesteśmy w 250 Hz!)

Obecnym rozwiązaniem jest transmisja fali prostokątnej 17 Hz, następnie 12 Hz, a następnie 17 Hz dla sygnału A, odwrócenie kolejności sygnału B. Jednak w celu wykrycia tych sygnałów konieczne jest wysłanie wystarczająco długich fal, co doprowadza sygnały do ​​długości około 1,5 sekundy.

Więc moje pytanie brzmi: czy istnieje sposób, powiedzmy wzór, taki jak wzór muzyczny, który może być używany do szybszego sygnalizowania i nadal jest niezawodny?

rubmz
źródło

Odpowiedzi:

7

Przy częstotliwości próbkowania wynoszącej 250 Hz można z łatwością wysłać 100 bitów na sekundę lub więcej. W 0,5 sekundy byłoby to rzędu 50-60 bitów.

Pytanie brzmi: jakie wzory bitowe należy wybrać, które można łatwo odróżnić od siebie, a także od zewnętrznego hałasu i zakłóceń? Częstym rozwiązaniem jest stosowanie pseudolosowych sekwencji bitów, znanych również jako kody Barkera , które mają pożądaną niską korelację krzyżową.

Do wykrywania kodów można zastosować technikę DSP znaną jako „ filtr dopasowany ”.

Dave Tweed
źródło
Brzmi interesująco! Ale zastanawiałem się, jak skomplikowany obliczeniowo może być „dopasowany filtr”? Czy wymagałoby to ciężkich obliczeń FFT / innych obliczeń?
rubmz
Sprawdziłem implementacje c ++ pod kątem filtru dopasowanego i wydaje się, że wykrycie sygnału wymagałoby dość ciężkich obliczeń. Może więc nie być dla mnie tak przydatny, ponieważ mój kod z boku czujnika działałby w środowisku RT, więc czy istnieje jakikolwiek inny filtr, który pozwala mi wysyłać 2 rodzaje sygnałów w mniej niż 0,5 sekundy, bez zbyt wielu obliczeń ?
rubmz
2
Nie wymaga transformacji Fouriera, ale wymaga ekwiwalentu filtru FIR (skończonej odpowiedzi impulsowej) na każdym z trzech kanałów wejściowych, co jest matematycznie równoważne do wykonania iloczynu na dwóch wektorach o 128 próbkach dla każdego nowego próbka, która się pojawi (128 razy i 128 razy, 250 razy na sekundę, co daje w sumie ~ 33 000 operacji wielokrotnego dodawania na sekundę na filtr lub około 100 000 MAC / s na sekundę łącznie). Nawet bardzo niski układ DSP, taki jak Microchip dsPIC, może z łatwością poradzić sobie z tego rodzaju obliczeniami w czasie rzeczywistym.
Dave Tweed
2
Żeby było jasne, musisz uruchomić te obliczenia osobno dla każdego kodu, który chcesz wykryć. Na przykład, jeśli masz 10 różnych kodów, z których każdy może być przesłany w dowolnym momencie, będziesz musiał uruchomić dziesięć dopasowanych filtrów równolegle, w sumie dla 1M MAC / s - wciąż w zakresie możliwości dsPIC lub podobny układ. Jeśli okaże się, że krótsze kody są wystarczająco niezawodne w aplikacji, można użyć odpowiednio krótszych filtrów, a obciążenie obliczeniowe spada proporcjonalnie.
Dave Tweed