我面临一个棘手的挑战:从iPhone磁条卡读取器中提取二进制数据。这是卡上的磁化强度的样子:

来源

这是当您刷卡时iPhone收到的.WAV(不要指望太多,这是一张奖金会员卡;))。顺便说一下,这是以不同的速度刷了三下。这是我正在使用的滑动操作的原始SInt16转储。读数以不确定的“零”开始(并结束)-请注意,只有在收集到2个ZEROS之后,该波才会重复,这表示NS后跟SN:



(请注意,三行中的每一行都代表我要刷一张不同的卡;此图像中的底部卡已使用了15年,因此磁场在某些位置明显退化严重,在这张照片中看不到) />
这将允许算法确定时钟滴答声。

每个时钟滴答声中的磁场都会反转。同样对于二进制1,磁场恰好在刻度线的中间反转:



序列始终以1101 + 0(奇偶校验位)开始定点。您可以在上图中的所有三个读数中进行选择。我在问题顶部链接的cosmodro文章中更清楚地表明了这一点。 br />
我试图找出一种明智的方法将该波形转换为其相应的二进制序列。找出他们正在使用的算法。

此PDF包含一张有趣的图像:


如果我可以按照此图提取红线和蓝线,则可以使用其中的任一种来提取数据,但是我无法弄清楚构造背后的逻辑。我的问题:如何提取二进制序列?

PS。请注意,滑动速度不会保持恒定。因此,一旦确定了时钟,就需要从一个滴答声到另一个滴答声不断进行调整。

PPS。自相关会捕捉成对的滴答声吗? (看到滴答声将交替显示NS SN ...)


编辑(12月6日):在这一方面我需要很多帮助,但最终我完成了扎实的读者( http://www.magstripedecoder.com/)。感谢所有帮助的人!我建议IRC的efnet频道上的#musicdsp给那些有足够的心力去迎接挑战,掌握数学的人-这真的很难!

评论

您可以发布实际的wav文件吗?

做完了! 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文件与哪张卡关联?

#1 楼

这称为双相标记代码,您必须关注过零而不是脉冲幅度。但是,由于拾音器和电话的麦克风输入固有的低切滤波器,每个脉冲有多个零交叉。在过渡之间,您的下降幅度远不止于此,并过零: />

,然后根据脉冲长度超过某个阈值的时间来测量脉冲长度。也许更好的主意是区分输入,以将过渡转变为大的尖峰,获取绝对值,并在超过某个阈值时对其进行检测:测量两个脉冲之间的时间,当两个脉冲之间的时间与最后两个脉冲大约相同时,则为0;当它约为最后两个脉冲之间的时间的一半时,则为1。

使用低通滤波器可以轻松消除您所讨论的磁性退化。

评论


$ \ begingroup $
谢谢!我发现与二阶导数有关的一些非常有趣的相关性,我将在适当时候发布。您能否详细说明低升压滤波器?我不知道我该怎么实现...
$ \ endgroup $
– P i
2011-11-28 18:27

$ \ begingroup $
@endolith您能为这个问题添加更好的标签吗?我根据您的答案将其标记为差分编码,但您对本主题的了解更好。
$ \ endgroup $
–乳香
2011-11-28 19:06



$ \ begingroup $
@yoda:哈哈,不,我不知道。我是几个小时前才学到的,可以写这个答案。
$ \ endgroup $
– Endolith
2011年11月28日在19:17

$ \ begingroup $
@endolith我刚刚遇到了这个-很好-但是您能解释一下这个“低升压滤波器”吗?似乎真的很有趣,而Google并没有太多帮助...
$ \ endgroup $
–太空
2012年6月15日下午0:27

$ \ begingroup $
@Mohammad:只是一个滤波器,可以在增强低频的同时保持高频不变。我想我在Adobe Audition中使用了图形均衡器。尝试使用货架过滤器crca.ucsd.edu/~msp/techniques/latest/book-html/node142.html
$ \ endgroup $
– Endolith
2012年6月15日10:43



#2 楼

这是一个很大的挑战。在破解之前,我尝试了至少四种方法。这就是我的操作方法:



我首先用一个简单的... br />
... IIR滤波器。我在两个方向上都这样做(二读)。这样可以消除所有的模糊噪声,但是会产生不连续性,并在导数上产生复仇。导数),并创建一个新函数:

x_new = 0.9 * x_prev + 0.1 * x_in


为什么?因为我注意到当我们到达三阶导数时,实际上我们所拥有的实际上是信封内的正弦曲线:


学派: />
因此隐式信封可以被收回。

为什么派生3和4?基本上每个高阶导数都会净化信号。正弦曲线仍然是正弦曲线(仅将相位移相90°,这样sin-> cos等),而正弦曲线不会消失。很快就崩溃了,在遇到麻烦之前,我可以得到的最高分是4,即使这样,即使您在图片中看到的微小导数线也被大大平滑了。 (第五读)。

接下来,我穿过转折点,拒绝愚蠢(第六读)。每个跳过都是半步或整步,然后重构二进制文件。

是的!

编辑:
我完成这个项目已经几个月了。最困难的挑战是构造一些隔离通量转换的转换。从技术上讲,“检索幅度包络”。这是通过从原始信号构造π/ 2相移信号(也称为正交信号)来完成的。那么E(t)^ 2 = S(t)^ 2 + Q(S(t))^ 2。

要获取正交信号,我只需执行FFT,然后将每个bin旋转四分之一圈,然后重新组合修改后的频谱分量。该领域的术语;关键字是“分析信号”,“希尔伯特变换” ...我避免使用这些关键字,因为不同的学科为其赋予了不同的含义。数字滤波器,从而避免了傅立叶变换。这样,该算法就可以在功耗很低的微控制器上运行。

此过程生成的波形在每个磁通过渡处都应具有唯一的凸点。序列仍然是一项艰巨的任务。复杂性,该组件是算法而不是数学;难度是可比的。

所有这些都是一个非常困难的问题。我花了三个月的大部分时间来实现他们的性能算法。我将尽可能地记录我的方法,并制作一个公开可用的解码器引擎。

评论


$ \ begingroup $
读磁头可能会受到相邻磁畴以及当前在读磁头下方的过渡的影响,这往往会根据周围的位模式在时间上前后推动读过渡。
$ \ endgroup $
– hotpaw2
11年11月29日在1:06

$ \ begingroup $
请注意,此技术不可靠。尽管它在大多数磁道上都能提供出色的结果,但它并不能在早期就为每个磁通过渡产生独特的冲击。即,它会产生双重冲击。我猜是因为此时输入波形不是正弦波。所以我还在寻找技术。
$ \ endgroup $
– P i
2012年1月9日19:14



$ \ begingroup $
很好奇,您发现“解析信号”或“希尔伯特变换”还有哪些其他定义?如果您正在寻找信号的包络线,则可以先将其转换为(复杂的)分析信号来找到它。有几种方法可以执行此操作,但是通常不会使用您所指示的内容。
$ \ endgroup $
–Jason R
2012年4月16日在17:45

$ \ begingroup $
@JR一些资料似乎将分析信号定义为90°相移,即Quad(f(x))。其他形式为f(x)+ i.Quad(f(x))。我想我也看到了希尔伯特变换也被定义为这两者。不能完全确定,因此我坚持使用明确的表示法。我对检索信号包络的其他技术感兴趣; dsp.stackexchange.com/questions/424/…似乎是追求此主题的正确位置。
$ \ endgroup $
– P i
2012年4月16日18:17