RattleGram
es un software para Android/iOS que mediante el protocolo
Ribbit
convierte texto a tonos de audio para posteriormente modularlos y transmitirlos por radio.
Los detalles técnicos de este sistema son:
- Velocidad de transferencia en crudo: 2800bps
- Modulación
OFDM, utilizado en Wifi, 4G y 5G - Ancho de banda: 256 streams de 6.25Hz -> BW: 1600Hz
Algo que cabe destacar es que estos mensajes no están cifrados de ninguna manera, si queremos cifrado quizás la mejor opción sea reflashear el walkie con NUNU .
Si eres nuevo en el mundo de la radioafición te recomiendo este artÃculo anterior donde se explican los fundamentos.
El artÃculo se compone las siguientes secciones:
- Consideraciones
- Parámetros de configuración
- Configuración Quansheng-k6
- Modo APP
- Modo APP/Radio
- Modo VOX(Tlfn-USB->K1-Radio)
- Repeater mode
- Ultrasonic mode
- Fancy header
- Otras implementaciones
Consideraciones:
Antes de nada aclarar:
- Los mensajes de texto se codifican en una señal de audio.
- Las señales de audio se convierten a datos digitales mediante un muestreo.
- Dependiendo del muestreo la señal digital tendrá mas o menos puntos muestreados lo que implica una mayor resistencia a pérdida/daño de datos ya que para poder reconstruir la señal solo hace falta un mÃnimo de muestras.
Parámetros de configuración:
Los parámetros de configuración son:
Encoder Settings:
| Parámetro | Descripción |
|---|---|
| Sample Rate | Cuántas muestras por segundo tendrá la señal de audio enviada desde el teléfono(por el altavoz o puerto USB) a la radio, debe coincidir con el sample rate utilizado en el Decoder. Si hay interferencias en el ambiente una mayor tasa de muestreo puede ayudar ya que aunque algún bit llegue mal habrán mas muestras próximas haciendo que la señal de audio pueda ser reconstruida. |
| Channel Select | Si la señal se envÃa por cable(no altavoz), podemos seleccionar que canal de la señal de audio a enviar, a veces depende del tipo de cable que utilicemos hasta la radio. En caso de duda utilizar Analytical que envÃa la misma señal idéntica en ambos canales, sea el canal que sea el que le llegue a la radio lo recibirá y si el conector de la radio es estéreo obtendremos una mayor robustez ya que se envÃa el mismo dato dos veces. En caso de utilizar el altavoz, dejarlo en Analytical también. |
| Leading Noise | Añade ruido blanco al principio del sonido transmitido (antes del mensaje real). Sirve para “despertar” el
VOX(Tlfn-USB->K1-Radio)
en caso de que utilicemos dicho modo. |
| Fancy Header | Hace que tu indicativo aparezca “dibujado” en el analizador de espectro. Útil para pruebas. |
| Carrier Frequency | Frecuencia central del sonido. |
| Por defecto ~1500 Hz (mayorÃa de radios: 700-2300 Hz). | |
Muy alta (>18000). Solo debe utilizarse con:Danger Zone -> Ultrasonic: ON.Encoder Settings -> Sample rate: 48000. |
Decoder Settings:
| Parámetro | Descripción |
|---|---|
| Sample Rate | Cuántas veces por segundo se muestrea la señal de audio recibida en el teléfono(por el micrófono o puerto USB), debe coincidir con el sample rate utilizado en el Encoder. |
| Channel Selec | Si la señal se recibe por cable(no altavoz), podemos seleccionar que canal de la señal de audio decodificar, a veces depende del tipo de cable que utilicemos hasta la radio. En caso de duda utilizar Analytical que lee ambos canales, sea el canal que sea el que le llegue a la radio lo recibirá y si el conector de la radio es estéreo obtendremos una mayor robustez ya que se leerá el mismo dato dos veces. En caso de utilizar el altavoz, dejarlo en Analytical también. |
| Audio Source | Selección de fuente de audio para recepción. |
Micrófono: Android suele aplicar automáticamente cancelación de eco y reducción de ruido. Para el oÃdo humano esto es bueno, pero para Rattlegram estos filtros pueden “borrar” parte de los datos digitales, causando errores en la recepción. |
|
| Videocámara: Utiliza el micrófono que está configurado para la grabación de video, útil si estás apuntando el teléfono hacia la fuente del sonido (una radio externa) y quieres usar un micrófono más direccional que ignore el ruido que viene de los lados. | |
Reconocimiento de voz: Configura el micrófono para que sea más sensible a las frecuencias del habla humana. Intenta minimizar el procesamiento agresivo de la voz, pero a veces aplica filtros de frecuencias altas y bajas que pueden distorsionar la señal de Rattlegram. |
|
Sin procesar: La mejor opción para Rattlegram, le pide a Android que entregue el audio completamente en crudo, sin cancelación de ruido, sin control automático de ganancia (AGC) y sin filtros de eco. Al no haber filtros que “limpien” el sonido, la forma de la onda digital llega intacta a la app, lo que permite una decodificación óptima. |
|
Comunicación de voz: Optimiza el audio para aplicaciones tipo VoIP (como llamadas de WhatsApp o Skype), la peor opción para Rattlegram. Aplica una cancelación de eco muy agresiva y ajustes de volumen constantes que destruyen la modulación COFDM. Solo debe usarse si ninguna otra opción funciona. |
|
| Spectrum Analyzer | Muestra una gráfica en tiempo real del audio entrante, también permite visualizar el
Encoder Settings -> Fancy header
. |
Parrot Mode:
El modo repetidor nos permite repetir la señal recibida y de este modo aumentar el alcance. Si ponemos mas de un repetidor se formarán bucles, para evitarlo tendremos que configurar el Debounce, pero esto hará que solo podamos enviar mensajes con el mismo contenido cada X tiempo(el Debounce configurado).
| Parámetro | Descripción |
|---|---|
| Enable/Disable | ON/OFF |
| Delay | Retraso antes de retransmitir un mensaje recibido. |
| Debounce | Tiempo mÃnimo entre retransmisiones de mensajes idénticos. |
Night Mode:
Tema oscuro para no deslumbrar de noche.
Danger Zone:
| Parámetro | Descripción |
|---|---|
| Delete Messages | Borra el historial de mensajes. |
| Enable Ultrasonic | Permite Encoder Settings -> Carrier Frequency >18 kHz (casi inaudible). Requiere Encoder Settings -> Sample rate 48000 Hz. |
| Force Quit | Apagado total para garantizar que la aplicación no siga escuchando ni transmitiendo nada en segundo plano. |
Call Sign:
CallSign para poder identificarnos en una conversación.
Privacy Policy
PolÃtica de privacidad sobre el acceso al micrófono y lo que se hace con ese audio.
About Rattlegram
Información sobre la versión de software, librerÃas, recursos empleados y descarga de responsabilidad.
Configuración Quansheng-k6:
En mi Quansheng UV-K6 debo configurar.
Uso normal:
Encoder/Decoder Settings -> Sample Rate: XXEncoder/Decoder Settings -> Channel Select: First/Analyticalya que es mono.Encoder -> Leading Noise: Si utilizamosVOX(Tlfn-USB->K1-Radio)1-2s.-
Encoder -> Fancy Header: Opcional. Encoder/Decoder Settings -> Carrier Frequency: 1500 Hz
-
Parrot Mode: OFF
Danger Zone -> Enable Ultrasonic: OFF
Pruebas silenciosas:
Encoder/Decoder Settings -> Sample Rate: 48000 HzEncoder/Decoder Settings -> Channel Select: First/Analyticalya que es mono.Encoder -> Leading Noise: Si utilizamosVOX(Tlfn-USB->K1-Radio)1-2s.-
Encoder -> Fancy Header: Opcional. Encoder/Decoder Settings -> Carrier Frequency: >= 18000 Hz
-
Parrot Mode: OFF
Danger Zone -> Enable Ultrasonic: ON
Modo APP:
La aplicación puede funcionar de forma independiente sin necesidad de ninguna radio pero con un alcance muy limitado(hasta donde llegue el sonido), los pasos son:
- Se codifica el texto a una señal acústica.
- Se reproduce por el altavoz.
- El micrófono del teléfono receptor la capta.
- La decodifica a texto de nuevo.
En el video podemos ver su funcionamiento:
Modo APP/Radio:
Ahora vamos a combinar una radio con cada teléfono para aumentar el alcance, el proceso es muy similar:
- Se codifica el texto a una señal acústica.
- Se reproduce por el altavoz.
- El micrófono de la radio la capta.
- La envÃa por radio.
- La radio receptora recibe la señal de radio.
- La reproduce por el altavoz.
- El micrófono del teléfono receptor la capta.
- La decodifica a texto de nuevo.
En el video podemos ver su funcionamiento:
| Emisor | Receptor |
|---|---|
|
|
|
Modo VOX(Tlfn-USB->K1-Radio):
Para probar el modo VOX debemos habilitar las siguientes opciones:
- En el teléfono
Ajustes -> Accesibilidad y comodidad -> Conexión OTG. - En el teléfono, asegurarse de que el nivel de volumen es suficientemente alto.
- En la radio
VOXSen: 1. - Rattlegram
Encoder -> Leading Noise: 1-2s. - Rattlegram
Decoder -> Audio Source: Microphone.
En mis pruebas he testeado tres cables distintos, obteniendo resultados satisfactorios tan solo con uno de ellos, los cables que no han funcionado son:
| APRS-Audio | APRS-K1 |
|---|---|
|
|
Con el cable APRS-Audio no he podido recibir ni enviar, con APRS-K1 he podido enviar pero no recibir.
Con un DigiRig mobile ha funcionado todo como la seda:
|
|
En el video podemos ver su funcionamiento:
| Emisor | Receptor |
|---|---|
|
|
|
Repeater mode:
Como ya explicamos, el modo repetidor nos permite repetir la señal recibida y de este modo aumentar el alcance. El único inconveniente es que si ponemos mas de un repetidor se formarán bucles, para evitarlo tendremos que configurar el Debounce, pero esto hará que solo podamos enviar mensajes idénticos cada X tiempo(el Debounce configurado).
Primero veamos como funciona con un solo repetidor, el teléfono-walkie de la derecha envÃa el mensaje, el teléfono de la izquierda que está configurado en modo Parrot lo recibe y al Delay segundos lo repite, recibiéndolo el propio equipo emisor y cualquiera que pudiese estar en el area de cobertura del repetidor.
Cuando veamos mensajes con el mismo texto y nuestro CallSign debemos deducir que nuestro mensaje ha sido reenviado por un repetidor y estamos escuchando nuestro mensaje pero repetido.
Ahora veamos que pasa cuando se forma un bucle con dos repetidores sin Debounce configurado, en las pruebas utilizo los altavoces porque no tengo dos DigiRigs que serÃa la manera correcta de enviar la señal de radio cuando se está en modo repetidor:
Y veamos también como evitar los bucles mediante Debounce, el mensaje llega al walkie de la izquierda, lo repite, llega al de la derecha que también lo repite ya que está configurado como repetidor, pero el de la izquierda al volver a escuchar el mensaje idéntico antes de los 15s(Debounce: Quarter of a min), no lo repite si no que lo ignora(parte baja de Rattlegram) logrando contener el bucle:
Los bucles entre repetidores ahora están contenidos pero con la restricción de que solo podremos enviar mensajes idénticos cada Debounce segundos.
En el siguiente video podemos ver la restricción comentada en acción:
- El teléfono derecho envÃa el mensaje
aa. - El teléfono izquierdo lo recibe y lo reenvÃa.
- El teléfono derecho recibe y lo reenvÃa también ya que está configurado como repetidor.
- Pero el telefono izquierdo detecta que en los 2 últimos minutos(
Debounce) ya a visto el mismo mensaje, por lo tanto lo ignora(parte baja deRattlegram), evitando el bucle.
Si enviamos un segundo mensaje bb el proceso se repetirá, pero si intentamos enviar un mensaje idéntico dentro de los Debounce segundos vemos que se ignora directamente sin ser reenviado. Si esperamos los 2 minutos del Debounce configurado ya nos permitirá enviar el mensaje sin problemas.
El Debounce en conversaciones normales no suele ser un problema ya que no se suelen repetir mensajes idénticos, además podemos dejar la vantana en un valor bajo de 15s. Pero si todavÃa asà nos causa problemas un pequeño truco es añadir un espacio en blanco al final del mensaje para que no sean idénticos.
Ultrasonic mode:
El modo ultrasónico nos permitirá codificar los mensajes a una frecuencia inaudible para el oÃdo humano, esto puede resultar útil si no tenemos un DigiRig y estamos haciendo pruebas a altas horas de la madrugada o en un entorno en el que no queremos ser detectados por el ruido producido. Pero debemos tener en cuenta que puede dañar nuestra audición si nos exponemos a ultrasonidos durante largos perÃodos de tiempo.
Primero configuramos Danger Zone -> Enable Ultrasonic, Encoder Settings -> Sample rate 48000 Hz, Decoder Settings -> Sample rate 48000 Hz y Encoder Settings -> Carrier Frequency >= 18000. El funcionamiento es exactamente igual, solo que no escucharemos el molesto ruido:
Fancy header:
Como explicamos en la sección
Parámetros de configuración
, la opción Fancy Header hace que el indicativo aparezca “dibujado” en el analizador de espectro.
Tan solo debemos configurar en el receptor Decoder Settings -> Spectrum Analyzer y en el emisor CallSign, Encoder Settings -> Fancy Header -> Enable y darle a la campanita o enviar mensaje.
Esta funcionalidad parece ser algo del propio Rattlegram ya que si emitimos por la radio mediante el DigiRig, en el SDR no se consigue visualizar el CallSign. Además podemos ver que incluso visualizándolo en el propio Rattlegram pasando por radio, el CallSign queda menos claro:
Otras implementaciones:
Existen otras implementaciones del protocolo
Ribbit
, como
esta
.
Pero las pruebas han sido decepcionantes cuanto menos, no tengo claro si es porque el proyecto experimenta cambios continúos que rompen el código, porque los teléfonos aplican filtros de audio o si el sistema de audio/browser en Linux es penoso.
Incluso las pruebas de Badkangaroo a Badkangaroo dán error de decodificación y demás problemas:
Message received but could not be decoded
Failed to encode message: Cannot read properties of null (reading 'state')
Failed to access microphone: NotFoundError: Requested device not found
Failed to access microphone: NotSupportedError: AudioContext.createMediaStreamSource: Connecting AudioNodes from AudioContexts with different sample-rate is currently not supported.
Por supuesto la comunicación entre Rattlegram y Badkangaroo ha resultado completamente imposible.
Se ha probado el envÃo de mensajes tanto por sonido como utilizando la radio y utilizando varios móviles en los que uno de ellos si que ha sido capaz de enviar mensajes pero no recibirlos.
En definitiva, un completo desastre.