Instananeous frequency of a chirp signal is halved?

  • Context: Graduate 
  • Thread starter Thread starter Luongo
  • Start date Start date
  • Tags Tags
    Frequency Signal
Click For Summary
SUMMARY

The discussion focuses on the calculation of instantaneous frequency for a chirp signal using MATLAB. The user initially computes the instantaneous frequency using the formula (s1.*ds2 - s2.*ds1)./(s1.^2 + s2.^2) but finds that the result is y = x instead of the expected y = 2x. The issue is resolved by employing the analytical signal approach, where the instantaneous frequency is calculated using the imaginary part of the log-derivative of the analytic signal, yielding the correct factor of 2. The user also corrects a mistake with an epsilon factor in their calculations.

PREREQUISITES
  • Understanding of MATLAB programming and syntax
  • Familiarity with Fast Fourier Transform (FFT) and Inverse Fast Fourier Transform (IFFT)
  • Knowledge of instantaneous frequency calculation methods
  • Basic concepts of chirp signals and their properties
NEXT STEPS
  • Learn about MATLAB's FFT and IFFT functions for signal processing
  • Study the derivation and application of the instantaneous frequency formula
  • Explore the concept of analytical signals and their significance in signal analysis
  • Investigate the role of epsilon correction factors in numerical computations
USEFUL FOR

Signal processing engineers, MATLAB users, researchers in communications, and anyone interested in analyzing chirp signals and instantaneous frequency calculations.

Luongo
Messages
119
Reaction score
0
I'm doing some research with MATLAB, where i have a simple chirp. y = sin(x.^2)
i take the FFT of the chirp, set the upper half of the FT of the signal to 0, and take the IFFT of this to recover the original chirp y with real and imaginary parts.
then i use the formula for calculation of the instantaneous frequency:

(s1.*ds2 - s2.*ds1)./(s1.^2 +s2.^2)
where s1 is the real part of y, s2 is imag of y
and ds1 and ds2 are the derivatives of s1 and s2 respectively.

It turns out i get my inst. freq to be y = x. but i expected y = 2x.
Is there any reason why my inst. frequency is missing the factor of 2? I have no idea what I'm doing wrong that results in the missing factor.
thanks!
any help is greatly appreciated.

here is my MATLAB code:
function []=chirp()

x = 0:0.01:5;
y = sin(x.^2);
y = sin(x.^2)-mean(y); %eliminate DC offset subtract mean
plot(x,y,'k')
hold on
y = fft(y);
y = 2*y; %double the amplitude
y(250:end) = 0; %cut off upper half the signal
y = ifft(y);
%double amplitude of the chirp signal
s1 = real(y);
plot(x,s1, 'p')
s2 = imag(y);
%plot(x,s2, 'r')
ds1 = diff(s1)./0.01;
ds1(501) = 0;
ds2 = diff(s2)./0.01;
ds2(501) = 0;
%derivative plots:
%plot(x,ds1,'y');
%plot(x,ds2,'k');
%obtain instantaneous frequency
n = (s1.*ds2 - s2.*ds1);
d = (s1.^2 +s2.^2+ (max(s1).^2));
q = n./d;
plot(x,q, 'g')
 
Physics news on Phys.org
How did you arrive at your formula for the instantaneous frequency? I suspect that it might be off.

If I calculate the instantaneous frequency using a different approach, with the analytical signal 'y' using your code:

dy = diff(y)/0.01;
dy(501) = 0;
instfrq = imag(dy./y);

I get something that tracks 2*x instead. Here I used the imaginary part of the log-derivative of the analytic signal:

\hat{y} = A e^{i\varphi(t)}
\frac{d\hat{y}}{dt}=i \frac{d\phi(t)}{dt} A e^{i\varphi(t)}
\rightarrow \frac{d\phi(t)}{dt} = \frac{\frac{d\hat{y}}{dt}}{i \hat{y}}
 
it turns out i made a mistake with my epsilion correction factor, it works now though. thanks
 

Similar threads

  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 8 ·
Replies
8
Views
3K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 10 ·
Replies
10
Views
4K
  • · Replies 10 ·
Replies
10
Views
2K
  • · Replies 2 ·
Replies
2
Views
1K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 1 ·
Replies
1
Views
939
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 43 ·
2
Replies
43
Views
6K