Il modo migliore per inviare un segnale a una frequenza molto bassa (250Hz)?


8

Sono un programmatore di fronte a una domanda elettronica, quindi ho pensato che fosse il posto giusto per chiedere!

  • Ho un sensore di campo magnetico che mi fornisce valori di campo magnetico (asse XYZ) 250 volte al secondo.
  • Un circuito elettronico con un microprocessore programmabile controlla una bobina, che può modificare il campo magnetico abbastanza vicino a questo sensore. Tuttavia, i due dispositivi non sono posizionati rigorosamente, quindi non posso inoltrare sulla misurazione del posizionamento.
  • Desidero inviare 2 diversi tipi di segnali dal circuito al sensore, che possono resistere a forti rumori sul campo magnetico ed essere più brevi di mezzo secondo (Sì, secondi - siamo a 250 Hz!)

La soluzione attuale è quella di trasmettere un'onda quadra a 17Hz, quindi 12Hz, quindi 17Hz per il segnale A, invertendo l'ordine per il segnale B. Ma per rilevare questi segnali è necessario inviare onde abbastanza lunghe, che portano i segnali a una lunghezza di circa 1,5 secondi.

Quindi, la mia domanda qui è: c'è un modo, diciamo un modello, come un modello musicale che può essere usato per segnalare più velocemente ed essere ancora affidabile?

Risposte:


7

Con una frequenza di campionamento di 250 Hz, è possibile inviare facilmente 100 bit / secondo o più. In 0,5 secondi, sarebbe dell'ordine di 50-60 bit.

La domanda è: quali schemi di bit dovresti selezionare che sono facilmente distinguibili l'uno dall'altro e anche dal rumore e dalle interferenze esterne? Una soluzione comune è quella di utilizzare sequenze di bit pseudocasuali, note anche come codici di Barker , che hanno la correlazione incrociata bassa desiderata.

Una tecnica DSP nota come " filtro abbinato " può essere utilizzata per rilevare i codici.


Sembra interessante! Ma stavo vagando quanto potrebbe essere complesso il "filtro abbinato" dal punto di vista computazionale? Richiederebbe calcoli FFT / altri pesanti?
rubmz,

Ho controllato le implementazioni di c ++ per un filtro abbinato, e sembra che richiederebbe calcoli piuttosto pesanti per rilevare il segnale. Quindi potrebbe non essere così utile per me, perché il mio codice laterale del sensore verrebbe eseguito in un ambiente RT, quindi c'è qualche altro filtro che potrebbe permettermi di inviare 2 tipi di segnali, in meno di 0,5 secondi, senza troppi calcoli ?
rubmz,

2
Non richiede una trasformata di Fourier, ma richiede l'equivalente di un filtro FIR (risposta agli impulsi finiti) su ciascuno dei tre canali di input, che è matematicamente equivalente a fare un prodotto punto su due vettori da 128 campioni per ogni nuovo campione che arriva (128 si moltiplica e 128 aggiunge, 250 volte al secondo, per un totale di ~ 33k operazioni di aggiunta-moltiplicazione ogni secondo per filtro, o circa 100k MAC / s secondo totale). Anche un chip DSP di fascia molto bassa come Microchip dsPIC può gestire facilmente questo tipo di calcolo in tempo reale.
Dave Tweed,

2
Giusto per essere chiari, è necessario eseguire quel calcolo separatamente per ogni diverso codice che si desidera poter rilevare. Quindi, ad esempio, se hai 10 codici diversi, ognuno dei quali può essere trasmesso in qualsiasi momento, dovrai eseguire in parallelo dieci filtri corrispondenti, per un totale di 1 M MAC / sec - sempre con la capacità di un chip dsPIC o simile. Se scopri che i codici più corti sono abbastanza robusti nella tua applicazione, puoi usare i filtri più corti e il carico computazionale diminuisce proporzionalmente.
Dave Tweed,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.