AnyMath 文档
Notebook

使用EngeeDSP块进行时域流分析

我们继续使用解决以前在项目中考虑的问题的例子来熟悉EngeeDSP的功能。 Анализ и обработка во временной области с EngeeDSP.

主要目标:

*可视化信号
*移除常量组件
*分析统计数据
*平滑形状

但由于现在我们正在处理流式信号,这意味着信号样本的导入,分析和处理必须在飞行中进行,因此任务变得复杂。 处理算法将仅有权访问在仿真时间的某个点到达其输入的信号的那些样本或帧。

我们会考虑模型 time_analysis_blocks.engee,由信号处理库的专门块组成,我们将学习动态流处理的特性:

time_analysis_blocks--1778678652650.png

信号导入和可视化

传感器数据也存储在文本文件中。 data.txt. 我们将它们读入工作区矩阵 **datamat**使用以下命令:

In [ ]:
# using DelimitedFiles
# datamat = readdlm("data.txt")

在模型的回调中编写相同的命令,以便在打开模型时自动将数据加载到工作区中。

要将矩阵样本从工作区读取到模型中,我们使用来自工作区块的信号,并且为了从数据矩阵中提取第二列,其中包含所研究信号的样本,块选择

让我们在动态仿真中运行模型,并考虑原始信号的形状。 original.

In [ ]:
mdlname = "time_analysis_blocks.engee";
engee.open(mdlname);
engee.run();

我们可以在可视化窗口中及时观察原始信号:

original.png

该信号包含一个恒定的成分,这将是有用的,我们摆脱进一步的分析和处理。

移除永久组件

在脚本中工作时,从第一个到最后一个样本,整个信号都可供我们使用,并且通过用12阶多项式近似其形状来去除常数分量,但在流处理的情况下,我们需

该模型比较了两种方法来消除小信号帧上的"趋势"。

首先,使用趋势去除块,其用一阶多项式(即线)逼近信号的相继段。 在该操作之前,标量信号被缓冲成32个样本的矢量而没有重叠。

此外,信号通过一个子系统,在该子系统中,"趋势"被计算为64个样本的窗口中的平均值,并且从延迟的信号中减去。:

subsys.png

通过比较可视化窗口中这两个操作的输出信号,您可以确保方法的工作大致相同-您只需要正确调整窗口(或框架)的大小。 信号将沿着处理链走得更远 detrendUnbuffer块的输出:

compare.png

信号统计

为了计算统计信息,信号处理库有许多块用于矢量和"滑动"统计信息计算。

模型计算峰值功率和方差等信号参数。 结果记录在日志中,并在动态模拟过程中显示在显示块**上。 考虑随时间的方差图:

var.png

可以注意到,色散图清楚地显示对应于信号的局部极值而没有恒定分量的峰。

平滑波形

通过流处理,我们再次面临着整个信号的值对我们不可用的情况,并且我们不能使用该函数的模拟。 findpeaks.使用统计和用户逻辑,在所考虑的帧内找到局部极值是现实的,但这在计算上是昂贵的,并且对于该模型来说,使用饱和度块执行阈值限制排放的操作就足

最后的过滤将在4个计数的小窗口上使用移动平均块执行。 处理后得到的波形:

filtered.png

上传模拟结果

要在可变区域中记录信号,我们使用工作区中的块。 我们还会将信号记录为***。wav**文件,以便您可以在任何媒体播放器中收听它。

In [ ]:
DF = collect(workspace_out);
time = DF.time;
value = DF.value;
plot(time,value,leg=false,xguide = "时间,从")
Out[0]:

结论

我们熟悉了用于实时流式可视化、分析和处理任务的EngeeDSP块(信号处理库)的功能,并比较了从[this]中解决Engee脚本中类似问题的方法примера](https://engee.com/community/ru/catalogs/projects/analiz-i-obrabotka-vo-vremennoi-oblasti-s-engeedsp).