<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Thomas Enevoldsen</title>
    <description>The latest articles on DEV Community by Thomas Enevoldsen (@easyquadtune).</description>
    <link>https://dev.to/easyquadtune</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4192582%2F22aa656d-1514-4aa2-98b5-a9d4a298bdeb.png</url>
      <title>DEV Community: Thomas Enevoldsen</title>
      <link>https://dev.to/easyquadtune</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/easyquadtune"/>
    <language>en</language>
    <item>
      <title>What a gyro trace actually tells you (and when it tells you nothing)</title>
      <dc:creator>Thomas Enevoldsen</dc:creator>
      <pubDate>Sun, 18 Oct 2026 19:23:06 +0000</pubDate>
      <link>https://dev.to/easyquadtune/what-a-gyro-trace-actually-tells-you-and-when-it-tells-you-nothing-3ej1</link>
      <guid>https://dev.to/easyquadtune/what-a-gyro-trace-actually-tells-you-and-when-it-tells-you-nothing-3ej1</guid>
      <description>&lt;p&gt;A PID tune is a claim about how an aircraft responds to a stick input. Most&lt;br&gt;
tuning advice is a table of defaults applied to a quad nobody measured. The&lt;br&gt;
blackbox log is the measurement — but only if you know which part of it answers&lt;br&gt;
which question.&lt;/p&gt;

&lt;p&gt;Two analyses do most of the work: the spectrum and the step response. They answer&lt;br&gt;
different questions, and they fail in different ways.&lt;/p&gt;

&lt;h2&gt;
  
  
  The spectrum: a peak is not a diagnosis
&lt;/h2&gt;

&lt;p&gt;A gyro trace is a time series, and a time series has a spectrum. Welch's method&lt;br&gt;
cuts the trace into overlapping windows, applies a window function to each (Hann&lt;br&gt;
is the standard choice), takes an FFT, and averages the squared magnitudes. The&lt;br&gt;
averaging is the point. One FFT over a whole flight smears the result, because&lt;br&gt;
throttle — and therefore motor RPM — changes during the recording. Welch trades&lt;br&gt;
frequency resolution for a stable estimate of where energy lives.&lt;/p&gt;

&lt;p&gt;What matters is not that a peak exists. It is how the peak behaves while&lt;br&gt;
throttle changes.&lt;/p&gt;

&lt;p&gt;A narrow peak whose centre stays at the same frequency from hover to full&lt;br&gt;
throttle is consistent with a structural mode: a frame, an arm, a standoff, a&lt;br&gt;
camera mount. A static notch is meaningful for a tone that does not move, but a&lt;br&gt;
notch does not remove the mode; it hides it from the loop. That distinction&lt;br&gt;
decides whether you spend the afternoon on screws and carbon or in the filter&lt;br&gt;
tab.&lt;/p&gt;

&lt;p&gt;A ridge that climbs with RPM, usually with evenly spaced copies at higher&lt;br&gt;
frequencies, is motor and propeller blade-pass energy, with airflow adding to the&lt;br&gt;
broadband floor underneath. A fixed notch is the wrong instrument here: the&lt;br&gt;
energy leaves the notch as soon as the throttle moves. That&lt;br&gt;
is the mechanism an RPM-tracking filter exists for — the &lt;code&gt;dyn_notch_*&lt;/code&gt; family in&lt;br&gt;
Betaflight, rather than one static cutoff.&lt;/p&gt;

&lt;p&gt;A broad raised floor with no dominant peak is not a mode at all. It is many&lt;br&gt;
small sources at once: a damaged prop, a dirty motor, a hard-mounted flight&lt;br&gt;
controller, wiring that rattles. Point that at hardware. No filter setting fixes&lt;br&gt;
a loose screw.&lt;/p&gt;

&lt;p&gt;And a peak at a particular frequency is not a diagnosis on its own. A motor&lt;br&gt;
harmonic, a frame mode, a camera mount and a loose screw can all put energy in&lt;br&gt;
the same bin. The FFT measures energy, not cause. Which axis it appears on,&lt;br&gt;
whether it has harmonics, and whether it survives a prop swap are what turn a&lt;br&gt;
measurement into a hypothesis.&lt;/p&gt;

&lt;h2&gt;
  
  
  The step response: two faults that feel identical
&lt;/h2&gt;

&lt;p&gt;A step response isolates one fast stick movement and asks a narrow question: how&lt;br&gt;
closely did the gyro follow the setpoint? Normalise both curves over the window&lt;br&gt;
and two features become visible, and they are not the same fault.&lt;/p&gt;

&lt;p&gt;Overshoot is the response going past the commanded value and coming back. The&lt;br&gt;
peak sits above the setpoint line. That is a damping and phase problem around the&lt;br&gt;
loop: too much gain for the phase margin available, or a filter delay eating&lt;br&gt;
margin that the gains assume is there. The answer lives on the P/D side of the&lt;br&gt;
loop.&lt;/p&gt;

&lt;p&gt;Droop is different. The response rises, then levels off below the commanded rate&lt;br&gt;
while the stick is still held. It never arrives. The loop is stable; it simply&lt;br&gt;
lacks low-frequency authority. That is I-term territory, and it is not fixed by&lt;br&gt;
the same change that fixes overshoot. Push gain into a drooping response and you&lt;br&gt;
can trade a lag for an oscillation.&lt;/p&gt;

&lt;p&gt;In the goggles these feel the same: the quad does not do what you asked. A single&lt;br&gt;
"tune quality" score averages them into a meaningless middle. A quad can overshoot&lt;br&gt;
on roll and droop on pitch in the same flight, and the two axes need opposite&lt;br&gt;
corrections.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hard part is refusing to answer
&lt;/h2&gt;

&lt;p&gt;The FFT is textbook. A step-response estimator is a few hundred lines. The&lt;br&gt;
engineering problem is deciding when the log cannot support a decision, and then&lt;br&gt;
saying so out loud.&lt;/p&gt;

&lt;p&gt;A step response needs excitation. A hover-only flight contains no step. A flight&lt;br&gt;
of rolls and flips may give usable roll evidence and no clean pitch step, because&lt;br&gt;
flips couple the axes and often end near motor saturation. A short log gives an&lt;br&gt;
average too unstable to trust. A gyro dominated by a damaged prop produces a best&lt;br&gt;
fit that is a fit to noise. A missing &lt;code&gt;rcCommand&lt;/code&gt; channel, or a header sample rate&lt;br&gt;
that disagrees with the timestamps, moves the entire frequency axis.&lt;/p&gt;

&lt;p&gt;In each of those cases the correct output is "not enough data". Not a&lt;br&gt;
conservative-looking guess with a confidence badge. The failure mode that matters&lt;br&gt;
is not a wrong estimate; it is an estimate that looks like an answer. A blank&lt;br&gt;
measurement in a lab notebook is honest. A curve drawn through noise is not.&lt;/p&gt;

&lt;p&gt;That is why a usable report includes what it could not measure: which axis had no&lt;br&gt;
clean step, which maneuver is missing, whether the log is Chart-ready, Partial or&lt;br&gt;
Not safe to tune from, and why. Refusing is a threshold with a reason attached,&lt;br&gt;
not a mood. It is also the hard part to test: the interesting cases are the ones&lt;br&gt;
where the data is almost good enough.&lt;/p&gt;

&lt;p&gt;Betaflight ships defaults, and they are a reasonable place to start. They are not&lt;br&gt;
a measurement of your airframe. The log is.&lt;/p&gt;




&lt;p&gt;I built Easyquadtune around that constraint: a Welch PSD over the gyro for the&lt;br&gt;
noise peaks, a per-axis step estimate that reports overshoot and steady-state&lt;br&gt;
ratio separately, and a CLI diff for Cine, Freestyle and Race. It labels a log&lt;br&gt;
Chart-ready, Partial or Not safe, and it says when it cannot answer.&lt;/p&gt;

&lt;p&gt;Worked demo with the actual arithmetic, no signup:&lt;br&gt;
&lt;a href="https://easyquadtune.vercel.app/?view=demo" rel="noopener noreferrer"&gt;https://easyquadtune.vercel.app/?view=demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The demo is an illustrative render, labelled as such in the app — not a customer&lt;br&gt;
log. The longer writeup is here:&lt;br&gt;
&lt;a href="https://easyquadtune.vercel.app/guides/betaflight-blackbox-tuning.html" rel="noopener noreferrer"&gt;https://easyquadtune.vercel.app/guides/betaflight-blackbox-tuning.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>signalprocessing</category>
      <category>fft</category>
      <category>drones</category>
      <category>betaflight</category>
    </item>
  </channel>
</rss>
