Sto lavorando a un progetto personale. Voglio trasmettere alcuni dati via etere con un vecchio radioamatore.alternativa più veloce a Beep di windows.h()
Il mio primo progetto applicazione funziona così:
costruisco un byte con 4 "segnali":
5000Hz significa "00"
6kHz significa "01"
7khz significa "10"
8kHz significa "11"
9kHz significa uguale alla precedente
poi mi fondo quei 4 paio di pezzi insieme e ricominciare con quello successivo.
La demodulazione funziona alla grande e dovrebbe essere abbastanza veloce, ma sto avendo un problema con la generazione del suono ... è lento ...
Ecco il mio codice di debug:
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
Beep(5000, 100);
Beep(6000, 100);
Beep(7000, 100);
Beep(8000, 100);
Beep(9000, 100);
return 0;
}
I 'm in attesa di 5 segnali acustici, vicini tra loro, 100 ms ciascuno, ma qui è ciò che ottengo (in alto, cinque "100ms bip(), e sul fondo, cinque '20ms bip()':
Come si può vedere , quello che ottengo è un segnale acustico di 50ms seguito da una pausa di 75 ms quando voglio Segnali acustici di 100 ms e segnali acustici di 10 ms seguiti da una pausa di 100 ms quando desidero un segnale acustico di 20 ms.
C'è qualcosa di più veloce e più preciso di Beep() per Windows? (Qualcosa che funziona anche con linux sarebbe ancora meglio perché l'applicazione finale dovrebbe funzionare su un raspberry pi)
Avrei la maggiore larghezza di banda utilizzabile con suoni 3ms (.... 41 byte/sec ... ., che è più che sufficiente per la mia applicazione)
Compiler: g ++ (mingw)
Os: sette 64bits
'Beep()' è sicuramente lo strumento sbagliato per questo lavoro. Non è progettato per essere preciso con qualsiasi mezzo.Dovresti generare i dati della forma d'onda e scriverli su una scheda audio (o equivalente), che è intrinsecamente specifica della piattaforma. Un'altra opzione è l'utilizzo di un microcontrollore che modula il segnale e lo collega al computer (il che renderebbe il trasferimento del codice un po 'più semplice). –
È necessario selezionare un singolo sistema operativo. È improbabile che la soluzione per Windows sia la stessa sul pi. –
@In silico, l'utilizzo di un microcontrollore sarà un'ultima soluzione di ressort (sono abbastanza confortevole con i μC di atmel e ho gli strumenti necessari per incidere la mia PCB ma preferirei andare senza l'hardware aggiuntivo) – srsbsns