Extracción de datos binarios de tarjetas de banda magnética de WAV sin procesar


23

Me enfrento a un desafío complicado: extraer datos binarios de un lector de tarjetas de banda magnética de iPhone . Así es como se ve la magnetización en la tarjeta:

ingrese la descripción de la imagen aquí
Fuente

Aquí está el .WAV que recibe el iPhone cuando desliza una tarjeta (no espere demasiado, es una tarjeta de fidelidad adicional). Eso es tres golpes por cierto, a diferentes velocidades. Este es el volcado de SInt16 sin procesar para el deslizamiento que estoy usando.

Alguien parece haberlo hecho aquí, pero los datos reales que capturo no son particularmente fáciles de procesar.

La lectura comienza (y termina) con un número indeterminado de 'ceros': tenga en cuenta que la onda solo se repite después de que se hayan recolectado 2 ZEROS, esto representa NS seguido de SN:

ingrese la descripción de la imagen aquí

(tenga en cuenta que cada una de las tres líneas me representa deslizar una tarjeta diferente; la tarjeta inferior en esta imagen tiene 15 años, por lo que el campo magnético está claramente degradado en algunos lugares, no visible en esta foto)

Esto permitirá que un algoritmo determine una marca de reloj.

El campo magnético se invierte en cada tictac del reloj. También para un binario 1, el campo magnético se invierte exactamente en el medio de una marca:

ingrese la descripción de la imagen aquí

La secuencia siempre comienza con un centinela de inicio 1101 + 0 (bit de paridad). Puede seleccionar esto en las tres lecturas en el gráfico anterior. Se indica más claramente en el artículo cosmodro que vinculé en la parte superior de la pregunta.

Aquí hay un ejemplo de degradación magnética (más adelante en la lectura de la tarjeta inferior): ingrese la descripción de la imagen aquí

Estoy tratando de encontrar una manera sensata de convertir esta forma de onda en su secuencia binaria correspondiente.

He encontrado un PDF que entra en algunos detalles, pero no puedo entender el algoritmo que están utilizando.

Este PDF contiene una imagen interesante: ingrese la descripción de la imagen aquí

Si pudiera extraer las líneas rojas y azules según este diagrama, podría usar cualquiera de ellas para extraer los datos, pero no puedo entender la lógica detrás de la construcción.

Entonces esta es mi pregunta: ¿Cómo extraigo la secuencia binaria?

PD. Tenga en cuenta que la velocidad de deslizamiento no será constante. Entonces, una vez que se ha determinado el reloj, debe ajustarse constantemente de un tic a otro.

PPS ¿La autocorrelación atraparía pares de garrapatas? (ya que las garrapatas alternarán NS SN ...)


EDITAR (junio '12): necesitaba mucha ayuda en este caso, pero finalmente he completado un lector sólido ( http://www.magstripedecoder.com/ ). ¡Gracias por todos los que ayudaron! Recomiendo #musicdsp en el canal efnet de IRC para cualquier persona lo suficientemente dedicada como para asumir el desafío de familiarizarse con las matemáticas, ¡es realmente muy difícil!


¿Podría publicar el archivo wav real?
endolito el

1
¡Hecho! 9876543210
P i


Muchas gracias Yoda por editar y ordenar la pregunta.
P i

Menciona tres cartas en su pregunta. ¿Con qué tarjeta está asociado el archivo WAV que adjuntaste?
Jason R

Respuestas:


10

Esto se llama código de marca bifase , y debe enfocarse en los cruces por cero en lugar de las amplitudes de pulso. Sin embargo, tiene múltiples cruces por cero por pulso, debido a los filtros de corte bajo inherentes a la toma y la entrada de micrófono del teléfono. El tuyo cae más lejos que esto entre transiciones y cruza cero:

ingrese la descripción de la imagen aquí

Puede restaurar una forma más pulsante utilizando un filtro de bajo impulso:

ingrese la descripción de la imagen aquí

y luego miden las longitudes de pulso por el tiempo que pasan por encima de un umbral. Tal vez una mejor idea es diferenciar la entrada para hacer las transiciones en picos grandes, tomar el valor absoluto y detectarlos cuando superan algún umbral:

ingrese la descripción de la imagen aquí

Luego mida el tiempo entre pulsos, y cuando el tiempo entre dos pulsos es aproximadamente el mismo que los dos últimos pulsos, es un 0, cuando es aproximadamente la mitad de lo que era entre los dos últimos pulsos, es un 1.

La degradación magnética de la que habla debe ser fácil de eliminar con un filtro de paso bajo.


¡Gracias! He encontrado algunas correlaciones muy interesantes trabajando con la segunda derivada que publicaré a su debido tiempo. ¿Puedes dar más detalles sobre el filtro de bajo impulso? No tengo idea de cómo implementar esto ...
P i

@endolith ¿Podría agregar mejores etiquetas para la pregunta? Lo etiqueté como codificación diferencial , según su respuesta, pero conoce mejor este tema.
Lorem Ipsum

@yoda: Jaja no, no lo hago. Acabo de enterarme hace unas horas para escribir esta respuesta.
endolito el

@endolith Acabo de encontrar esto, esto es bueno, pero ¿puedes explicar este 'filtro de bajo impulso'? Parece realmente interesante, y Google no es de mucha ayuda ...
Spacey

@Mohammad: solo un filtro que aumenta las frecuencias bajas mientras deja las altas sin cambios. Creo que usé un ecualizador gráfico en Adobe Audition. Pruebe con un filtro de estantería crca.ucsd.edu/~msp/techniques/latest/book-html/node142.html
endolith

4

Esto fue todo un desafío. Intenté al menos cuatro enfoques antes de descifrarlo. Así es como lo hice:

ingrese la descripción de la imagen aquí

Comienzo suavizando los datos ( primera lectura ) con un simple ...

x_new = 0.9 * x_prev + 0.1 * x_in

... filtro IIR. Hago esto en ambas direcciones ( segunda lectura ). Esto elimina todo el ruido difuso, sin embargo, crea discontinuidades que regresan con una venganza en los derivados.

Luego obtengo todas las derivadas hasta la cuarta (las lecturas tercera y cuarta representan la tercera y cuarta derivada), y creo una nueva función:

g(x) = f'''(x)^2 + k*f''''(x)^2

¿Por qué? porque noté que cuando llegamos a la tercera derivada, lo que tenemos es efectivamente una sinusoide dentro de un sobre:

ingrese la descripción de la imagen aquí

... y todos saben desde la escuela secundaria que:

sin^2 + cos^2=1 

ingrese la descripción de la imagen aquí

y que el pecado y el cos se diferencian entre sí:

ingrese la descripción de la imagen aquí

Por lo tanto, el sobre implícito se puede recuperar.

¿Por qué derivados 3 y 4? básicamente cada derivada superior purifica la señal. Lo que es sinusoidal permanece sinusoidal (solo cambia la fase 90 °, así que sin-> cos, etc.) mientras que lo que no es se cae.

Quería usar 11 y 12 o algo loco, pero las derivadas se desmoronan bastante rápido, 4 es lo más alto que puedo obtener antes de que las cosas se vuelvan locas, incluso cuando las pequeñas líneas derivadas que ves en la imagen se suavizan mucho.

Esto produce un pequeño golpe maravilloso en cada transición de flujo ( quinta lectura ).

Luego camino a través de los puntos de inflexión, rechazando trapos ( sexta lectura ).

Finalmente paso por los máximos ( séptima lectura ), evaluando si cada salto es medio paso o un paso completo, y luego reconstruyo el binario.

¡Hurra!

EDITAR: Hace ya varios meses que completé este proyecto. El desafío más difícil es construir alguna transformación que aísle las transiciones de flujo; técnicamente hablando, 'recuperar el sobre de amplitud'. Esto se hace construyendo la señal de cambio de fase π / 2 a partir de la original (esto también se conoce como señal de cuadratura). entonces E (t) ^ 2 = S (t) ^ 2 + Q (S (t)) ^ 2.

Para obtener la señal de cuadratura, simplemente hice una FFT, y giré cada contenedor un cuarto de vuelta, luego recombiné los componentes espectrales modificados.

Hay mucha terminología abusiva confusa en este campo; las palabras clave son 'señal analítica', 'transformación de Hilbert' ... He evitado usar esas palabras clave ya que diferentes disciplinas les asignan diferentes significados.

Hay una forma mucho más inteligente de lograr esta envolvente de amplitud utilizando filtros digitales, evitando así la transformación de Fourier. Esto permite que el algoritmo se ejecute en microcontroladores de muy baja potencia.

Este proceso produce una forma de onda que debería tener una protuberancia única sobre cada transición de flujo.

Decodificar esta forma de onda en una secuencia binaria sigue siendo una tarea no trivial. la complejidad y este componente es algorítmico más que matemático; La dificultad es comparable.

En general, este es un problema extremadamente difícil. Me llevó la mejor parte de tres meses lograr su algoritmo de rendimiento. En el tiempo completo documentaré mi enfoque y produciré un motor de decodificador disponible al público.


1
Los cabezales de lectura pueden verse afectados por dominios magnéticos adyacentes, así como por la transición que se encuentra actualmente debajo del cabezal de lectura, que tiende a empujar las transiciones de lectura hacia adelante y hacia atrás en el tiempo, dependiendo del patrón de bits circundante.
hotpaw2

Tenga en cuenta que esta técnica no es confiable. Aunque ofrece excelentes resultados para la mayor parte de la pista, no logra producir un aumento único para cada transición de flujo desde el principio. es decir, crea un doble golpe. Supongo que la forma de onda de entrada no es adecuadamente sinusoidal en este punto. Así que todavía estoy buscando técnicas.
P i

Por curiosidad, ¿qué otras definiciones de "señal analítica" o "transformación de Hilbert" has encontrado? Si está buscando la envolvente de la señal, puede encontrarla convirtiéndola primero en una señal analítica (compleja). Hay algunas formas de hacer esto, pero lo que has indicado no se usa normalmente.
Jason R

@JR algunas fuentes parecen definir la señal analítica como el cambio de fase de 90 °, es decir, Quad (f (x)). otros como f (x) + i.Quad (f (x)). Creo que también he visto la transformación de Hilbert definida como ambas. No estoy completamente seguro, así que me he quedado con una notación que no debería ser ambigua. Estoy interesado en otras técnicas para recuperar la envolvente de la señal; dsp.stackexchange.com/questions/424/… parece el lugar correcto para seguir este hilo.
P i
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.