通过使用两个向量的标量积,我们可以使用两个不同的数组并通过使用归一化相关(归一化互相关)在它们之间进行比较。
基本 RT 即时识别器的工作方式如下:
“标准具信号”的已知 N 计数作为一维数组存储在程序存储器 x[I] 中。
“传入信号”的计数在定时器中断时输入到大小为 N 的环形缓冲区(存储在默认 RAM 存储器中)y[i],ISR 计算“r” - “标准具信号”x[i] 和“传入信号”。
也就是说,RT 即时识别器将“传入信号”x[i] 的最后 N 个计数与标准具信号 y[i] 的固定 N 个计数进行比较。请务必了解延迟 d 和环形缓冲区索引之间的关系。是的,ISR 中有许多循环。
好的,系统的要求到此为止——让我们开始工作吧!
我选择以 20[Hz] 频率进行采样(由于系统的技术困难),发现 5 个样本足以识别所需信号。
识别到信号后,系统将不再搜索匹配,也可以随时拨动开关,系统会重新搜索。
此外,可以随时更改所需频率。
1) 使用名为“Input signal”的信号发生器选择要识别的频率 (sin(8, 4, 5 Hz), sqr(8, 4 Hz), trg(8Hz))。
在哪里:
2) 现在,如果进行了识别 - 系统将打印信号已被识别,此外,系统将根据字母编号打开 LED。
3)识别完成后,您可以按下按钮,系统将开始重新搜索一个新的频率,或者您可以更改输入信号和噪声。
为了创建已知信号,我们编写了一个函数(“CreateEtalonArrays”),它根据信号的采样频率(在我们的例子中为 20 [Hz])计算信号。
这个频率是在更高频率的几次测试之后选择的。我们得出的结论是,在我们的条件下,这是良好的工作系统和时间效率之间的良好权衡。
我选择了 6 个具有这些频率的波(可变):
具有以下频率的正弦波:8、4、5 [Hz]。
具有以下频率的方波:8、4 [Hz]。
以及频率为 8 [Hz] 的三角波。
该程序将打印一个数组,该数组可以直接复制到 Arduino “progmem”内存中。
(运行程序时无法初始化“程序”)
该函数还计算每个信号的平均值(每个信号单独),这些平均值也可以存储在“progmem”中。
为了实现我们的样本,我们必须使用函数生成器,使用 Arduino 从每个函数中采样 5 个样本。
此外,结果打印在串行监视器上,然后我们将数据复制到主程序。(见以下附件)
在这一部分中,我们使用了 741 运算放大器(非反相求和放大器)
如下图所示:
为了区分不同的信号,可以为每个信号赋予不同的 LED 颜色。
传奇:
8 [Hz] sin – 橙色 LED
5 [Hz] sin – 绿色 LED
4 [Hz] sin – 黄色 LED
8 [Hz] sqr – 蓝色 LED
4 [Hz] sqr – 红色 LED
8 [Hz] trg – 白色 LED
注意:
一次只能打开一个 LED。
8 [Hz] sqr 和 40 [Hz] sqr 波噪声(0.5[v] 幅度和 1[v] 峰峰值):
4 [Hz] sin 与 40 [Hz] sqr 波噪声(0.5[v] 幅度和 1[v] 峰峰值):
8 [Hz] trg 与 40 [Hz] 正弦波噪声(0.5[v] 幅度和 1[v] 峰峰值):
从结果中我们可以得出结论,系统可以很容易地识别出幅度和电压偏移的大变体的两个矩形波。
频率为 5 Hz 和 4 Hz 的正弦波都可以毫无问题地被识别,但幅度和偏移电压的变化较小。
然而,频率为 8 Hz 的正弦波和频率为 8 Hz 的三角波都具有较高的灵敏度和较低的偏移电压和幅度变化。
注意:一个可靠的测试是当我们成功识别波浪 4 次时。
•系统可以识别6种不同的信号:
• 正弦8[Hz]。
• 正弦5[Hz]。
• 正弦4[Hz]。
•矩形8[Hz]。
•矩形4[Hz]。
•三角形8[Hz]。
• 系统可以将输入信号与大量不同的噪声混合——3 种不同的波,每个波都有一个大范围的频率。
•即使噪声很大,系统也能识别波(与输入波相比,噪声频率是输入频率的两倍)。
•我们可以更改我们想要识别的输入信号,而无需重新启动仿真。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !