• 将信号与不同开始时间对齐


    目录

    将信号与不同开始时间对齐        

    去除信号中的峰值


    将信号与不同开始时间对齐        

            许多测量涉及多个传感器异步采集的数据。如果要集成信号,必须同步它们。Signal Processing Toolbox™ 提供的一些函数可实现此目的。

            例如,假设有一辆汽车经过一座桥。它产生的振动由位于不同位置的三个相同传感器进行测量。信号有不同到达时间。

            将信号加载到 MATLAB® 工作区并进行绘图。

    1. load relatedsig
    2. ax(1) = subplot(3,1,1);
    3. plot(s1)
    4. ylabel('s_1')
    5. ax(2) = subplot(3,1,2);
    6. plot(s2)
    7. ylabel('s_2')
    8. ax(3) = subplot(3,1,3);
    9. plot(s3)
    10. ylabel('s_3')
    11. xlabel('Samples')
    12. linkaxes(ax,'x')

    如图所示:

            信号s1落后于s2,但领先于 s3。可以使用finddelay精确计算延迟。可以看到,s2 领先于 s1 350 个样本,s3落后于 s1 150 个样本,而 s2 领先于 s3 500 个样本。 

    1. t21 = finddelay(s2,s1)
    2. t31 = finddelay(s3,s1)
    3. t32 = finddelay(s2,s3)
    4. t21 =
    5. 350
    6. t31 =
    7. -150
    8. t32 =
    9. 500

            通过保持最早的信号不动并截除其他向量中的延迟来对齐信号。滞后需要加 1,因为 MATLAB® 使用从 1 开始的索引。此方法使用最早的信号到达时间(即 s2 的到达时间)作为基准来对齐信号。

    1. axes(ax(1))
    2. plot(s1(t21+1:end))
    3. axes(ax(2))
    4. plot(s2)
    5. axes(ax(3))
    6. plot(s3(t32+1:end))

            如图所示:

            使用 alignsignals 对齐信号。该函数会延迟较早的信号,以使用最晚的信号到达时间(即 s3 的到达时间)作为基准。 

    1. [x1,x3] = alignsignals(s1,s3);
    2. x2 = alignsignals(s2,s3);
    3. axes(ax(1))
    4. plot(x1)
    5. axes(ax(2))
    6. plot(x2)
    7. axes(ax(3))
    8. plot(x3)

            如图所示:

            这些信号现在已同步,可用于进一步处理。

    去除信号中的峰值

            有时数据会出现不必要的瞬变(即峰值)。中位数滤波是消除它的好方法。

            以存在 60 Hz 电线噪声时模拟仪器输入的开环电压为例。采样率为 1 kHz。

    1. load openloop60hertz
    2. fs = 1000;
    3. t = (0:numel(openLoopVoltage) - 1)/fs;

            通过在随机点添加随机符号以加入瞬变以破坏信号。重置随机数生成器以获得可再现性。

    1. rng default
    2. spikeSignal = zeros(size(openLoopVoltage));
    3. spks = 10:100:1990;
    4. spikeSignal(spks+round(2*randn(size(spks)))) = sign(randn(size(spks)));
    5. noisyLoopVoltage = openLoopVoltage + spikeSignal;
    6. plot(t,noisyLoopVoltage)
    7. xlabel('Time (s)')
    8. ylabel('Voltage (V)')
    9. title('Open-Loop Voltage with Added Spikes')

            如图所示:

    yax = ylim;

            函数 medfilt1 将信号的每个点替换为该点和指定数量的邻点的中位数。因此,中位数滤波会丢弃与其周围环境相差很大的点。通过使用三个邻点的集合计算中位数来对信号进行滤波。注意峰值是如何消失的。

    1. medfiltLoopVoltage = medfilt1(noisyLoopVoltage,3);
    2. plot(t,medfiltLoopVoltage)
    3. xlabel('Time (s)')
    4. ylabel('Voltage (V)')
    5. title('Open-Loop Voltage After Median Filtering')
    6. ylim(yax)
    7. grid

              如图所示:

  • 相关阅读:
    Unity中 UI Shader的基本功能
    微前端的初探索
    【Hello Algorithm】认识一些简单的递归
    vcpkgC++开源项目1
    图像处理02 matlab中NSCT的使用
    Android 显示surfaceFlinger vsync 获取
    TCP IP网络编程(四) 基于TCP的服务器端、客户端
    生成模型的两大代表:VAE和GAN
    学完高性能计算后的发展怎么样?
    PyQt(学习笔记)
  • 原文地址:https://blog.csdn.net/jk_101/article/details/124794605