Engee 文档
Notebook

时移信号的均衡

通常,在测量期间,从不同的传感器异步接收数据。 要在使用多个传感器时制作累积图片,需要同步数据。

对于此应用程序,我们将需要用于数字信号处理的DSP库和用于上传JLD2文件的FileIO库。

In [ ]:
Pkg.add( ["DSP", "JLD2"] )

让我们阅读输入数据并绘制图表。:

In [ ]:
using JLD2
@load "relategsignals.jld2"

plot(
    plot( s1, label=L"s_1" ),
    plot( s2, label=L"s_2" ),
    plot( s3, label=L"s_3" ),
    layout=(3,1), link = :x
)
Out[0]:

正如我们所看到的,信号 s2 来之前 s1,而 s1 反过来,领先于 s3. 相同长度的信号之间的确切延迟可以使用函数找到 DSP.Util.filddelay 并将其应用于不同长度的信号,我们将所有信号的长度减少到其中最小的长度。

因此,我们会注意到 s2 在信号前面 s1 在350计数, s3 比较晚了 s1 对于150计数,并且还该信号 s2 领先于 s3 为500计数。

In [ ]:
using DSP

min_size = min( size(s1,1), size(s2,1), size(s3,1) )
t12 = DSP.Util.finddelay(s1[1:min_size], s2[1:min_size])
t31 = DSP.Util.finddelay(s3[1:min_size], s1[1:min_size])
t32 = DSP.Util.finddelay(s3[1:min_size], s2[1:min_size])

t12, t31, t32
Out[0]:
(350, 150, 500)

相对于手动对齐信号 s2 (谁比其他人先到):

In [ ]:
plot( s1[t12+1:end], label=L"s_1", size=(600,300) )
plot!( s2, label=L"s_2" )
plot!( s3[t32+1:end], label=L"s_3" )
Out[0]:

单位已被添加到偏移中,因为在偏移0处,需要输出从索引1开始的信号。 使用该功能会更容易 DSP.Util.shiftsignal.

该函数将允许我们避免中间操作。 alignsignals. 它延迟较早的信号,因此所有信号将在信号到达时移位。 s3.

In [ ]:
x1 = s1[1:min_size]
x2,t21 = DSP.Util.alignsignals( s2[1:min_size], s1[1:min_size] )
x3,t31 = DSP.Util.alignsignals( s3[1:min_size], s1[1:min_size] );

plot(
    plot( x1 ),
    plot( x2 ),
    plot( x3 ),
    layout=(3,1), leg=false
)
Out[0]:

结论

现在研究的信号在发生时是同步的,我们可以继续进行进一步的处理。