MATLAB Answers

New to FFT - is my result valid?

1 view (last 30 days)
Daniel Gelman
Daniel Gelman on 29 Jul 2014
Edited: Star Strider on 29 Jul 2014
I am revisiting Matlab FFT after years of not practicing. I have a signal in which I removed the DC component and plotted the FFT. I have interesting fundamental frequencies located every 1.25 Hz with difference amplitudes. My question is if these frequencies is actual data from the singal or is it somesort of harmonic that FFT() adds. This signal is physiological so to have data that has consistent 1.25Hz harmonics is questionable.
Please let me know if I am doing something incorrect. Attached are images of the signal and the FFT. Thank you.
My code:
delimiterIn = '\t';
headerlinesIn = 1;
A = importdata(filename,delimiterIn,headerlinesIn);
TimeStamp = (, 1) -,1))./1000;
ForceDataM =, 2);
ForceData = ForceDataM - mean(ForceDataM);
plot(TimeStamp, ForceData);
xlabel('Time (s)');
ylabel('Force (g)');
NFFT = 2^nextpow2(L);
Y = fft(ForceData,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
% axis([0 .5 0 5])
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')

Answers (1)

Star Strider
Star Strider on 29 Jul 2014
Without knowing more about what you are measuring and how you are measuring it, it’s difficult to say. A 1.25 Hz tremor is certainly in the physiological range (see the CMDG Tremor site) that usually span about 3-15 Hz, and tremors tend to be constant in an individual. I seriously doubt that the fft function is ‘adding’ data, but your instrumentation could be.
If the same harmonics are present with the same instrumentation across multiple subjects in essentially the same experimental conditions, that would suggest your instrumentation is generating them. If they’re unique to that subject, you likely have to consider them valid data unless you can show them to be artifacts.
Star Strider
Star Strider on 29 Jul 2014
My pleasure!
Interesting. A signal occurring at 1.25 Hz corresponds to 75/min so it could be the heartbeat.
The harmonics could be artifacts of the sampling procedure, so you might want to use a bandpass filter to eliminate signals you have a priori reason to believe are not valid frequencies in your signal. You may have to experiment with various filter passbands to get appropriate results. (I would use the second-order-section implementation of a Butterworth filter with a low-frequency cutoff of 0.05 Hz, since this would also eliminate the DC offset and some baseline drift and therefore eliminate the need to subtract the mean of your signal first. The high-frequency cutoff will have to be your call. I would do a literature search to see what signal processing procedures others have used, at least in part to be sure you will have publishable results at the end.)
Be sure to have data appropriate to account for the Hering-Breuer reflex and other known physiological variables as well. You might also consider simultaneously recording the EKG (later processed with a 0.05-150 Hz filter). It’s better than trying to infer cardiac activity from a mechanical signal.

Sign in to comment.


Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!