I have 3-dimensional readings from a tilt sensor (specifically these are rotational angles about X, Y, and Z axes) over time. Let's call these angles S. I want to infer S at a specific time t_0, but each reading is discrete and are at different time points across axes. Here is graphic1 to illustrate.


I'm thinking the solution will be something like:

Construct a window in time centred on t_0, then smooth/interpolate between the discrete points within that time window to obtain the 3-dimensional value at t_0, like in graphic2.


However, I'm not sure on the following:

  • How wide should the window be such that no information is lost? (maybe something about Nyquist theorem?)
  • What smoothing algorithm to use?
  • The readings themselves are noisy.

Am I thinking about this problem the right way? I'm open to other alternatives.

Also worth nothing that I have to write an implementation in TypeScript.


Assuming that the signal is prefiltered and uniformly sampled according to Shannon Nyquist the textbook solution is to upsample it using some approximation of the ideal (frequency domain) brickwall lowpass filter, equivalent with a (windowed) sin(x)/x function in the time domain.

The problem is similar to showing a smooth (zoomed in) waveform of discretely sampled audio in an audio editor. Perhaps you can find the code you need in eg Audacity?

If the signal contains noise, you might be able to trade noise suppression for signal distortion by knowing the statistics of both and using a Wiener filter.

As this seems to be a control systems project, perhaps you can use a Kalman filter.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.