主要内容

对信号求导

你想在不增加噪声功率的情况下区分一个信号。MATLAB®的函数diff噪声会被放大,导致更高阶导数的不准确性进一步恶化。要解决这个问题,使用微分器过滤器代替。

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

加载文件地震.该文件包含以下变量:

  • 漂移:地板位移,单位为厘米

  • t:时间,单位为秒

  • Fs:采样速率,等于1khz

负载(“earthquake.mat”

使用pwelch显示信号功率谱的估计值。注意大多数信号能量是如何包含在100赫兹以下的频率中。

pwelch(漂移 ,[],[],[], Fs)

图包含一个坐标轴对象。标题为Welch功率谱密度估计的轴对象包含一个线型对象。

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

Nf = 50;成就= 100;Fstop = 120;d = designfilt (“differentiatorfir”“FilterOrder”Nf,...“PassbandFrequency”成就,“StopbandFrequency”Fstop,...“SampleRate”Fs);fvtool (d,“MagnitudeDisplay”“零”“Fs”Fs)

图过滤可视化工具-零相位响应包含一个轴对象和其他类型的uitoolbar, uimenu对象。标题为Zero-phase Response的轴对象包含2个line类型的对象。

微分漂移来求速度。导数除以dt,连续采样之间的时间间隔,以设置正确的单位。

dt = t - t (1) (2);vdrift =过滤器(d,漂移)/ dt;

滤波后的信号被延迟。使用grpdelay以确定延迟是滤波顺序的一半。通过丢弃样本来进行补偿。

延迟=意味着(grpdelay (d))
延迟= 25
tt = t (1: end-delay);vd = vdrift;vd(1:延迟)= [];

输出还包括一个长度等于滤波器顺序或组延迟的两倍的瞬态。延迟样品被丢弃在上面。丢弃延迟更能消除瞬态。

tt(1:延迟)= [];vd(1:延迟)= [];

画出漂移和漂移速度。使用findpeaks验证漂移的最大值和最小值对应于其导数的零点交点。

(pkp,连结控制协定)= findpeaks(漂移);zcp = 0(大小(lcp));(pkm是lcm) = findpeaks(漂移);zcm = 0(大小(lcm));次要情节(2,1,1)情节(t,漂移,t ((lcp lcm)), (pkp pkm),”或“)包含(“时间(s)”) ylabel (“位移(cm)”)网格子图(2,1,2)图(tt,vd,t([lcp lcm]),[zcp zcm],”或“)包含(“时间(s)”) ylabel (“速度(cm / s)”网格)

图中包含2个轴对象。轴线对象1包含3个线型对象。轴线对象2包含3个线型对象。

微分漂移速度,求加速度。延迟时间是原来的两倍。丢弃两倍多的样本来补偿延迟,同时丢弃同样多的样本来消除瞬态。画出速度和加速度。

漂流=过滤器(d, vdrift) / dt;在= t (1: end-2 *延迟);广告=漂流;广告(1:2 *延迟)= [];在(1:2 *延迟)= [];广告(1:2 *延迟)= [];次要情节(2,1,1)情节(tt, vd)包含(“时间(s)”) ylabel (“速度(cm / s)”)网格子图(2,1,2)图(at,ad) ax = gca;斧子。YLim = 2000*[-1 1];包含(“时间(s)”) ylabel (“加速度(cm / s ^ 2)”网格)

图中包含2个轴对象。axis对象1包含一个line类型的对象。axis对象2包含一个line类型的对象。

使用以下方法计算加速度diff.添加零以补偿数组大小的变化。将结果与使用滤波器得到的结果进行比较。注意高频噪声的数量。

vdiff = diff / dt([漂移;0]);adiff = diff / dt ([vdiff; 0]);Subplot (2,1,1) plot(at,ad) ax = gca;斧子。YLim = 2000*[-1 1];包含(“时间(s)”) ylabel (“加速度(cm / s ^ 2)”)网格传奇(“过滤”)标题('加速度与微分过滤器') subplot(2,1,2) plot(t,adiff) ax = gca;斧子。YLim = 2000*[-1 1];包含(“时间(s)”) ylabel (“加速度(cm / s ^ 2)”)网格传奇(“差异”

图中包含2个轴对象。带有标题加速与微分过滤器的axis对象1包含一个线型对象。该对象表示Filter。axis对象2包含一个line类型的对象。这个对象表示diff。

另请参阅

||||

相关的话题