Actualmente estoy implementando la modulación y demodulación acústica FSK. No soy un chico de procesamiento de señales ...
Como usted dice que ha emparejado los filtros y menciona la detección no coherente, creo que ya es una persona de comunicación digital: el paso para ser una persona DSP es bastante pequeño :)
El enfoque SDR sincronizador completo
Entonces, la forma clásica de hacer esto es tomar las salidas de sus dos filtros, (magnitud) cuadrándolos, filtro de paso bajo el resultado a algo por encima de , y durante / después del filtrado diezmado (si posible), para que no desperdiciemos operaciones por segundo.2 fsímbolo, max
Me hice una señal rápida de banda ancha de valor real FSK demod (creo que si volviera a hacer esto, habría reemplazado los dos filtros de paso de banda con una traducción de frecuencia combinada y un filtro de paso bajo, dándome una banda base compleja, o arrojé un banco de filtros polifásico en el problema, pero lo que sea) en GNU Radio con la ayuda del compañero de GNU Radio (archivo de diagrama de flujo aquí ):
El punto es que probablemente queremos sincronizar la sincronización de símbolos entre la división y el bloque de umbral. Podríamos hacer después: el enfoque clásico de "diseño de microcontrolador y hardware digital" sería, de hecho, el sumidero de reloj de Muller y Mueller y eso funcionaría igual de bien, pero no desperdiciemos la información de la pendiente.
Entonces, agregaría una sincronización de reloj polifásico aquí; Debo admitir que no podría formular esto mejor de lo que Tom, un discípulo de harris, hizo en la documentación del bloque epónimo GNU Radio :
Sincronizador de tiempo utilizando bancos de filtros polifásicos.
Este bloque realiza la sincronización de tiempo para las señales PAM minimizando la derivada de la señal filtrada, que a su vez maximiza la SNR y minimiza el ISI.
Este enfoque funciona configurando dos bancos de filtros; un banco de filtros contiene el filtro adaptado de conformación de pulso de la señal (como un filtro de coseno elevado por raíz), donde cada rama del banco de filtros contiene una fase diferente del filtro. El segundo banco de filtros contiene las derivadas de los filtros en el primer banco de filtros. Pensando en esto en el dominio del tiempo, el primer banco de filtros contiene filtros que tienen una forma sintética. Queremos alinear la señal de salida que se muestreará exactamente en el pico de la forma sinc. La derivada de sinc contiene un cero en el punto máximo de ( sinc ( 0 ) = 1 ,sinc ). Además, la región alrededor del punto cero es relativamente lineal. Hacemos uso de este hecho para generar la señal de error.sinc ( 0 ) = 1 ,sinc′( 0 ) = 0
Si la señal de los filtros derivados es para el i ésimo filtro, y la salida del filtro coincidente es x i [ n ] , calculamos el error como:reyo[ n ]yoXyo[ n ]
e [ n ] = R { xyo[n]}⋅R{di[n]}+I{xi[n]}⋅I{di[n]}2.0 .
Xyo[ n ]Xyo[ n ]Xyo[ n ]en lugar de solo el signo, es especialmente bueno para señales con baja SNR.
e [ n ]rekreVelocidadreVelocidadreVelocidadrekreVelocidadrekreαreβreαreβganancia24 4
Al darse cuenta de esto es la frecuencia de audio
Por lo tanto, al parametrizar este bloque correctamente (y probablemente reducir bpf_decim
y lpf_decim
dar al sincronizador más margen para cambiar las fases) podría construir una recuperación de sincronización de símbolo muy estable, que sería totalmente exagerado para su aplicación 😁
Como está haciendo un muestreo con una tarjeta de sonido en ambos extremos, y dado que supongo que no tiene que lidiar con Doppler, la velocidad de símbolos tiene una relación fija con las frecuencias de la portadora (por ejemplo, el lado de transmisión tiene una portadora más alta con un período de 8 muestras de tarjeta de sonido, y un símbolo siempre toma, digamos 128 muestras, por lo que hay una relación fija), puede tomar un atajo:
rearctanret[ n ]
En cuanto a la sincronización de paquetes
Bueno, dado que tiene un demodulador en funcionamiento que probablemente se desincronizará demasiado cuando no haya señal presente, solo use una secuencia de datos conocida fija para encontrar su paquete.