exponenta event banner

Взять производные сигнала

Вы хотите дифференцировать сигнал без увеличения мощности шума. Функция MATLAB ®diff усиливает шум, и результирующая неточность ухудшается для высших производных. Чтобы устранить эту проблему, используйте фильтр дифференциатора.

Анализ смещения перекрытия здания во время землетрясения. Найдите скорость и ускорение как функции времени.

Загрузить файл earthquake. Файл содержит следующие переменные:

  • driftСмещение пола, измеренное в сантиметрах

  • tВремя, измеренное в секундах

  • FsЧастота дискретизации, равная 1 кГц

load('earthquake.mat')

Использовать pwelch для отображения оценки спектра мощности сигнала. Обратите внимание, как большая часть энергии сигнала содержится в частотах ниже 100 Гц.

pwelch(drift,[],[],[],Fs)

Figure contains an axes. The axes with title Welch Power Spectral Density Estimate contains an object of type line.

Использовать designfilt для разработки дифференциатора FIR порядка 50. Чтобы включить большую часть энергии сигнала, укажите частоту полосы пропускания 100 Гц и частоту полосы останова 120 Гц. Осмотрите фильтр с помощью 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)

Figure Filter Visualization Tool - Zero-phase Response contains an axes and other objects of type uitoolbar, uimenu. The axes with title Zero-phase Response contains 2 objects of type line.

Дифференцируйте дрейф, чтобы найти скорость. Разделить производную на 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

Figure contains 2 axes. Axes 1 contains 3 objects of type line. Axes 2 contains 3 objects of type line.

Дифференцируйте скорость дрейфа, чтобы найти ускорение. Отставание вдвое длиннее. Отбрасывайте вдвое больше выборок для компенсации задержки и столько же для устранения переходного процесса. Постройте график скорости и ускорения.

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

Figure contains 2 axes. Axes 1 contains an object of type line. Axes 2 contains an object of type line.

Вычислить ускорение с помощью 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')

Figure contains 2 axes. Axes 1 with title Acceleration with Differentiation Filter contains an object of type line. This object represents Filter. Axes 2 contains an object of type line. This object represents diff.

См. также

| | | |

Связанные темы