你想在不增加噪声功率的情况下对信号进行微分。MATLAB®的函数diff
放大了噪声,而由此产生的精度恶化了更高的导数。要解决这个问题,可以使用微分器过滤器。
分析地震时建筑物地板的位移。求速度和加速度作为时间的函数。
加载文件地震
.该文件包含以下变量:
漂移
:地板位移,以厘米为单位
t
:时间,以秒为单位
Fs
:采样率,等于1 kHz
负载(fullfile (matlabroot“例子”,“信号”,“earthquake.mat”))
使用pwelch
显示信号功率谱的估计值。注意大部分信号能量是如何包含在100赫兹以下的频率中。
pwelch(漂移 ,[],[],[], Fs)
使用designfilt
设计了一个50阶FIR微分器。为了包括大部分信号能量,指定通频带频率为100hz和阻频带频率为120hz。用下列方法检查过滤器fvtool
.
Nf = 50;成就= 100;Fstop = 120;d = designfilt (“differentiatorfir”,“FilterOrder”Nf,...“PassbandFrequency”成就,“StopbandFrequency”Fstop,...“SampleRate”Fs);fvtool (d,“MagnitudeDisplay”,“零”,“Fs”Fs)
区分漂移,找出速度。导数除以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)”图(tt,vd,t([lcp lcm]),[zcp zcm],”或“)包含(“时间(s)”) ylabel (“速度(cm / s)”网格)
求漂移速度的微分,求加速度。滞后时间是原来的两倍。丢弃两倍的样本以补偿延迟,丢弃相同数量的样本以消除瞬态。画出速度和加速度。
漂流=过滤器(d, vdrift) / dt;在= t (1: end-2 *延迟);广告=漂流;广告(1:2 *延迟)= [];在(1:2 *延迟)= [];广告(1:2 *延迟)= [];次要情节(2,1,1)情节(tt, vd)包含(“时间(s)”) ylabel (“速度(cm / s)”) grid subplot(2,1,2) plot(at,ad) ax = gca;斧子。YLim = 2000*[-1 1];包含(“时间(s)”) ylabel (“加速度(cm / s ^ 2)”网格)
使用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)”)网格传奇(“过滤”)标题(“差异化加速过滤器”子plot(2,1,2) plot(t,adiff) ax = gca;斧子。YLim = 2000*[-1 1];包含(“时间(s)”) ylabel (“加速度(cm / s ^ 2)”)网格传奇(“差异”)
FVTool|designfilt
|findpeaks
|grpdelay
|周期图