I am a control engineering student and I am studying the frequency response of a system, so the Laplace domain, the Bode plot, poles, zeros,etc. ... I have clear grasp of their meaning, but if I think about the practice it is hard to grasp, at least for me.

For example, I would like to study the frequency response of a DC motor with Arduino, but really don't know from where to start.

So, how do I study the frequency response of a physical system with Arduino? (for example a DC motor)

  • 1
    $\begingroup$ Start with making a circuit to connect the Arduino to the motor via a motor driver circuit. Then just feed the motor with sinusoidal waves from the Arduino. $\endgroup$
    – AJN
    Commented Jul 15, 2021 at 14:32
  • $\begingroup$ You need to figure out how you want to control your input signal, measure your output signal, and a way to display the data. I believe Arduino already has a USB-UART bridge interface to display text in terminal software on the PC so you should probably just use that. $\endgroup$
    – DKNguyen
    Commented Jul 15, 2021 at 14:50
  • $\begingroup$ Start by reading this book: amazon.co.uk/s?k=9780863802188&i=stripbooks&linkCode=qs (You can probably find it online with a Google search.) $\endgroup$
    – alephzero
    Commented Jul 15, 2021 at 16:40
  • $\begingroup$ Using sinusoidal inputs, as AJN suggests, would work and is probably the most intuitive way of measuring a frequency response. However, it is also possible to measure multiple frequencies at the same time and process the data using Welch's method, such using white noise. It can be noted that using white noise or some other broad spectrum signals it can be harder to detect whether your system has non-negligable nonlinearities, compared to using sinusoidal inputs. $\endgroup$
    – fibonatic
    Commented Jul 16, 2021 at 8:48

1 Answer 1


The arduino does impose some limits. But a classical frequency identification is build from a few steps:

  1. As the other comments already suggest, the design of a suitable input. As mentioned, a sinusoidal input (I actually recommend multisine) is suitable to accurately identify the response of a few frequencies. White noise or band-limited white noise can identify an entire range of frequencies, but less accurate as the energy per frequency must be divided. The common sense here is that if you compute the frequency domain transformation of the input signal, the higher the magnitude at certain frequencies, the better the identification for these frequencies. On top of that, for physical reasons, I suggest to add a DC component (so a constant offset) to ensure the DC motor keeps spinning, this prevent you from measuring non-linear start-stop behaviour.
  2. Sampling rate. The maximum frequency you can possible identify is equal to the Nyquist frequency - half the sampling rate. With identification, getting the cut-off frequency / resonance frequency is essential, so make sure you can measure fast enough.
  3. Experiment duration. The longer you measure, the more detailled the frequency identification looks. This means you can identify lower frequencies, and have more point is the high frequency region.
  4. Choice of Window and whether windowing should be applied. Windowing allows to get a more detailed frequency identification, whilst cutting the total identification length. So low frequencies are not very accurate, while higher, more desired frequency regions are.

So that leaves us with the Arduino issues. Most notably, a problem between 2 and 3. I dont know which Arduino you use, but something like an Uno might be troublesome. See suppose you want to measure at 1kHz (which might be fair), the USB transfer protocols might harm this sampling rate and make it impossible to continuously send data. Therefore, it is advisable to store the data in the Arduino and send it afterwards. Which leaves us with point 3: memory. The arduino is fairly limited in memory so how long can you actually measure and still store it?

Hope these provided some insights. Any questions are always welcome.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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