Extraindo dados binários de cartões com tira magnética de WAV bruto

23

Estou diante de um desafio complicado: extrair dados binários de um leitor de cartão de fita magnética do iPhone . É assim que a magnetização do cartão se parece:

insira a descrição da imagem aqui
Fonte

Aqui está o .WAV que o iPhone recebe quando você passa um cartão (não tenha muitas esperanças, é um cartão de fidelidade bônus;)). A propósito, são três golpes, em velocidades diferentes. Este é o dump SInt16 bruto para o furto que estou usando.

Alguém parece ter feito isso aqui, mas os dados reais que capturo não são particularmente fáceis de processar.

A leitura começa (e termina) com um número indeterminado de 'zeros' - observe que a onda só se repete após a coleta de 2 ZEROS, isso representa NS seguido por SN:

insira a descrição da imagem aqui

(observe que cada uma das três linhas me representa passando um cartão diferente; o cartão inferior nesta imagem tem 15 anos; portanto, o campo magnético é claramente severamente degradado em alguns lugares, não visível nesta foto)

Isso permitirá que um algoritmo verifique um relógio.

O campo magnético reverte a cada tique do relógio. Também para um binário 1, o campo magnético reverte exatamente no meio de um tique:

insira a descrição da imagem aqui

A sequência sempre começa com um sentinela inicial 1101 + 0 (bit de paridade). Você pode escolher isso nas três leituras no gráfico acima. É indicado mais claramente no artigo do cosmodro que eu liguei na parte superior da pergunta.

Aqui está um exemplo de degradação magnética (levado adiante na leitura do cartão inferior): insira a descrição da imagem aqui

Estou tentando descobrir uma maneira sensata de converter essa forma de onda em sua sequência binária correspondente.

Eu encontrei um PDF que entra em alguns detalhes, mas não consigo descobrir o algoritmo que eles estão usando.

Este PDF contém uma imagem interessante: insira a descrição da imagem aqui

Se eu pudesse extrair as linhas vermelha e azul conforme este diagrama, poderia usar qualquer uma delas para extrair os dados, mas não consigo descobrir a lógica por trás da construção.

Portanto, esta é a minha pergunta: como extrair a sequência binária?

PS. Observe que a velocidade do furto não será constante. Assim, uma vez que o relógio tenha sido determinado, é necessário ajustar constantemente o número de um tick para o próximo.

PPS. A autocorrelação pegaria pares de tiques? (visto que os ticks alternarão o NS SN ...)


EDIT (junho '12): Eu precisava de muita ajuda nesse caso, mas finalmente completei um sólido leitor ( http://www.magstripedecoder.com/ ). Obrigado a todos que ajudaram! Eu recomendo #musicdsp no canal efnet do IRC para qualquer pessoa dedicada o suficiente para enfrentar o desafio de entender a matemática - é realmente muito difícil!

P i
fonte
Você poderia postar o arquivo wav real?
endolith 28/11
1
Feito! 9876543210
P i
Muito obrigado Yoda por editar e arrumar a pergunta.
1
Você mencionou três cartas na sua pergunta. Qual cartão está associado ao arquivo WAV que você anexou?
Jason R

Respostas:

10

Isso é chamado código de marca bifásica , e você precisa se concentrar nas passagens de zero em vez das amplitudes de pulso. Você tem vários cruzamentos de zero por pulso, no entanto, devido aos filtros de corte baixo inerentes ao captador e à entrada de microfone do telefone. O seu cai mais longe que isso entre transições e cruza o zero:

insira a descrição da imagem aqui

Você pode restaurar uma forma mais pulsante usando um filtro de baixo impulso:

insira a descrição da imagem aqui

e, em seguida, meça a duração do pulso em quanto tempo eles passam acima de algum limite. Talvez uma idéia melhor seja diferenciar a entrada para fazer as transições em grandes picos, pegar o valor absoluto e detectá-las quando elas ultrapassarem algum limite:

insira a descrição da imagem aqui

Em seguida, meça o tempo entre os pulsos e, quando o tempo entre dois pulsos for aproximadamente o mesmo que os últimos dois pulsos, será um 0, quando for aproximadamente metade do que era entre os últimos dois pulsos, será 1.

A degradação magnética de que você fala deve ser fácil de remover com um filtro passa-baixo.

endólito
fonte
Obrigado! Eu encontrei algumas correlações muito interessantes trabalhando com a segunda derivada que postarei no devido tempo. Você pode elaborar o filtro de baixo impulso? Eu não tenho nenhuma idéia de como eu poderia implementar isso ...
P i
@ endolith Você poderia adicionar tags melhores para a pergunta? Eu o marquei como codificação diferencial , com base na sua resposta, mas você conhece melhor este tópico.
Lorem Ipsum
@yoda: Haha, não, eu não. Acabei de aprender sobre isso algumas horas atrás para escrever esta resposta.
endolith 28/11
@ Endolith Acabei de me deparar com isso - isso é bom - no entanto, você pode explicar esse 'filtro de baixo impulso'? Parece realmente interessante, e o google não é de muita ajuda ...
Spacey
@ Mohammad: Apenas um filtro que aumenta as baixas frequências enquanto deixa os altos inalterados. Acho que usei um equalizador gráfico no Adobe Audition. Tente um filtro prateleiras crca.ucsd.edu/~msp/techniques/latest/book-html/node142.html
endolith
4

Este foi um grande desafio. Eu tentei pelo menos quatro abordagens antes de quebrar. Foi assim que eu fiz:

insira a descrição da imagem aqui

Começo suavizando os dados ( primeira leitura ) com um simples ...

x_new = 0.9 * x_prev + 0.1 * x_in

... filtro IIR. Faço isso nas duas direções ( segunda leitura ). Isso elimina todo o ruído difuso, no entanto, cria descontinuidades que voltam com uma vingança nos derivados.

Em seguida, pego todas as derivadas até a quarta ( terceira e quarta leituras representam a terceira e a quarta derivada) e crio uma nova função:

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

Por quê? porque notei que, quando chegamos à terceira derivada, o que temos é efetivamente um sinusóide dentro de um envelope:

insira a descrição da imagem aqui

... e todo mundo sabe do ensino médio que:

sin^2 + cos^2=1 

insira a descrição da imagem aqui

e que pecado e cos se diferenciam:

insira a descrição da imagem aqui

Portanto, o envelope implícito pode ser recuperado.

Por que derivativos 3 e 4? basicamente, cada derivada superior purifica o sinal. Aquilo que é sinusoidal permanece sinusoidal (apenas muda a fase 90 ° para que sin-> cos etc) enquanto que o que não é cai.

Eu queria usar 11 e 12 ou algo doido, mas os derivativos desmoronam rapidamente, 4 é o mais alto que posso obter antes que as coisas se complicem, mesmo assim as pequenas linhas de derivativos que você vê na imagem são suavizadas.

Isso produz um pequeno salto maravilhoso em cada transição de fluxo ( quinta leitura ).

Em seguida, passo pelos pontos de inflexão, rejeitando insucessos ( sexta leitura ).

Finalmente , passo pelo máximo ( sétima leitura ), avaliando se cada salto é um meio ou um passo inteiro e depois reconstruo o binário.

Yay!

EDIT: Faz alguns meses que eu concluí este projeto. o desafio mais difícil é construir alguma transformação que isola as transições de fluxo; tecnicamente falando, 'recuperando o envelope de amplitude'. isso é feito através da construção do sinal de deslocamento de fase π / 2 a partir do original (também conhecido como sinal de quadratura). então E (t) ^ 2 = S (t) ^ 2 + Q (S (t)) ^ 2.

Para obter o sinal de quadratura, simplesmente fiz uma FFT, girei cada compartimento um quarto de volta e recombinei os componentes espectrais modificados.

Há muitas terminologias abusivas confusas neste campo; palavras-chave são 'sinal analítico', 'transformação de Hilbert' ... Evitei usar essas palavras-chave porque diferentes disciplinas atribuem significados diferentes a elas.

Existe uma maneira muito mais inteligente de alcançar esse envelope de amplitude usando filtros digitais, evitando assim a transformação de Fourier. Isso permite que o algoritmo seja executado em microcontroladores de potência muito baixa.

Esse processo produz uma forma de onda que deve ter um impacto único sobre cada transição de fluxo.

Decodificar essa forma de onda em uma sequência binária ainda é uma tarefa não trivial. a complexidade e esse componente são algorítmicos e não matemáticos; a dificuldade é comparável.

Tudo isso é um problema extremamente difícil. Levei a melhor parte de três meses para alcançar seu algoritmo de desempenho. Durante todo o tempo, documentarei minha abordagem e produzirei um mecanismo de decodificador disponível ao público.

P i
fonte
1
As cabeças de leitura podem ser afetadas por domínios magnéticos adjacentes, bem como pela transição atualmente sob a cabeça de leitura, que tende a empurrar as transições de leitura para frente e para trás no tempo, dependendo do padrão de bits circundante.
hotpaw2
Observe que essa técnica não é confiável. Embora produza excelentes resultados para a maior parte da pista, ele não produz um impacto exclusivo para cada transição de fluxo desde o início. isto é, cria um impacto duplo. Eu estou supondo porque a forma de onda de entrada não é adequadamente sinusoidal neste momento. então ainda estou procurando técnicas.
P i
Apenas curioso, que outras definições de "sinal analítico" ou "transformação de Hilbert" você encontrou? Se você estiver procurando pelo envelope do sinal, poderá encontrá-lo primeiro convertendo-o em um sinal analítico (complexo). Existem algumas maneiras de fazer isso, mas o que você indicou não costuma ser usado.
Jason R
@JR algumas fontes parecem definir o sinal analítico como a mudança de fase de 90 °, isto é, Quad (f (x)). outros como f (x) + i.Quad (f (x)). Acho que vi a transformação de Hilbert definida como as duas também. Não tenho certeza absoluta, então fiquei com uma notação que deve ser inequívoca. Estou interessado em outras técnicas de recuperar o envelope do sinal; O dsp.stackexchange.com/questions/424/… parece o lugar certo para seguir esse segmento.
P i