Hola querida
En este artículo, por demanda popular, le diremos cómo hacer un módem hidroacústico simple: un poco de procesamiento de señal digital, un poco de programación, un poco de placas de circuito impreso caseras y una gota de hidrología práctica.
Para todos aquellos que estén interesados, ¡le pedimos que sea bienvenido bajo el corte, al reverberante mundo de la comunicación submarina!
Y aquí está la imagen relevante, para llamar la atención:

"En última instancia, el significado de nuestra existencia es gastar energía ... Y si es posible, ya sabes, para que sea interesante para ti y para los demás sea útil".
(C) ABS, mediodía, siglo XXII
Ahorre su tiempo - Resumen
- Los módems acústicos aún no se venden en AliExpress
- Existe un método de detección de tono simple y poco exigente para los recursos informáticos, cuya frecuencia es 4 veces menor que la frecuencia de muestreo; Arduino es suficiente para la implementación
- El código de muestra para PC se encuentra en GitHub
- Hacemos antenas de recepción y transmisión de recolectores de pastel de 10 r cada uno
- Compramos (o lo hacemos nosotros mismos) una placa amplificadora en TDA2030 en Ali por 50 rublos
- Hacemos un preamplificador LUT-ohm, con un costo total de ~ 100 rublos
- Nos conectamos y vamos al estanque
- Alegrarse
Preludio motivacional
Ahora puedes comprar casi cualquier cosa en Aliexpress o eBay. Especialmente muchas cosas diferentes para la fabricación independiente de algo electrónico basado en Arduino. Puede hacer (si no lo compra interesante) una estación meteorológica de escala de medio ambiente con conexión a Internet, un alimentador automático de gatos, un controlador de cervecería doméstica, pero aún no puede comprar un módem sonar, un diseñador para su fabricación o al menos un módulo para adruino. Bien y bien! Y no lo hagas, ahora te diremos cómo hacerlo y también cómo funciona.
Todo el laboratorio durante mucho tiempo pensamos en lo que se puede ofrecer a los amantes para la fabricación independiente. Algo muy simple, que puede ser recogido por un estudiante y de un
palo y una cuerda de lo que todos tienen a la mano, pero que al mismo tiempo necesariamente representa al menos un valor práctico o educativo mínimo.
Algo que promete una mejora larga y emocionante, algo que luego puede transferirse incluso a arduino
, si está mal .
Si abordamos el tema de manera material, nos gustaría ofrecer un tutorial detallado para la fabricación de un dispositivo simple que sería más o menos capaz de transmitir datos en un cuerpo de agua poco profunda (un canal de sonda poco profundo es el más complejo), lo que significaría la producción máxima de una placa de circuito impreso usando LUT, con un costo total que no exceda un par de trescientos rublos en puntos mínimos.
¿Qué haremos hoy?
- recuerde cómo hacer una antena de sonda adecuada y hacer un par;
- conecte una de las antenas a una PC a través de un amplificador en el TDA por ~ 50 rublos y obtenga un transmisor;
- para el segundo, haremos un preamplificador con la ayuda de LUT por ~ 100 rublos;
- escribiremos
(ya escribí todo y lo puse en Git) un módem simple en C # e intentaremos todo en el cuerpo de agua más cercano;
¿Qué necesitamos para esto?
- Dos elementos piezoeléctricos. Por ejemplo, de un reloj o postal ;
- Cable RG-174 / U (o similar) ~ 5 metros;
- sellador acético;
- barniz resistente al agua;
- lámina de textolita, un total de aproximadamente 100x200 mm;
- un amplificador para TDA2030 (por ejemplo, uno para 50 rublos);
- componentes de preamplificador
Como funciona
Toda la idea del módem más simple se basa, de nuevo, en el detector más simple (¿coincidencia?) De un cierto tono, sobre el cual, para mi vergüenza, no he escuchado. Me contó sobre él completamente por casualidad
andrey_9999a . Por cierto, también hizo una placa de preamplificador.
A este respecto, recordé una cita del libro de Leonard Sasskind "La batalla del agujero negro":
“Como experto en vinos, estoy más o menos seguro de que, incluso con los ojos cerrados, puedo distinguir el rojo del blanco. Aún más confiable, distingo el vino de la cerveza. Pero entonces el sabor me decepcionará.
Puedo decirme a mí mismo que, como ingeniero electrónico real, estoy más o menos seguro de que definitivamente puedo soldar dos cables gruesos. Aún más confiable, distingo un soldador caliente de uno frío incluso con los ojos cerrados, pero luego la habilidad me decepcionará. Por lo tanto, todo lo relacionado con el desarrollo y la fabricación de tableros es el trabajo de mis camaradas y colegas
andrey_9999a y
StDmitriev .
Entonces, de vuelta al detector. Es un caso particular simplificado de calcular la integral de Fourier:
En el caso de una señal digital, para calcular la amplitud de un armónico arbitrario, será necesario realizar una transformada de Fourier discreta, para Arduina esto es difícil, pero el truco es que si toma
Fc como la frecuencia portadora de manera que será exactamente 4 veces menor que la frecuencia de muestreo
Fs , entonces La amplitud de este armónico se puede calcular demoníacamente más fácil.
En este caso,
dt = 2π * (Fs / 4) / Fs = π / 2 , y solo 4 muestras caen en el período del portador:

Si todo se desplaza por
π / 4, entonces las muestras tomarán solo dos valores: √2 / 2 y -√2 / 2, por simplicidad dejaremos solo los signos -
"+" y "-" .
La esencia del método es que representamos la fase sinusoidal como una secuencia de signos
"+" "+" "-" "-" , y la fase cosenoidal como
"+" "-" "-" "+" .
Deje que la señal de entrada esté en el búfer
sn , tenemos dos búferes de promedio de anillo para las fases seno y coseno -
bs y
bc de tamaño
N. Los punteros a la cabeza y la cola son comunes para ellos:
bH y
bT . En el momento inicial del tiempo,
bH = N-1, bT = 0 . Contador de ciclo promedio
C = 0 .
Tomamos 4 muestras del búfer de entrada y las agregamos de acuerdo con las secuencias de caracteres.
Ejemplo de códigoa = sn(i)
bs(bH) = a
bc(bH) = a
s1 = s1 + a - bs(bT)
s2 = s2 + a - bc(bT)
bH = (bH + 1) % N
bT = (bT + 1) % N
a = sn(i+1)
bs(bH) = a
bc(bH) = -a
s1 = s1 + a - bs(bT)
s2 = s2 - a - bc(bT)
bH = (bH + 1) % N
bT = (bT + 1) % N
a = sn(i+2)
bs(bH) = -a
bc(bH) = -a
s1 = s1 - a - bs(bT)
s2 = s2 - a - bc(bT)
bH = (bH + 1) % N
bT = (bT + 1) % N
a = sn(i+3)
bs(bH) = -a
bc(bH) = a
s1 = s1 - a - bs(bT)
s2 = s2 + a - bc(bT)
bH = (bH + 1) % N
bT = (bT + 1) % N
Después de cada cuatro muestras procesadas, verificamos el contador de los ciclos de promedio y si ha excedido
N , entonces calculamos la amplitud de la portadora
cA :
if ++cycle >= N cA = sqrt(s1 * s1 + s2 * s2) cycle = 0 end
Así es como se ve en una señal ideal:

La señal en sí se muestra en azul, y los valores de amplitud de la portadora se muestran en rojo (todo se reduce al rango -1..1). En este caso,
N = 2 desde no hay ruido y todo funciona bien de todos modos.
Ahora agregue algo de ruido blanco y vea cómo nuestro detector responderá a esto:

Agregué ruido blanco para que la relación señal-ruido fuera de 0 dB. En la figura anterior, la señal ruidosa se muestra en azul, la señal fuente en verde y el valor de amplitud en rojo. En este caso, el detector en
N = 2 ya no detectó nada, y el mínimo N en el que funciona correctamente es 32. Es decir, El tamaño de la ventana de procesamiento en las muestras fue de
32 * 4 = 128 muestras.
Es decir, ahora podemos analizar la señal de entrada y evaluar un parámetro que cuantifica la presencia de una frecuencia, cuatro veces menor que la frecuencia de muestreo. Si establece un cierto valor de umbral para este parámetro, entonces todo se puede binarizar y, hablando de manera simple, podemos dar una respuesta a la pregunta: ¿hay un tono dado en la señal de entrada o no?
Esto es muy bueno, pero necesitamos transmitir bits, y los bits pueden tomar dos valores.
Implementar un sistema con dos estados de señalización con la ayuda de uno es una idea más o menos, por lo tanto
, no codificaremos uno de los estados con silencio (pausa). Esto dificultaría la detección: sería necesario resaltar de alguna manera el comienzo de la premisa, descubrir cómo organizar su final, etc.
En cambio, "1" y "0" codificaremos con pulsos de diferentes longitudes, entre los bits hay una llamada intervalo de guarda, porque todavía tenemos que lidiar con la propagación de trayectos múltiples y la reverberación. En términos simples, el intervalo de guarda es el lugar (tiempo) donde todas las reflexiones del bit anterior, todos los sonidos posteriores y los ecos desaparecen.
Mirando hacia el futuro, notamos que con una estructura de señal de este tipo, el algoritmo de operación del receptor se simplifica enormemente: esperamos que aparezca el tono, notamos el comienzo, esperamos que el tono desaparezca y nuevamente notamos el tiempo, si el tiempo recibido es más largo que "1", probablemente tomamos un bit con un valor de "1", si se parece más a "0", entonces aparentemente tomamos un bit con un valor de "0".
En general, podemos decir que este es algún tipo de código morse.
Software parte del módem
Para los impacientes,
un ejemplo radica en GitHub . Fue creado en C # (porque para la PC escribo en él y es más conveniente y más rápido para mí).
La maravillosa biblioteca
NAudio se utiliza para reproducir y capturar sonido desde la entrada del micrófono.
Toda la lógica del módem está en la
clase SUAModem (módem acústico subacuático simple).
Los siguientes parámetros se pasan al constructor:
sRateHz doble: frecuencia de muestreo en hercios;
int wSize: el tamaño de la ventana de procesamiento en muestras;
int oneMultiplier: cuántas "ventanas" duran un poco con un valor de "1"
int zeroMultiplier: cuántas "ventanas" duran un poco con un valor de "0"
doble eThreshold - umbral, hablemos más tarde
Para generar una señal a partir de una matriz de bytes, hay un método ModulateData (byte [] data), que devuelve una matriz de muestras firmadas de 16 bits.
public short [] ModulateData (byte [] data) public short[] ModulateData(byte[] data) { double alpha = 0; double phase = 0; List<short> samples = new List<short>(); BitArray bits = new BitArray(data); for (int i = 0; i < bits.Length; i++) { int sLim = (bits[i]) ? oneDurationSmp : zeroDurationSmp; alpha = 0; phase = 0; for (int sIdx = 0; sIdx <= sLim; sIdx++) { alpha = Math.Sin(phase); phase += delta; if (phase >= alimit) phase -= alimit; samples.Add(Convert.ToInt16(alpha * short.MaxValue)); } samples.AddRange(new short[defenseIntervalSmp]); } return samples.ToArray(); }
En el bucle principal por bits transmitidos, se llena la lista de muestras. Dependiendo del bit transmitido actual, se establece la longitud sLim de la señal generada en las muestras. Se agrega un intervalo de guarda después de cada bit.
Por supuesto ...Muchos pueden notar que al generar una señal, uno podría prescindir de la función seno, pero este ejemplo permite, cambiando el valor delta en consecuencia, cambiar la frecuencia del tono generado.
Para generar un tono con una frecuencia
a una frecuencia de muestreo dada
valor correspondiente
calculado simplemente:
Para generar y emitir una señal, existe el método TransmitData (byte [] data), que internamente llama a ModulateData:
Public Double TransmitData (datos de byte []) public double TransmitData(byte[] data) { var samples = ModulateData(data); double txTime = ((double)samples.Length) / SampleRateHz; var rawBytes = new byte[samples.Length * 2]; for (int i = 0; i < samples.Length; i++) { var bts = BitConverter.GetBytes(samples[i]); rawBytes[i * 2] = bts[0]; rawBytes[i * 2 + 1] = bts[1]; } using (var ms = new MemoryStream(rawBytes)) { using (var rs = new RawSourceWaveStream(ms, new WaveFormat(Convert.ToInt32(SampleRateHz), 16, 1))) { using (var wo = new WaveOutEvent()) { wo.Init(rs); wo.Play(); while (wo.PlaybackState == PlaybackState.Playing) { Thread.SpinWait(1); } } rs.Close(); } ms.Close(); } return txTime; }
La clase SUAModem informa la aceptación del siguiente byte utilizando el evento DataReceivedEventHandler.
Las muestras de entrada se envían al análisis utilizando el método ProcessInputSignal (datos cortos []), donde se escriben en el búfer de anillo. El análisis tiene lugar en un hilo separado, en el método del receptor.
Y el receptor mismo vive en el método Recibir:
privado vacío Recibir () private void Receive() int a; while (rCnt >= 4) { a = ring[rRPos]; rRPos = (rRPos + 1) % rSize; rCnt--; dRing1[rHead] = a; dRing2[rHead] = a; s1 += a - dRing1[rTail]; s2 += a - dRing2[rTail]; rHead = (rHead + 1) % windowSize; rTail = (rTail + 1) % windowSize; a = ring[rRPos]; rRPos = (rRPos + 1) % rSize; rCnt--; dRing1[rHead] = a; dRing2[rHead] = -a; s1 += a - dRing1[rTail]; s2 += -a - dRing2[rTail]; rHead = (rHead + 1) % windowSize; rTail = (rTail + 1) % windowSize; a = ring[rRPos]; rRPos = (rRPos + 1) % rSize; rCnt--; dRing1[rHead] = -a; dRing2[rHead] = -a; s1 += -a - dRing1[rTail]; s2 += -a - dRing2[rTail]; rHead = (rHead + 1) % windowSize; rTail = (rTail + 1) % windowSize; a = ring[rRPos]; rRPos = (rRPos + 1) % rSize; rCnt--; dRing1[rHead] = -a; dRing2[rHead] = a; s1 += -a - dRing1[rTail]; s2 += a - dRing2[rTail]; rHead = (rHead + 1) % windowSize; rTail = (rTail + 1) % windowSize; if (++cycle >= windowSize) { cycle = 0; currentEnergy = Math.Sqrt(s1 * s1 + s2 * s2) / windowSize; double de = currentEnergy - prevEnergy; #region analysis if (skip > 0) skip -= windowSize * 4; else { if (isRise) { if (de > -Threshold) { riseSmp += windowSize * 4; } else { // analyse symbol isRise = false; double oneDiff = Math.Abs(oneDurationSmp - riseSmp); double zeroDiff = Math.Abs(zeroDurationSmp - riseSmp); if (oneDiff > zeroDiff) { // Mostly likely "0" AddBit(false); } else { // Mostly likely "1" AddBit(true); } samplesSinceLastBit = 0; skip = defenseIntervalSmp / 2; } } else { if (de > Threshold) { isRise = true; riseSmp = windowSize * 4; } } } #endregion prevEnergy = currentEnergy; if (bPos > 0) { samplesSinceLastBit += 4 * windowSize; if (samplesSinceLastBit >= defenseIntervalSmp * 2 + zeroDurationSmp + oneDurationSmp) { DiscardBits(); } } } } }
Se puede ver en el código que el análisis se lleva a cabo en 4 muestras, si lo desea, puede guardar el estado y procesar una muestra, lo que será útil cuando se transfiera a algún MK débil.
A medida que se reciben los datos, el valor de la amplitud s se calcula a una frecuencia sRateHz / 4. La diferencia entre los valores anteriores y actuales de la amplitud se calcula y luego se compara con un umbral dado, seleccionado experimentalmente. Un ejemplo le permite cambiar este umbral en tiempo real.
Un aumento brusco en la amplitud indica el comienzo de un "bit", una disminución aguda (algo menos aguda debido a la reverberación) indica el final de un "bit".
Después de recibir el siguiente bit, calculamos el intervalo de protección, nos saltamos el número especificado de muestras, hay todo tipo de ecos en ellos, solo interferirán con nosotros.
La parte de hierro del módem.
Entonces, con la estructura de la señal, todo está claro, cómo recibirlo con demasiada claridad. Lo pequeño es aprender a irradiar una señal en el agua y recibirla del agua.
Si aún no tiene antenas de sonda, es hora de que las tenga en
nuestro tutorial anterior .
Me quedé con ellos desde ese momento, así que me salto este paso.
Conectamos la antena que está destinada a la transmisión a
la placa del amplificador con aliexpress . Para varias decenas de metros (tal vez incluso cientos), esto es suficiente para nosotros. Aquí no hay trucos: la salida de la tarjeta de sonido de la computadora portátil va a la entrada del amplificador, que funciona con una batería de plomo-ácido de 12 voltios y 4 Ah. Nuestra antena de transmisión hidroacústica de un tweeter piezoeléctrico está conectada a la salida. En mi caso, se ve así:


En la foto de arriba, en la pantalla hay un pequeño spoiler para el próximo artículo. La próxima vez en las mismas glándulas intentaremos nuevamente transmitir el sonido del "video" a través del agua, pero de una manera completamente diferente a la
última vez .
Con una antena receptora es algo más complicado. Aunque los tweeters piezoeléctricos son muy sensibles, esto todavía no es suficiente. Tendremos que armar una placa de preamplificador con un filtro en la banda de 5-35 kHz.
La ganancia que tomamos es 1000.
El circuito, el diseño de la placa de circuito y la lista de componentes del preamplificador están en nuestro GitHub:
circuito , pistas -
capa superior y
capa inferior ,
BOM .
La
tecnología LUT
se ha discutido cientos de veces, pero también hagamos nuestra parte.
Foto de procesoEntonces, tomamos una revista adecuada, solo teníamos esta a la mano:

Tomamos un par de páginas desde allí e imprimimos las capas en ellas usando una impresora láser.

Combine con agujas y pegamento en un lado, como se muestra en la foto:

Antes de usar la plancha, humedecemos el tóner con alcohol isopropílico:

Planche a través de una hoja A4 doblada cuatro veces:

Remojar en agua tibia debajo del grifo:

Y lavamos los restos de papel. Después de lo cual tenemos una pieza de trabajo lista para grabar:

Cortamos el exceso con la ayuda de tijeras para metal o para quien sea más conveniente.
Envenenamos en cloruro férrico. Especialmente para el artículo, lanzamos nuevo, resultó ser tan exigente que las burbujas provienen activamente de la futura junta:

Como resultado, después de grabar y lavar el tóner, obtenemos un producto semiacabado:


Después de soldar los componentes y lavar, el tablero se ve así.

Y se parece al conjunto de la parte receptora. La energía se suministra desde la misma batería de plomo de 12 voltios:

Descargo de responsabilidad de filtro pequeñoSi el lector quiere cambiar la banda, entonces proponemos contar el filtro de 8º orden montado en un opamp TL084C de 4 canales barato (DA2 en el
diagrama ), resistencias R10-R13, R15-R23 y condensadores C5-C8, C11, C12, C14 y C15.
Por si acaso, aquí está la respuesta de frecuencia de la implementación del filtro actual:

Y aquí hay otro
proyecto para este filtro creado en la aplicación
Qucs Experiencias y pruebas
Para conectarnos a una computadora portátil, usamos un Jack normal de 3.5 mm, la punta es una señal, la del medio no está conectada, la tierra -
polvo a polvo en el suelo. Todas las amplificaciones y cualquier efecto del micrófono deben estar apagados, y el volumen tendrá que reproducirse para alcanzar el nivel óptimo. La cadencia debe ocurrir cuando toca la antena conectada al preamplificador con el dedo y la acaricia ligeramente.
Si simplemente coloca una pieza en otra sin un amplificador y preamplificador y las conecta a la entrada y salida de audio, entonces todo funciona perfectamente. A continuación se muestra una sección de la señal e incluso puede determinar a simple vista dónde están los valores de los bits:

La señal en sí se muestra en azul, la diferencia entre los valores actuales y anteriores de la amplitud (frontal) en rojo, y la diferencia entre los valores anteriores y actuales (disminución) en verde. Puede "demodular" fácilmente esta parte de la premisa: 1 0 0 0 1 1 0. Nuestro cero es dos veces más largo que la unidad, y la duración del intervalo de guarda es igual a la duración de cero.
Además, también sin amplificador ni preamplificador, bajamos nuestras antenas a un tanque de metal, con dimensiones de 3x1.5x1.5. Tenemos esto en el laboratorio, e hicimos una regla de que no haremos ninguna comunicación si de alguna manera ella no puede trabajar en este tanque. El hecho es que en un volumen de energía tan cerrado no hay a dónde ir: el sonido se refleja maravillosamente y repetidamente desde las paredes de metal y en el punto de recepción se obtiene la papilla. Y dado el hecho de que generalmente verificamos los dispositivos prefabricados con energía calculada para miles de metros, puede imaginar lo que está sucediendo allí.
Por ejemplo, dos de nuestros módems
RedLINE funcionan de manera estable en este tanque solo a una distancia de no más de dos metros, y dos
uWAVE funcionan de manera estable a aproximadamente 1 metro. Mientras que el primero en aguas abiertas funciona hasta 8000 metros, y el segundo,
hasta un kilómetro .
Por supuesto, todos los productos comerciales no utilizan esquemas de modulación primitivos, que se analizan en el artículo y son mucho más complicados, pero ahora es importante para nosotros comprender los conceptos básicos y hacer algo útil con nuestras manos.
En general, bajamos las antenas dentro del tanque a una distancia de aproximadamente 50 centímetros y ya obtenemos algo mucho menos hermoso que con el contacto directo de las antenas:

Aunque aquí se usa un intervalo de guarda mucho más largo, todavía es visible que el eco camina casi hasta el siguiente bit, los frentes y especialmente los saltos están muy borrosos. Pero aún puede determinar el contenido del mensaje: 1 0 0 0 1 1 0
En ambos casos, envié el mensaje "123" y estos siete bits pertenecen al símbolo de la unidad.
Parecía algo así, luego la interfaz se rehizo ligeramente

Desde la pantalla de arriba se puede ver que con esas configuraciones, la transmisión del mensaje “¡Hola,
habr ! :-) "que consta de 19 bytes tarda 9.132 segundos, es decir, la velocidad de transmisión fue de 16.6 bits / s. Por cierto, para que el módem funcione en nuestro tanque, tuvimos que aumentar el intervalo de protección para que la velocidad de transmisión cayera a ~ 3 bit / s.
Verificamos el trabajo casero en la piscina, donde constantemente ganaba 10 metros.

También nos dedicamos al trabajo casero en el estanque. Utilicé un hidrófono activo de diseño muy similar al propuesto en el artículo, solo que en lugar de un tweeter piezoeléctrico se utilizó un sensor de los sensores de estacionamiento, la batería se montó allí en una bobina en la que se enrollaba el cable:


La antena del receptor y el transmisor descendió directamente de la orilla, la profundidad allí varía bruscamente de 0,5 a 2 metros. Por extraño que parezca, en el experimento que se muestra en la foto de arriba, las peores condiciones fueron, la distancia era de solo unos 5 metros; este fue generalmente el ajuste inicial. De los 20 mensajes transmitidos, 3 bytes cada uno, en seis de ellos se superó un byte.
Luego, cuando conectamos el receptor a una segunda computadora portátil y lo movimos al otro lado del estanque (distancia de unos 30 metros), la transmisión fue mucho mejor: solo hubo un par de errores con 40 mensajes que varían en tamaño de 3 a 13 bytes.

En la siguiente foto en el mapa, los lugares donde se ubicaron las antenas son visibles.

Conclusión y más investigación.
Según lo prometido, por unos pocos rublos hemos ensamblado un dispositivo que funciona. Aunque su valor práctico es dudoso, el proceso de fabricación y puesta a punto en un estanque será muy útil para los principiantes. Usando el método de detección de portador descrito, es bastante posible encontrar varios sistemas de navegación simples para uso aficionado, y lo que es especialmente bueno, la complejidad computacional le permite implementar el método en un microcontrolador simple.
Para no ser infundado con respecto a la construcción de sistemas de navegación con señales simples, eche un vistazo al
interesante trabajo en el que construyeron un sistema de navegación de largo alcance completo. En este sistema, se determina la posición del pinger, que transmite periódicamente su profundidad. El valor de profundidad está codificado por la distancia entre dos pulsos simples a una frecuencia determinada. Entonces sí, sí, las ollas no son quemadas por los dioses, el camino será dominado por el caminante, la paciencia y el trabajo, estudiar, estudiar, estudiar, eso es todo.
Quizás, si tenemos tiempo, haremos un proyecto de bricolaje para colocar un pinger autónomo que emita señales simples. Ya hicimos algo similar, pero no bricolaje, sobre la base de nuestros módems
uWAVE , sobre los que incluso intentamos
grabar un video . Será muy interesante escuchar sus opiniones sobre este asunto; es muy importante tener la confirmación de que está haciendo algo que no es en vano.
Sin embargo, volviendo al tema principal, observamos lo que podría mejorarse en el esquema propuesto:
- hacer el cálculo del umbral adaptativo
- analizar anchos de señal automáticamente
- intente usar diferentes longitudes para diferentes combinaciones de bits
apriete la codificación de corrección de errores- transfiérelo todo a arduino
- el volumen y el umbral deben ser largos y tediosos para seleccionar, por lo que sería bueno agregar AGC al preamplificador
En esta reunión declararé cerrado, y si está interesado en el tema, aquí hay una lista de nuestros artículos anteriores:
GPS subacuático desde cero por añoGPS subacuático en un robot submarino: experienciaCreamos el módem sonar más pequeño del mundoSobre el efecto de las cianobacterias en las funciones del habla del presidenteHacer una simple antena de sonda fuera de la basuraSesión de video transmisión de sonido a través del agua con exposiciónGPS subacuático en dos transceptoresNavegación bajo el agua: soportar no soportar - estás condenado al éxitoGPS subacuático: continuaciónPS
Como siempre, nos complace escuchar comentarios y sugerencias, buenas críticas y vítores)
PPS
No quite las glándulas lejos, la próxima vez las usaremos nuevamente para transmitir el "video" a través del agua.