The first thing to know about these FFT graphs is that the absolute amplitude is meaningless, since the FFT is just counting the number of times it sees that frequency, so the amplitude depends on flight time. To know if the vibration is too high, you must use the VIBE messages in the flight logs. If the vibe logs are low (<30), then you probably don’t need to worry about vibrations too much.
What does matter in FFT is relative amplitude, and you can see here that your most active frequency is ~140 Hz. The high Z amplitude means that this is almost certainly caused by the propellers buffeting the motor arms, as this is the most common source of Z vibration. 140 Hz is 4200 RPM assuming dual bladed props, so that seems reasonable.
If you’re in the US, McMaster is a place where you can order dampers by durometer, but remember that it’s not the only thing that goes into damping considerations. Often, the easiest thing to do is increase the mass of the flight controller, for example.
Yeah, a motion at a frequency equal to RPM could definitely be prop balance.
Another possibility is that the 140Hz signal is actually just a harmonic of a 70Hz source. Usually higher frequencies are damped more easily, but if a higher harmonic happens to fall on the natural frequency of the drone frame or damper, then it may end up being felt more strongly than the true driving frequency.
The graph on the left is the accelerometer, which measures translational motion, and the right graph is the gyro, which measures rotation. This distinction can be important for solving particular problems (eg, Z accel vibration affects altitude hold) and narrowing down the possible sources. For example, if you put your flight controller on a tall squishy mount like this popular one, it could cause X/Y translational motion transform into rotational motion as the FC flops back and forth like a pendulum.
As for designing a damper to target particular frequencies, that’s outside of my knowledge, and unfortunately most of the literature I’ve ever found on the subject is geared for isolating heavy machinery. But honestly, I’m not sure if it would be worth trying to design it, as even just finding the right material is difficult, as you noted. A trial-and-error approach is likely to be more productive, as there’s a lot of cheap mounting options that are easy to experiment with.
@Anubis Do you know how the results are computed? So if there are 10 sets of accelerometer data that has 1024 samples, Does this routine just take the FFT of the 10 sets of data and then add them together? Or does it average the FFT’s? If they are averaged then the amplitudes are meaningful. @Michael_Oborne How is the FFT of multiple data sets computed? It would make sense to normalize and average the data sets. Even though the gyro and accelerometer data is not in engineering units, relative amplitudes between flights could be compared. Any insight on how the FFT results in these graphs are computed would be appreciated.
depending on how much you know about fft’s, @Anubis 's answer is correct.
a fft tells you the frequency of that data that is most common in the sample size.
depending on the bin size, the sample data length changes.
MP takes all values, split it by the bin size, and fft’s each bin. then averages those results.
this means the fft is over the entire log, it could be used to take only part of the log, but the issues we are looking for are normally throughout the entire log. because the magnitude is small during those times of no movement, the overall fft is not affected.
the magnitude of that data is just how often it was seen.
@Michael_Oborne thanks for the prompt response! I use tools for spectral analysis but I’m not intimately familiar with the details of FFT calculations.
I looked through Matlab tutorials regarding normalization of the FFTs to determine amplitude. If you take a sinusoid with a given amplitude and process it using a FFT and normalize it by its sample length, you will get the input amplitude at the frequency. Am I understanding this correctly?
As for the calculation and mission planner, The method you are using makes the
amplitudes a function of log size.
I was looking to use this FFT tool to dynamically balance rotor blades. Although I could use the whole log for this purpose, typically vibrations for helicopters on the ground are slightly different than the vibrations airborne mainly due to landing gear interaction with the ground So I think it’s better to analyze the airborne portions of the log.
Thanks for the explanation!
@peterbarker Does your FFT python tool do the FFT calculations as is done in Mission Planner? If you could describe how the data is processed in the detail as Michael has done above, that would be great! Of if you have a link that describes this, that also works!
Sometimes. Normally, you would need a way to induce a vibration and change its frequency until you see an amplified response. That’s a difficult experiment to do practically without specialized equipment, but sometimes it’s possible to get enough insight from flight controllers which have multiple IMUs.
For example, the Cube Black has three IMUs: two vibration-isolated ones, and one undamped one. If you do an FFT of all three IMUs from the same flight, you may be able to determine the natural frequency of the vibration isolated IMUs (which is what matters) by comparing the damped vs. undamped FFT amplitudes. You can kind of do this with even a single IMU by flying, changing your FC mount, then flying a very similar flight again. Seeing how the frequency peaks change relative to each other between the 2 flights can tell you if your mount is resonating.
Based on what was discussed above, I don’t think this is an accurate analysis. the flight times would need to be exactly the same so as to be able to compare the magnitudes of the peaks.
@Michael_Oborne I believe it would be better if the analysis was done differently to allow for a comparison of amplitudes between flights. Why not base the FFT size on the size of the data sets saved from the IMU. that way you could easily scale the amplitude and average data over the flight. Also the data would be more consistent as it won’t have large discontinuities that you would see by concatenating datasets together, unless you are doing windowing over each dataset.
Right, to be clear, I meant looking at the relative height of the peaks within one flight and comparing them to the relative heights of other flights. For example, if @ardisd changed his FC mount and flew again to discover that the 70Hz peak was now greater in magnitude than the 140Hz peak, this would suggest that his new mount resonates at 70Hz.
Thank you for your response. If you could educate me more on relative amplitude vs absolute? How could I capture this data? Is the pixhawk capable of supplying the information needed for me to inspect data and plot the amplitude?
Sure. The absolute amplitude of a peak is just the number you read off the graph; in OP’s picture, the Z vibration has an amplitude of ~1100. But this number is really not useful because it depends on flight time, so you can’t really use it to compare to other flights.
When looking at relative amplitude, you’re just comparing the height of the different peaks to each other, like “my Z vibrations are much strongest at 140Hz” or “after changing my FC mount, the 70Hz peak is much larger in comparison to the 140Hz peak than last flight.” This is about as precise as our analyses can be with these tools, but generally it’s good enough.
As for doing this yourself, the steps are:
Enable batch sampling (Copter 3.6 or later) with INS_LOG_BAT_OPT = 1. Also, set INS_LOG_BAT_MASK to choose which IMUs to log. Set it =1 for first IMU, =3 for IMU1 and 2, or =7 for three IMUs.
Fly the drone
Download the dataflash log.
In mission planner, press Ctrl+F and click the FFT button. In the new window, click the “New DF Log” button and select the flight log.
If logging multiple IMUs, you might need to make sure all the relevant IMUs are enabled with INS_ENABLE_MASK. Also, later versions of ArduCopter (including current master) will allow us to collect post-filtered IMU data by setting INS_LOG_BAT_OPT = 3, which will be especially useful for configuring our filters.
There’s a long forum thread which has some more information regarding this here:
Just note that the “fast IMU logging” they refer to has been superceded by the batch logging I included in my instructions.