从记录的电压信号中解码串行字符串

Decode serial strings from recorded voltage signal

我使用 Arduino(一个 Teensyduino)通过 Serial 间歇性地打印字符串。这些字符串基本上都是 1 到 1000 之间的整数, 例如

Serial1.print('456');
delay(1000);
Serial1.print('999');

同时,我直接记录了串口传输引脚输出的电压,使用了一些30000Hz采样的数据采集系统。电压记录发生在一个小时的跨度内,其中在一小时内随机打印多个字符串。这些字符串通常相隔几秒打印。

我有一个小时的整个电压信号记录,我将在 Python 中离线分析。给定一个小时内 0-5V 值的矢量,我如何检测所有打印的字符串,并根据电压值解码所有字符串?例如从上面的示例中检索“456”和“999”

好吧,如果你想从头开始,你做错了

您首先需要了解的是 t运行smission 协议。如果你能从 Teensy 那里尽你所能,那么你就拥有了所谓的 oracle,你已经达到了目标的一半:开始t运行发送不同的位序列(0xFF、0xF0、0x0F、0x00),看看 t运行 发送了什么,以及如何发送。由于 Teensy 几乎 当然使用直 9600 8N1,您现在正好处于 this 阶段(如果需要,您可以从电压数据再现示波器图片)。

阅读这些答案,您将获得通向有效 Python 代码的其余部分,该代码 t运行 将电压尖峰转换为位,然后转换为字符。

如果您没有 oracle,它会变得更加复杂。在那种情况下,我自己的偏好是让自己成为一个柔韧的青少年,然后在那里做第一部分。否则,你得读上面的post,然后倒过来看数据记录,难度会大很多。

紧要关头,在 oracle 场景中,您甚至可以自己拍摄从“0”到“9”的所有代码 - 或者从 0x00 到 0xFF,或者从“0000” ' 到 '9999' 如果这是它所需要的 - 然后使用卷积将代码与电线上的任何内容相匹配,这会让你在不知道使用什么协议的情况下获得解码信号(我做过一次,并且可以 gua运行tee 是可以做到的。那是中世纪的时候,解码器 运行 在一个 80286 上,所以用 C 解码每个字符的 millisecond-burst 大约需要四五秒程序。现在你可以实时完成,我猜)。