Fourier Transform of Swept Sine Signal

Hi,
I am trying to obtain the frequency response of a mechanical system using Matlab. Currently, the setup I have has the system mounted on a vibration shaker and exposed to a continuously increasing sine signal from 10 Hz to 5000 Hz. I have an accelerometer connected to a data acquisition system gathering the time-domain output response of the mechanical system with respect to a known input and I am then using Matlab to take the Fourier transform of the recorded signal, hoping to get the frequency response of the mechanical system over the input frequencies.
When I do this and plot the fourier transform of the swept sine signal in Matlab, I find that although the shape looks "right", the amplitudes obtained are very small compared to the time domain values I observed in the recorded data.
To illustrate the issue, I simulated the signal y = sin*(2*pi*{200*t}*t) with 20000 points over 2 seconds in Matlab (10000 Hz sampling frequency) and used the fft function. The input signal is a sine wave with amplitude of 1 in the time domain and contains frequencies from 0 to 400 Hz. So with the fft plot, I expect to see an amplitude of 1 for frequencies from 0 to 400 Hz, but instead I get a scaled fft amplitude of 0.035. Is there a reason why this is so much lower than 1?
If, instead of a swept sine signal, my simulated signal 'y' were the sum of two distinct sine waves, the fft plot correctly gives me two nice peaks with magnitudes equal to the original sine amplitudes. Why does this not happen for the swept sine signal?
I think I am missing something fundamental with the fourier transform and if someone can clarify, it would be greatly appreciated.

1 Comment

Hi
I believe I'm looking at a problem very similar to yours. I was wondering if you were able to resolve this issue after all and, if so, could you comment on what might be wrong with my code here:
https://www.mathworks.com/matlabcentral/answers/496382-swept-frequency-sinosoid-using-a-linearly-increasing-sweep-frequency

Sign in to comment.

Answers (1)

Honglei Chen
Honglei Chen on 11 Apr 2012
Looks to me within 2 seconds your signal sweep from 0 to 800Hz, so it's not really a 400 Hz sweep. Given your signal is real, it actually occupies 1600 Hz bandwidth.
Anyway, I think the magnitude of a chirp signal spectrum has a scaling factor in front of it, related to 1/sqrt(B/T) where B is the bandwidth and T is the signal duration. In your example, this number gives 0.0354. This could be a coincidence because there are other items in the equation and I don't know if you are plotting the power or the magnitude. However, this is one reason why it does not match the signal amplitude. You are sweeping a frequency region so at each frequency, you don't really have the full power.

1 Comment

Are you saying that the swept frequency sinosoids when used as y = sin*(2*pi*{200*t}*t) in the above question will always be scaled by some factor in time domain as well? What would be the B in this case? Assuming that T is the period of the sinosoid, is B the entire bandwidth over which the frequency is being swept? Will it be undone by simply multiplying the result of y = sin*(2*pi*{200*t}*t) with the same factor, if we wish to get an unscaled magntiude of the signal in time domain?
My related question is asked at the following link and I was wondering if you could comment at the problem there? Thanks!
https://www.mathworks.com/matlabcentral/answers/496382-swept-frequency-sinosoid-using-a-linearly-increasing-sweep-frequency

Sign in to comment.

Asked:

on 11 Apr 2012

Commented:

on 13 Dec 2019

Community Treasure Hunt

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

Start Hunting!