Wednesday, 31 August 2016

How to remove or filter the drift problem in measured Strain signal?


I have the strain signal of a lateral beam of a car measured at sampling rate 1,200Hz from data acquiring system. Even after using temperature compensation in strain gage, we are getting drift. So I wanted to remove drift in post processing of the strain signal. I have tried using High pass filter (HPF) of order 10th with cutoff freq = 200Hz, but I am losing peaks of the strain signal. So HPF is not useful.


Which filter is suitable to remove drift for strain signals? considering the fact that I want to retain peaks and what other methods I can use to remove the drifts?



Also, what are the exact factors to consider in choosing the cutoff frequency for HPF? and how to check it is correct?


I have attached the strain signal and HPF filtered signal of 10th order.


strain signal


HPF filtered signal



Answer



The usual first approach to this is to use a DC Blocker: $$ y[n] = \alpha y[n-1] + x[n] - x[n-1] $$ where $0 < \alpha < 1$, $y$ is the DC blocked signal and $x$ is your original signal.


If I simulate your signal and apply the DC Blocker to it, the results are in the figure below.


It should preserve the peaks well.


R code to implement it below.


enter image description here



How to choose $\alpha$ ?


This really depends on what you are going to use the data for later. If it's a control application, then phase is probably important to you.


More generally, you want to JUST remove the DC component and not much else. In that case, just look at the magnitude frequency response of the filter.


As you can see from the plots below, low values of $\alpha$ (less than $0.9$ tend to have a bigger impact on the lower frequencies. Hence, I tend to use values of $\alpha$ between $0.9$ and $1.0$.


enter image description here


enter image description here




R Code Below


#27468


T <- 1000
Npeaks <- 10

idx_peaks <- runif(Npeaks,1,T)

strain <- rnorm(T) + c(seq(1,2*T/3,1) ,seq(2*T/3+1,0,-2))/100

strain[idx_peaks] <- strain[idx_peaks] + 10

detrended <- 0*strain

alpha <- 0.9

for (k in 1:length(strain))
{
if (k>1)
{
detrended[k] <- alpha*detrended[k-1] + strain[k] - strain[k-1]
}
else
{

detrended[k] <- 0
}
}

par(mfrow=c(2,1))
plot(strain,col="blue", type="l")
plot(detrended,col="blue", type="l")

No comments:

Post a Comment

readings - Appending 内 to a company name is read ない or うち?

For example, if I say マイクロソフト内のパートナーシップは強いです, is the 内 here read as うち or ない? Answer 「内」 in the form: 「Proper Noun + 内」 is always read 「ない...