ポジローぽけっと

昨日より今日、今日より明日を信じて、トライトライ

matlab octave filter 手習い

計測データ(変位)から速度を求める場合、微分は離散なのでエッジがでる。それをフィルターで滑らかにする方法

clc;
load('test.mat');
counter=0;
%データの前処理
for i=2:size(Time,1)
	if X(i) > X(i-1)
		counter=counter+1;
		Xsum(i,1)=2*pi-X(i)+counter*2*pi;
	else
		Xsum(i,1)=2*pi-X(i)+counter*2*pi;
	end
end
plot(Time,Xsum);grid
%速度を計算
dX=[diff(Xsum)./SamplingRate;0];dX(1)=0;
%plot(Time,dX);grid
%fft
%ここからがフィルター処理
fftdX=fft(dX);
for i=1:size(fftdX)
        %ゲインの小さい(ノイズと思わしき)部分を落とす
	if abs(fftdX(i)) <= 50
		fftdX(i)=0;
	end
end
%plot([1:2803],abs(fftdX))
%inverse fft
filterddX=real(ifft(fftdX));
plot(Time,filterddX,Time,dX);grid
%加速度を計算
ddX=[diff(filterddX)./SamplingRate;0];
plot(Time,ddX);grid

周波数帯で落とすやり方は想像できるんだけれど、数学的にまだ僕が理解しきれてない。とりあえずここまで