## Introduction

Before we get started with utilizing our hardware to perform vibration signal analysis, we need to understand some key definitions from the world of Digital Signal Processing (DSP). In this post, we’ll be examining the difference between the Continuous and Discrete Space, Nyquist Theorem, Real-Time vs. Batching Techniques, and Causal Vs. Non-Causal Systems. Be sure to start at the beginning if you have just found this blog series!

## Continuous Vs. Discrete Space

When working with digital measurement devices, we are limited to gathering information in “discrete time”, that is, we can only take a finite number of measurements within a time period. This is usually limited by the response time of the sensor taking measurements. Of course, the real world doesn’t have discrete time but is “continuous time”. In reality, between any two time points, there exist an infinite number of other time points. This is a bit of an abstract concept, but as long as you understand that we have a limited number of samples per time period and that the discrete space has implications on our analysis, you’ll be OK. One of these implications is that, as DSP engineers, we need to abide by the Nyquist Theorem.

## Nyquist Theorem

The Nyquist Theorem states the following:

f_{m} = 2 f{s}

Where f_{m} is the minimum sampling rate required to measure frequencies of f_{s}. If the sampling frequency is less than f_{m} you’ll experience a phenomenon called *aliasing*, where the frequencies greater that f_{s} can be interpreted as lower frequency signals. This will limit the frequencies that can be measured by the Nicla to < 62.5 Hz, because it is capable of sampling at about 125 Hz. While 2x is the theoretical minimum. In engineering applications, we usually aim to sample at a frequency of >10x the frequency being measured depending on the application.

## Real Time Vs. Batching Techniques

In our analysis, we will be utilizing real-time and batching techniques. In real-time systems, data is processed immediately, with low-latency, usually to perform some sort of control action that uses feedback. For example, an airbag deploying upon a vehicle crash or a gimbaled thrust of a rocket adjusting a rocket’s angular rotation are examples of real-time systems that require rapid signal processing to perform a control action. In less time-sensitive systems, batching can be used, where the entire history of a signal can be analyzed. This usually has reduced computational requirements as time is less of an issue, and allows for the implementation of algorithms that are more effective on batched data. During this series we will be exploring examples of both real-time and batched systems!

## Causal Vs. Non-Causal Systems

A causal system is a system whose state depends on only current and past outputs. A non-causal system is a system whose state depends on *future* inputs. Even though there are no known non-causal systems in the real world, there are analysis techniques which work by going *forward* and *backwards* in time. For example, filters often introduce a delay, so to mitigate this effect filters can be applied both forwards and backwards in time. This will have the effect of *future* data points having an effect on past data points, which is unintuitive. Consequently, most real-time algorithms need to be more or less causal systems, otherwise they would have to store significant blocks data to process in batches. Regardless, non-causal algorithms have an important role in signal analysis, especially in filtering and batch processing.

Now that we have the definitions out of the way, let’s explore some real world applications for these systems. In the next blog, we will be making a crude leveler to help you make sure things are flat. Stay tuned!