Витяг даних із двійкових магнітних смужок із необроблених WAV


23

Я стикаюся з складним завданням: витягнути двійкові дані з зчитувача магнітних смужок iPhone . Ось як виглядає намагнічування на картці:

введіть тут опис зображення
Джерело

Ось .WAV, який iPhone отримує, коли ви проведете карту (не сподівайтесь на сподівання, це бонусна картка лояльності;)). Це три перегони, до речі, з різною швидкістю. Це сирий відвал SInt16 для швидкого переходу, який я використовую.

Хтось, здається, це зробив тут, але фактичні дані, які я збираю, обробляти не особливо просто.

Читання починається (і закінчується) невизначеною кількістю «нулів» - зауважте, що хвиля повторюється лише після того, як зібрані 2 ZEROS, це означає НС, а потім SN:

введіть тут опис зображення

(зауважте, що кожен з трьох рядків представляє мене, коли я переношу іншу карту; нижній картці на цьому зображенні 15 років, тому магнітне поле десь сильно погіршується, не видно на цьому знімку)

Це дозволить алгоритму встановити галочку годинника.

Магнітне поле обертається на кожній галочці годинника. Також для двійкового 1 магнітне поле повертається рівно посередині кліща:

введіть тут опис зображення

Послідовність завжди починається з дозорного старту 1101 + 0 (біт парності). Ви можете вибрати це у всіх трьох читаннях у наведеному вище графіку. Це чіткіше зазначено у статті про космодро, яку я пов’язував у верхній частині питання.

Ось приклад магнітної деградації (взяті далі на читанні нижньої карти): введіть тут опис зображення

Я намагаюся знайти розумний спосіб перетворити цю форму хвилі у відповідну бінарну послідовність.

Я знайшов один PDF, який детально описується, але я не можу з’ясувати алгоритм, який вони використовують.

Цей PDF містить одне цікаве зображення: введіть тут опис зображення

Якби я міг витягти червоні та сині лінії відповідно до цієї діаграми, я міг би використати будь-яку з них для вилучення даних, але я не можу зрозуміти логіку побудови.

Отже, це моє запитання: Як витягти бінарну послідовність?

PS. Зауважте, що швидкість повороту не буде постійною. Отже, як тільки годинник визначений, його потрібно постійно регулювати від однієї галочки до іншої.

PPS. Чи може автокореляція спіймати пари кліщів? (бачачи, як кліщі будуть чергувати NS SN ...)


EDIT (червень '12): Мені потрібна була велика допомога в цьому, але, нарешті, я закінчив надійного читача ( http://www.magstripedecoder.com/ ). Дякуємо всім, хто допоміг! Я рекомендую #musicdsp на каналі efnet IRC для тих, хто присвячений достатньо завдань, щоб вирішити проблему з математикою - це дійсно важко!


Чи можете ви опублікувати фактичний файл WAV?
ендоліт

1
Готово! 9876543210
П я

Хм. Ваша форма хвилі не схожа на всі інші приклади, які я можу знайти. 2.bp.blogspot.com/_QF4k-mng6_A/TOzDBOzIB3I/AAAAAAAAAbM / ... monografias.com/trabajos43/banda-magnetica/Image4228.gif embeddedsoftwareengineering.com/img/mag-flux.gif
ендоліти

Дуже дякую Yoda за редагування та прибирання питання.
П я

У своєму запитанні ви згадуєте три картки. З якою карткою пов'язаний файл WAV, до якого ви додали файл?
Jason R

Відповіді:


10

Це називається двофазним знаком коду , і вам потрібно зосередитись на нульових перетинах замість амплітуд імпульсу. Однак у вас декілька нульових перетинів на імпульс через низькорослі фільтри, притаманні пікапу та мікрофонному входу телефону. Ви перепадаєте далі між переходами та перетинаєте нуль:

введіть тут опис зображення

Ви можете відновити більш пульсовану форму, використовуючи фільтр із низьким збільшенням:

введіть тут опис зображення

а потім виміряйте довжину пульсу на те, скільки часу вони проводять вище деякого порогу. Можливо, краща ідея - диференціювати вхід для переходів у великі шипи, взяти абсолютне значення та виявити їх, коли вони перевищують деякий поріг:

введіть тут опис зображення

Потім вимірюйте час між імпульсами, і коли час між двома імпульсами приблизно такий самий, як два останні імпульси, це 0, коли це приблизно половина від того, що було між останніми двома імпульсами, це 1.

Магнітну деградацію, про яку ви говорите, слід легко усунути за допомогою фільтра з низькою прохідністю.


Спасибі! Я знайшов дуже цікаві співвідношення щодо роботи з другою похідною, яку я опублікую з часом. Чи можете ви детальніше розробити фільтр з низьким підвищенням? Я не маю уявлення, як би я це здійснив ...
П я

@endolith Чи можете ви, будь ласка, додати кращі теги для запитання? Я позначив її диференційованим кодуванням , виходячи з вашої відповіді, але ви краще знаєте цю тему.
Lorem Ipsum

@yoda: Ха-ха, ні. Я просто дізнався про це кілька годин тому, щоб написати цю відповідь.
ендоліт

@endolith Я щойно натрапив на це - це приємно - проте чи можете ви пояснити цей «фільтр низького прискорення»? Дуже цікаво, і Google не дуже допомагає ...
Spacey

@Mohammad: Просто фільтр, який збільшує низькі частоти, залишаючи максимуми незмінними. Я думаю, я використав графічний еквалайзер в Adobe Audition. Спробуйте поличковий фільтр crca.ucsd.edu/~msp/techniques/latest/book-html/node142.html
ендоліти

4

Це було досить складно. Я спробував принаймні чотири підходи, перш ніж зламати його. Ось як я це зробив:

введіть тут опис зображення

Я починаю з вирівнювання даних ( перше читання ) простим ...

x_new = 0.9 * x_prev + 0.1 * x_in

... IIR фільтр. Я роблю це в обох напрямках ( друге читання ). Це позбавляється від усіх нечітких шумів, однак це створює розриви, які повертаються з помстою в похідних.

Потім я отримую всі похідні до четвертого ( третє і четверте читання представляють третє і четверте похідні) і створюю нову функцію:

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

Чому? тому що я помітив, що до моменту, коли ми дістаємось до третьої похідної, те, що ми маємо, - це фактично синусоїда всередині конверта:

введіть тут опис зображення

... і всі знають із середньої школи, що:

sin^2 + cos^2=1 

введіть тут опис зображення

і що гріх і cos розрізняються між собою:

введіть тут опис зображення

Звідси підроблений конверт можна отримати.

Чому похідні 3 і 4? в основному кожна вища похідна очищає сигнал. Те, що є синусоїдальним, залишається синусоїдальним (просто зміщує фазу на 90 °, так що sin-> cos і т.д.), тоді як те, що не відпадає.

Я хотів використати 11 і 12 чи щось божевільне, але похідні розпадаються досить швидко, 4 - це найвищий рівень, який я можу отримати, перш ніж справи перейдуть, навіть тоді маленькі похідні лінії, які ви бачите на малюнку, сильно розгладжуються.

Це дає чудовий маленький удар при кожному переході потоку ( п’яте читання ).

Далі я проходжу повороти, відкидаючи каламути ( шосте читання ) ..

Нарешті я проходжу максимуми ( сьоме читання ), оцінюючи, чи є кожен пропуск півтора кроком або цілим кроком, а потім реконструюю двійкове.

Так!

EDIT: Зараз я закінчив цей проект, пройшло кілька місяців. найскладніший виклик - побудувати деяку трансформацію, яка ізолює переходи потоку; технічно кажучи, "отримання амплітудної оболонки". це робиться шляхом побудови сигналу зсуву фази π / 2 від вихідного (це також відомо як квадратурний сигнал). тоді E (t) ^ 2 = S (t) ^ 2 + Q (S (t)) ^ 2.

Щоб отримати квадратурний сигнал, я просто зробив FFT і обертав кожний відрізок на чверть обороту, потім рекомбінував модифіковані спектральні компоненти.

У цій галузі існує багато заплутаної термінової термінології; ключові слова - "аналітичний сигнал", "перетворення Гільберта" ... Я уникав використання цих ключових слів, оскільки різні дисципліни призначають їм різні значення.

Існує набагато розумніший спосіб досягти цієї амплітудної оболонки за допомогою цифрових фільтрів, тим самим уникнути перетворення Фур'є. Це дозволяє алгоритму працювати на мікроконтролерах з низькою потужністю.

Цей процес створює форму хвилі, яка повинна мати унікальний удар за кожен потік потоку.

Розшифровка цієї форми хвилі у двійковій послідовності все ще є нетривіальним завданням. складність і цей компонент є алгоритмічним, а не математичним; складність порівнянна

Загалом це надзвичайно складна проблема. Мені знадобилося найкраще за три місяці, щоб досягти їх алгоритму роботи. Я буду в повноті часу задокументувати свій підхід і створити загальнодоступний декодер.


1
На зчитувальні головки можуть впливати суміжні магнітні домени, а також перехід, що знаходиться в даний час під головою зчитування, який, як правило, підштовхує переходи читання вперед і назад, в залежності від оточуючої бітової структури.
hotpaw2

зауважте, що ця методика не є надійною. Хоча це дає чудові результати для більшої частини траси, але не вдається створити унікальний удар для кожного переходу потоку на початку. тобто це створює подвійний удар. Я здогадуюсь, тому що форма вхідної хвилі не є відповідно синусоїдальною в цій точці. тому я все ще шукаю техніку.
П я

Цікаво, що ще за визначеннями "аналітичний сигнал" чи "перетворення Гільберта" ви знайшли? Якщо ви шукаєте огинаючу сигнал, ви можете це виявити, попередньо перетворивши його на (складний) аналітичний сигнал. Існує кілька способів зробити це, але те, що ви вказали, зазвичай не використовується.
Джейсон R

@JR деякі джерела, схоже, визначають аналітичний сигнал як фазовий зсув 90 °, тобто Quad (f (x)). інші як f (x) + i.Quad (f (x)). Я думаю, що я бачив перетворення Гільберта, визначене як обидва, також. Не зовсім впевнений, тому я затримався з позначенням, яке повинно бути однозначним. Мене цікавлять інші прийоми отримання огинаючої сигналу; dsp.stackexchange.com/questions/424/… здається правильним місцем для продовження цієї теми .
П я
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.