Sinewave with log frequency - Shows the wrong frequency content

I'm struggling with a rather basic problem. I create a sinewave with a continuously increasing frequency:
NPTS=500000;
A=(log(50)-log(7))/450;
time = linspace(0,450,NPTS)';
freq = 7*exp(A*time); % The frequency varies from 7 to 50 Hz
Y = sin(2*pi*freq.*time);
Then, when I do an FFT vs. Time of the Y trace, I find that the highest frequency in the signal is close to 150 Hz.
What am I missing here?

 Respuesta aceptada

hello
you have to compute the angle increment vs time then take the sine of that angle (or, in other words, do the integral of the time varying frequency and then take the sine of that angle )
NPTS=500000;
t_final = 450;
A=(log(50)-log(7))/t_final;
time = linspace(0,t_final,NPTS)';
dt = mean(diff(time));
fs = 1/dt
fs = 1.1111e+03
freq = 7*exp(A*time); % The frequency varies from 7 to 50 Hz
freq(1)
ans = 7
freq(end)
ans = 50
ang = cumsum(2*pi*freq)*dt; % integral of the time varying frequency
Y = sin(ang);
% spectrogram plot
nfft = 1000;
overlap = 0.75; % 75% overlap
spectrogram(Y,hanning(nfft),round(overlap*nfft),nfft,fs,'yaxis')
ylim([0 100])

3 comentarios

Djamil Boulahbal
Djamil Boulahbal el 5 de Nov. de 2024
Movida: Mathieu NOE el 5 de Nov. de 2024
That's an interesting calculation. Thank you very much for sharing. I still do not understand WHY my initial implementation fails to provide the correct result.
hello again
yes this is the usual remark when someone tries to generate variable frequency signals (sweeps)
always remember you are dealing with variable frequency and what you want at the end is the sine of an angle (not a frequency)
if your frequency is steady , you can write Y = sin(2*pi*freq.*time);
but if you have a variable frequency, start with the equation that describes how this frequency varies , multiply by 2*pi to convert to pulsation and then time integrate to get the angle
Ok, thank you very much for the explanation.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre MATLAB en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 24 de Oct. de 2024

Comentada:

el 5 de Nov. de 2024

Community Treasure Hunt

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

Start Hunting!

Translated by