1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Instananeous frequency of a chirp signal is halved?

  1. Jan 27, 2013 #1
    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.
    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
    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:
    %obtain instantaneous frequency
    n = (s1.*ds2 - s2.*ds1);
    d = (s1.^2 +s2.^2+ (max(s1).^2));
    q = n./d;
    plot(x,q, 'g')
  2. jcsd
  3. Feb 1, 2013 #2
    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:

    [itex]\hat{y} = A e^{i\varphi(t)}[/itex]
    [itex]\frac{d\hat{y}}{dt}=i \frac{d\phi(t)}{dt} A e^{i\varphi(t)}[/itex]
    [itex]\rightarrow \frac{d\phi(t)}{dt} = \frac{\frac{d\hat{y}}{dt}}{i \hat{y}}[/itex]
  4. Feb 1, 2013 #3
    it turns out i made a mistake with my epsilion correction factor, it works now though. thanks
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook