资讯详情

取信号的导数和求相关信号之间的延迟

取信号导数

相关信号之间的延迟


取信号导数

信号求导不增加噪声功率。MATLAB? 提供的函数diff会放大噪音,恶化高阶导数的不准确性。要解决这个问题,请使用微分滤波器

分析地震时建筑楼层的位移。找到速度和加速度作为时间函数。

加载文件 earthquake。该文件包含以下变量:

  • drift:地板位移以厘米为单位测量

  • t:时间以秒为单位测量

  • Fs:采样率等于 1 kHz

load('earthquake.mat')

使用 pwelch 显示信号功率谱的估计值。请注意,大多数信号能量低于 100 Hz 的频率中。

pwelch(drift,[],Fs)

如图所示:

使用 designfilt 设计阶数为 50 的 FIR 微分器。包含大部分信号能量,请指定 100 Hz 通带频率和 120 Hz 阻带频率 fvtool 检查滤波器。

Nf = 50;  Fpass = 100;  Fstop = 120;  d = designfilt('differentiatorfir','FilterOrder',Nf, ...     'PassbandFrequency',Fpass,'StopbandFrequency',Fstop, ...     'SampleRate',Fs);  fvtool(d,'MagnitudeDisplay','zero-phase','Fs',Fs)

如图所示:

求出漂移速度。除以导数dt(即连续样本之间的时间间隔)设置正确的单位。

dt = t(2)-t(1);  vdrift = filter(d,drift)/dt;

过滤后的信号延迟。 grpdelay 确定延迟是滤波器阶数的一半。通过丢弃样本进行补偿。

delay = mean(grpdelay(d))  delay = 25   %% tt = t(1:end-delay); vd = vdrift; vd(1:delay) = [];

输出还包括瞬变,其长度等于滤波器阶数或组延迟的两倍。它已被丢弃 delay 样本。再次丢弃 delay 消除瞬变的样本。

tt(1:delay) = []; vd(1:delay) = [];

绘制漂移和漂移速度。 findpeaks 验证漂移的最大值和最小值对应于其导数的过零点。

[pkp,lcp] = findpeaks(drift); zcp = zeros(size(lcp));  [pkm,lcm] = findpeaks(-drift); zcm = zeros(size(lcm));  subplot(2,1,1) plot(t,drift,t([lcp lcm]),[pkp -pkm],'or') xlabel('Time (s)') ylabel('Displacement (cm)') grid  subplot(2,1,2) plot(tt,vd,t([lcp lcm]),[zcp zcm],'or') xlabel('Time (s)') ylabel('Speed (cm/s)') grid

如图所示:

求微分漂移速度以获得加速度。时滞长度是原来的两倍。丢弃两倍数量的样本来补偿延迟,丢弃相同数量的样本来消除瞬变。绘制速度和加速度。

adrift = filter(d,vdrift)/dt;  at = t(1:end-2*delay); ad = adrift; ad(1:2*delay) = [];  at(1:2*delay) = []; ad(1:2*delay) = [];  subplot(2,1,1) plot(tt,vd) xlabel('Time (s)') ylabel('Speed (cm/s)') grid  subplot(2,1,2) plot(at,ad) ax = gca; ax.YLim = 2000*[-1 1]; xlabel('Time (s)') ylabel('Acceleration (cm/s^2)') grid

如图所示:

使用 diff 计算加速度。添加零来补偿数组尺寸的变化。将结果与使用滤波器获得的结果进行比较。请注意高频噪声的数量。

vdiff = diff([drift;0])/dt; adiff = diff([vdiff;0])/dt;  subplot(2,1,1) plot(at,ad) ax = gca; ax.YLim = 2000*[-1 1]; xlabel('Time (s)') ylabel('Acceleration (cm/s^2)') grid legend('Filter') title('Acceleration with Differentiation Filter')  subplot(2,1,2) plot(t,adiff) ax = gca; ax.YLim = 2000*[-1 1]; xlabel('Time (s)') ylabel('Acceleration (cm/s^2)') grid legend('diff')

如图所示:

相关信号之间的延迟

三个不同位置的传感器测量车辆过桥时产生的振动。它们产生的信号在不同时间到达分析站。采样率为 11025 Hz。使用确定信号之间的延迟。

加载这些信号 MATLAB? 并在工作区开始 App。每个信号的名称包括接收该信号的传感器的编号。创建三个显示屏。将每个信号从工作区浏览器拖到自己的显示屏上。来自传感器 2 信号的到达时间早于传感器 1 的信号。来自传感器 1 信号的到达时间早于传感器 3 的信号。

&bsp;   添加时间信息。选择 Signal 表中的三个信号,然后点击“分析器”选项卡上的按钮。选择 Sample Rate and Start Time 选项,并输入 11025 Hz 的采样率。

        这些信号共用一个时间轴。通过选择每个显示画面并在选项卡上选择来链接其时间跨度。

        要估计信号之间的延迟,请水平平移它们,并对齐时间轴末端附近的一个显著特征。从选项卡中,读取时间轴的下限时间。选择一个高信噪比区域,例如每个信号末端附近的信号最大值。在来自传感器 2 的信号中,该特征在时钟开始后大约 0.197 秒时出现。

        同样,来自传感器 1 的信号在启动后大约 0.229 秒时出现该特征,而来自传感器 3 的信号在启动后大约 0.243 秒时具有该特征。因此,延迟的长度大约为 0.032 秒和 0.014 秒。

        也可以使用数据游标来求得延迟时间。按空格键重置视图。在选项卡上,点击 ▼ 下的箭头,然后选择Two。在前两个信号的最大值处分别放置一个游标。可以直接从 App 读取大约 0.032 秒的延迟。

        同样,顶部和底部信号之间的延迟为 0.014 秒。可以使用 finddelay 和 xcorr 函数获得相似的结果。

标签: pkm滑块式直线位移传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台