원시 WAV에서 이진 자기 띠 카드 데이터 추출


23

까다로운 과제에 직면했습니다 .iPhone 자기 띠 카드 판독기 에서 이진 데이터를 추출하려면 . 카드의 자화는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오
출처

다음은 카드를 스 와이프 할 때 iPhone이받는 .WAV입니다 (너무 희망을 가지지 마십시오. 보너스 포인트 카드입니다). 그건 그렇고 다른 속도로 세 번 스 와이프합니다. 이것은 내가 사용하는 스 와이프에 대한 원시 SInt16 덤프 입니다.

누군가가 여기에서 한 것처럼 보이지만 실제로 캡처하는 데이터는 처리하기 쉽지 않습니다.

불확실한 수의 '0'으로 측정이 시작되고 끝납니다. 웨이브는 2 개의 ZEROS가 수집 된 후에 만 ​​반복됩니다. 이것은 NS 다음에 SN이 나타납니다.

여기에 이미지 설명을 입력하십시오

(세 줄은 각각 다른 카드를 스 와이프하는 것을 나타냅니다.이 이미지의 하단 카드는 15 년이되었으므로이 장면에서는 보이지 않는 자기장이 특정 위치에서 심각하게 저하됩니다.)

이를 통해 알고리즘은 클럭 틱을 확인할 수 있습니다.

각 클럭 틱에서 자기장은 반전됩니다. 또한 이진 1의 경우, 자기장은 진드기의 중간에서 정확하게 반전됩니다.

여기에 이미지 설명을 입력하십시오

시퀀스는 항상 1101 + 0 (패리티 비트) 시작 센티넬로 시작합니다. 위의 그래프에서 3 개의 판독 값 모두에서이를 선택할 수 있습니다. 그것은 질문의 맨 위에 링크 된 우주 기사에서 더 명확하게 표시됩니다.

다음은 자기 열화의 예입니다 (하단 카드 판독 값에서 더 자세히 설명 함). 여기에 이미지 설명을 입력하십시오

이 파형을 해당 이진 시퀀스로 변환하는 합리적인 방법을 찾으려고합니다.

자세한 내용의 PDF 를 찾았 지만 사용중인 알고리즘을 알 수 없습니다.

이 PDF에는 흥미로운 이미지가 하나 있습니다. 여기에 이미지 설명을 입력하십시오

이 다이어그램에 따라 빨간색과 파란색 선을 추출 할 수 있으면 둘 중 하나를 사용하여 데이터를 추출 할 수 있지만 구성의 논리를 파악할 수는 없습니다.

그래서 이것은 내 질문입니다 : 이진 시퀀스를 어떻게 추출합니까?

추신. 스 와이프 속도는 일정하지 않습니다. 따라서 일단 시계가 결정되면 한 틱에서 다음 틱으로 지속적으로 조정해야합니다.

PPS. 자기 상관은 한 의 진드기를 잡을 까요? (진드기로 보면 NS SN이 번갈아 나타납니다 ...)


편집 (6 월 '12) : 나는 이것에 많은 도움이 필요했지만 마침내 나는 견고한 독자 ( http://www.magstripedecoder.com/ )를 완성했습니다 . 도와 주신 모든 분들께 감사드립니다! 수학을 이해하는 데 어려움을 겪을 수있는 사람이라면 누구나 IRC의 efnet 채널에서 #musicdsp를 추천합니다. 정말 어렵습니다!


실제 WAV 파일을 게시 할 수 있습니까?
endolith

1
끝난! 9876543210
P i


질문을 편집하고 정리해 주신 Yoda에게 대단히 감사합니다.
P i

질문에 3 장의 카드를 언급했습니다. 첨부 한 WAV 파일은 어떤 카드입니까?
Jason R

답변:


10

이를 2 상 마크 코드 라고 하며 펄스 진폭 대신 제로 크로싱에 중점을 두어야합니다. 그러나 픽업 및 전화기의 마이크 입력에 고유 한 로우 컷 필터로 인해 펄스 당 여러 개의 제로 크로싱이 있습니다. 전환 사이에 이보다 더 멀리 떨어지고 0을 교차합니다.

여기에 이미지 설명을 입력하십시오

저 부스트 필터를 사용하여 더 거친 모양을 복원 할 수 있습니다.

여기에 이미지 설명을 입력하십시오

그런 다음 임계 값을 초과하는 시간으로 펄스 길이를 측정합니다. 어쩌면 더 좋은 아이디어는 입력을 차별화하여 큰 급상승으로 전환하고 절대 값을 가져 와서 임계 값을 초과 할 때 감지하는 것입니다.

여기에 이미지 설명을 입력하십시오

그런 다음 펄스 사이의 시간을 측정하고 두 펄스 사이의 시간이 마지막 두 펄스와 거의 같은 경우 0입니다. 마지막 두 펄스 사이의 시간의 약 절반이면 1입니다.

저역 통과 필터를 사용하면 자기 열화를 쉽게 제거 할 수 있습니다.


감사! 나는 적법한 과정에서 게시 할 두 번째 파생 상품과 함께 작동하는 매우 흥미로운 상관 관계를 발견했습니다. 저 부스트 필터에 대해 자세히 설명해 주시겠습니까? 나는 이것을 어떻게 구현할 것인지 전혀 모른다.
P i

@endolith 질문에 더 나은 태그를 추가해 주시겠습니까? 귀하의 답변에 따라 differential-coding 태그를 달았 지만이 주제를 더 잘 알고 있습니다.
Lorem Ipsum

@yoda : 하하 아니에요. 방금 몇 시간 전에이 답변을 작성하는 것에 대해 배웠습니다.
endolith

@endolith 방금 이걸 보았습니다. 이것이 좋습니다. 정말 흥미로운 것 같고 구글은 큰 도움이되지 않습니다 ...
Spacey

@Mohammad : 저주파수를 증폭시키면서 고음을 그대로 유지하는 필터입니다. Adobe Audition에서 그래픽 이퀄라이저를 사용했다고 생각합니다. 선반 필터 crca.ucsd.edu/~msp/techniques/latest/book-html/node142.html
endolith

4

이것은 상당히 도전이었습니다. 나는 크래킹하기 전에 적어도 네 가지 접근법을 시도했습니다. 이것이 내가 한 방법입니다.

여기에 이미지 설명을 입력하십시오

나는 간단한 데이터로 데이터를 부드럽게 ( 첫 번째 독서 ) 시작 합니다 ...

x_new = 0.9 * x_prev + 0.1 * x_in

... IIR 필터. 나는 양방향 으로이 작업을 수행합니다 ( 두 번째 읽기 ). 이것은 모든 퍼지 노이즈를 제거하지만 파생 상품의 복수와 함께 불연속을 만듭니다.

그런 다음 모든 파생 상품을 네 번째까지 가져오고 ( 세 번째 및 네 번째 판독 값 은 세 번째 및 네 번째 파생 상품을 나타냄) 새로운 함수를 만듭니다.

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

왜? 우리가 3 차 미분에 도달 할 때 우리가 가진 것은 사실상 봉투 안에있는 정현파라는 것을 알았습니다.

여기에 이미지 설명을 입력하십시오

... 그리고 모두 고등학교에서 다음과 같은 사실을 알고 있습니다.

sin^2 + cos^2=1 

여기에 이미지 설명을 입력하십시오

그리고 그 cos는 서로 구별됩니다 :

여기에 이미지 설명을 입력하십시오

따라서 묵시적 봉투를 복구 할 수 있습니다.

왜 파생 상품 3과 4입니까? 기본적으로 각각의 더 높은 파생물은 신호를 정화합니다. 정현파 인 것은 정현파 상태로 유지되지만 (단지 위상을 90 ° 이동하므로 sin> cos 등) 떨어지지 않습니다.

나는 11 & 12 또는 미친 것을 사용하고 싶었지만 파생물은 매우 빨리 떨어져 나갔습니다.

이것은 모든 플럭스 전이 ( 5 번째 판독 ) 에서 놀라운 작은 충돌을 일으 킵니다 .

나는 전환점을 걸어 다음으로, 불발탄 (거부 여섯 번째 읽기 ) ..

마지막으로 최대 건너 뛰기 ( 7 번째 판독 값 ) 를 살펴보고 각 건너 뛰기가 반 걸음인지 전체 걸음인지 평가 한 다음 이진을 재구성합니다.

예이!

편집 :이 프로젝트를 완료 한 지 몇 달이 지났습니다. 가장 어려운 과제는 플럭스 전이를 분리하는 일부 변환을 구성하는 것입니다. 기술적으로 말하자면, '진폭 엔벨로프 검색'. 이것은 원본으로부터 π / 2 위상 편이 신호를 구성함으로써 수행됩니다 (이는 직교 신호라고도 함). 그런 다음 E (t) ^ 2 = S (t) ^ 2 + Q (S (t)) ^ 2입니다.

직교 신호를 얻기 위해 간단히 FFT를 수행하고 각 구간을 1/4 회전시킨 다음 수정 된 스펙트럼 구성 요소를 다시 결합했습니다.

이 분야에는 혼란스러운 학대 용어가 많이 있습니다. 키워드는 '분석 신호', '힐버트 변환'입니다 ... 다른 분야에서 다른 의미를 부여하기 때문에 해당 키워드를 사용하지 않았습니다.

디지털 필터를 사용하여이 진폭 포락선을 달성하는 훨씬 현명한 방법이 있으므로 푸리에 변환을 피할 수 있습니다. 이를 통해 알고리즘은 초 저전력 마이크로 컨트롤러에서 실행될 수 있습니다.

이 프로세스는 각 플럭스 전이에 대해 고유 한 범프를 가져야하는 파형을 생성합니다.

이 파형을 이진 시퀀스로 디코딩하는 것은 여전히 ​​쉬운 일이 아닙니다. 복잡성과이 구성 요소는 수학이 아니라 알고리즘입니다. 어려움은 비슷합니다.

대체로 이것은 매우 어려운 문제입니다. 성능 알고리즘을 달성하는 데 3 개월이 걸렸습니다. 나는 시간을 최대한 활용하여 접근 방식을 문서화하고 공개적으로 사용 가능한 디코더 엔진을 제작할 것입니다.


1
판독 헤드는 인접한 자기 도메인 및 현재 판독 헤드 아래의 천이에 의해 영향을받을 수 있으며, 주변 비트 패턴에 따라 판독 천이를 앞뒤로 밀어내는 경향이 있습니다.
hotpaw2

이 기술은 신뢰할 수 없습니다. 대부분의 트랙에서 우수한 결과를 제공하지만 초기에 각 플럭스 전이에 대해 고유 한 범프를 생성하지 못합니다. 즉, 이중 범프를 만듭니다. 이 시점에서 입력 파형이 정현파가 아니기 때문에 추측하고 있습니다. 그래서 저는 여전히 기술을 찾고 있습니다.
P i

궁금한 점은 "분석 신호"또는 "힐버트 변환"에 대한 다른 정의는 무엇입니까? 신호의 엔벨로프를 찾는 경우 먼저 신호를 (복잡한) 분석 신호로 변환하여 찾을 수 있습니다. 이를 수행하는 데는 몇 가지 방법이 있지만 표시 한 내용은 일반적으로 사용되지 않습니다.
Jason R

@JR 일부 소스는 분석 신호를 90 ° 위상 편이, 즉 Quad (f (x))로 정의하는 것 같습니다. 다른 f (x) + i.Quad (f (x)). 필자는이 둘 모두로 정의 된 힐버트 변환을 보았다고 생각합니다. 완전히 확실하지 않으므로 모호하지 않은 표기법을 고수했습니다. 신호의 엔벌 로프를 검색하는 다른 기술에 관심이 있습니다. dsp.stackexchange.com/questions/424/… 이 스레드를 추구하기에 적합한 장소 인 것 같습니다.
P i
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.