我们假设有一个LED。它会以0.5秒的时间闪烁。 所以在第二个0 => 0.5它是打开的,从第二个0.5 => 1它关闭,从第二个1 => 1.5再次打开。
让我们想象一下,我想从外部相机(比如iphone相机)读取输入。 我所做的是: 1.获取输入流,从中制作图像,扫描图像是否存在一定数量的白色像素,如果存在,则LED打开,我将“1”写入我的文件。如果不存在,我写“0”。 我每秒读取输入流两次。所以一般来说,如果一切顺利,我的处理不会滞后,我会得到很好的结果。但想象一下:
0 => 0.5 LED亮 0.49 =>我的相机将信息读为“1”
0.5 => 1.0 LED熄灭 0.99 =>我的相机将信息显示为“0”
1.0 => 1.5 LED亮 1.51 =>我的相机滞后并将其读作“0”
所以我们这里有数据损坏。 问题是,如何同步读数,因此它最好进入此窗口的中间,以获得更大的误差范围。 还想象一下,如果我每秒尝试这样做10次。窗口变得更少。
我可以在这个主题上阅读什么?我该怎么做才能让它更可靠?
一种可能的解决方案似乎是每秒读取输入4次并使用基于2个输入组的数据。
答案 0 :(得分:1)
听起来您可能想了解有关编码时间码的方法。 http://en.wikipedia.org/wiki/Timecode
这些中的每一个以所选择的帧速率(例如,30fps)发送80位数据。我不确定你是怎么做的。
显然,拥有更小的窗口更准确。对于LTC,由于音频通常在44kHz左右进行采样,因此几乎可以完全接收到它。
如果iPhone相机每秒只能拍2张照片,我想知道你是否可以尝试以不同的间隔拍摄照片(比方说,甚至0.7秒),不管怎样,如果应该打开或关闭照片,都可以计算出来。 (因为LED仍然在0.5秒交替)。在几秒钟的时间内,它可能与每0.1秒采样一次相同? (我只是把数字从空中拉出来,但我想你可以找到类似的东西)
另一个想法是:你可以使用相机中的视频而不是一系列照片吗?你可能会以这种方式获得30fps? (我不确定 - 没有调查过)在iOS 6.0中可能会有一些改进(如果你是开发人员,那么值得一试)。