我面临着一个棘手的挑战:从iPhone磁条卡读取器中提取二进制数据。卡上的磁化强度如下所示:
这是当您刷卡时iPhone收到的.WAV(不要将希望寄予太大希望,这是奖励会员卡;))。顺便说一下,这是以不同的速度刷了三下。这是我正在使用的滑动的原始SInt16转储。
似乎有人在这里做过, 但是我捕获的实际数据并不是特别容易处理。
读数以不确定的“ 0”开始(并结束)-请注意,只有在收集到2个ZEROS之后,该波才会重复,这表示NS后跟SN:
(请注意,三行中的每一行都代表我要刷一张不同的卡;此图像中的底部卡已使用了15年,因此磁场在某些地方明显退化严重,在这张照片中看不到)
这将允许算法确定时钟滴答。
磁场在每个时钟滴答处反转。 同样对于二进制1,磁场恰好在刻度线的中间反转:
该序列始终以1101 + 0(奇偶校验位)开始标记开始。您可以在上图中的所有三个读数中进行选择。我在问题顶部链接的cosmodro文章中更清楚地表明了这一点。
这是一个磁性衰减的示例(在底下的卡片读取中进一步记录):
我试图找出一种明智的方法来将该波形转换为其相应的二进制序列。
我已经找到了一份详细介绍的PDF,但是我无法弄清楚他们使用的算法。
该PDF包含一个有趣的图像:
如果我可以按照该图提取红线和蓝线,则可以使用其中之一来提取数据,但是我无法弄清楚构造背后的逻辑。
所以这是我的问题:如何提取二进制序列?
PS。请注意,滑动速度不会保持恒定。因此,一旦确定了时钟,就需要将时钟从一个滴答声一直调整到下一个滴答声。
PPS。自相关会捕捉成对的滴答声吗?(看到滴答声会交替显示NS SN ...)
编辑(12年6月):在这方面我需要很多帮助,但是最后我完成了坚实的阅读器(http://www.magstripedecoder.com/)。感谢大家的帮助!我建议IRC的efnet频道上的#musicdsp给那些有足够的心力去迎接挑战,掌握数学的人-这真的很难!