使用EngeeDSP进行时域分析处理
我们正在使用时域信号分析和处理的例子来熟悉EngeeDSP的功能。
时域信号分析和处理是一种处理信号的方法,我们考虑其随时间变化的基本参数。 该分析有助于从"原始"信号中提取重要的数值特征。:
- 
幅度分析:峰值、平均值(常数分量)、均方根值等。 
- 
时间分析:信号持续时间,脉冲重复率,前上升率。 
- 
波形:失真分析,存在"尖峰"(异常值),衰减等。 
处理允许您从信号中提取信息,更改其特征和统计指标,按级别缩放或平滑其形状。
这个例子的目的是可视化从真实传感器记录的信号,执行预处理,评估统计度量,局部极值,并切断不需要的异常值。
信号导入和可视化
来自传感器ADC的数据存储在文件中 data.txt. 我们将它们视为变量中的矩阵 datamat:
using DelimitedFiles
datamat = readdlm("data.txt")
让我们从中提取时间和"原始"值的单独向量,并将它们显示在时域的图形上。:
t = datamat[:,1];
original = datamat[:,2];
plot(t, original, xguide = "Время (с)", title = "Исходный сигнал", legend = false)
移除永久组件
统计指标的分析可能会受到信号的"漂移"的阻碍-其恒定分量的平滑变化,其周围的振荡相对较快。
让我们使用函数摆脱常量组件 **detrend从一组功能EngeeDSP。**在函数的引擎盖下,使用一种方法通过任意阶的多项式来近似信号值,然后从信号中减去计算的多项式。 在我们的例子中,12阶多项式是合适的。:
sig = EngeeDSP.Functions.detrend(original, 12)
plot(t, sig, xguide = "Время (с)", title = "Сигнал без постоянной составляющей", legend = false)
信号统计
现在信号在零附近振荡,我们可以计算我们感兴趣的统计数据。
考虑EngeeDSP函数,用于确定诸如极值、RMS和方差等"流行"信号指标。 但首先,让我们估计信号的采样周期。:
dt = EngeeDSP.Functions.mean(diff(t))
和信号的采样率:
fs = 1/dt
让我们定义离散信号的持续时间-矢量中的样本数 sig:
nsamples = length(sig)
让我们在数值向量中找到最大值和最大参考的序数:
maxval, maxidx = EngeeDSP.Functions.max(sig)
最小值也是如此。 这些是信号的绝对极端:
minval, minidx = EngeeDSP.Functions.min(sig)
知道他们,你可以确定信号的幅度。:
range = abs(maxval - minval)
现在让我们计算算术平均值(注意它的值接近零):
EngeeDSP.Functions.mean(sig)
让我们找到RMS值:
rmsval = EngeeDSP.Functions.rms(sig)
和方差:
EngeeDSP.Functions.var(sig)
信号峰值分析
能够找到局部信号极值或所谓的**峰值通常是有用的。**要做到这一点,使用函数 **findpeaks.**该函数返回峰值的值和索引,以及(可选)它们的宽度和严重性。 作为其他输入参数,指定最小峰高和相邻峰之间的最小距离。:
pks, locs, w, p = EngeeDSP.Functions.findpeaks(sig, out=:data, 
                                            MinPeakHeight = 0.08,
                                            MinPeakDistance = 500);
plot(t,sig, xguide = "Время (с)", label = false)
scatter!(t[locs], pks, label = "Пики")
我们将以编程方式输出振幅及其对应的时间点。 我们还将输出宽度和严重性:
hcat(t[locs], pks, w, p)
运行中值滤波器
在时域中,您可以使用简单的滑动窗口滤波器应用平均或修剪信号的基本操作-平均,中值等。
让我们使用非线性滤波器来消除峰值,即具有十五个样本窗口的运行中值。 为此,请使用函数 movmedian:
nospikes = EngeeDSP.Functions.movmedian(sig, 15);
plot(t,sig, xguide = "Время (с)", label = "До фильтра")
plot!(t, nospikes, linewidth = 2.5, label = "После фильтра")
让我们检查过滤信号的统计指标:
EngeeDSP.Functions.rms(nospikes)
EngeeDSP.Functions.var(nospikes)
newmax, maxidx = EngeeDSP.Functions.max(nospikes);
newmin, minidx = EngeeDSP.Functions.min(nospikes);
new_range = abs(newmax - newmin)
结论
我们熟悉了用于时域信号可视化、分析和处理任务的EngeeDSP功能。 使用所描述的函数,您可以:
*测量信号的基本参数(幅度,持续时间)。
*可视化波形。
*清洁使用简单的操作(平均,滤波)从噪声和干扰的信号。
*准备信号进行更深入的分析,例如,使用傅立叶变换过渡到频域。