help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Any FFT expert around?


From: oxy
Subject: Re: Any FFT expert around?
Date: Wed, 19 Feb 2014 10:49:57 +0100

hi brian,

now it works ... great!!!!!!!

Look at the code below ajusted according to your hints.

Just one question more: you are calculating the frequency
vector as:

         freq1=-linspace(-Fs1/2,   Fs1/2-1/at,   Fs1*at)';

that makes it non-symetric. Isn't it better ...

         freq1=-linspace(-Fs1/2+1/at,   Fs1/2-1/at,   Fs1*at)';

...? Then it's symetric. Hey, thanks a lot! Great help!!!!!

oxy

%======== DEMONSTRATION CODE =========
% TTF Demo: this code shows how to calculate the
% frequency domain when doing FFT of td-signals.

%--- parameter setup: same signal, 2 sampling rates ---
clear all
nu=10;            % signal frequency
at=5;             % acquisition time
T1=2              % signal decay constant in time domain
FsFactor1=4;      % sampling rate factor 1, Fs1/nu
FsFactor2=16;     % sampling rate factor 2, Fs2/nu

%----------- calculating -------------------
Fs1 = FsFactor1*nu;            % Sampling rate 1
Fs2 = FsFactor2*nu;            % Sampling rate 2

t1 = ((0:(at*Fs1-1))/Fs1)';    % Time vector 1
t2 = ((0:(at*Fs2-1))/Fs2)';    % Time vector 2

tdsig1=exp(-i*2*pi*nu*t1).*exp(-t1./(T1)); % time domain signal 1
tdsig2=exp(-i*2*pi*nu*t2).*exp(-t2./(T1)); % time domain signal 2

% I realized, the signal was appearing negative, thus minus...
freq1=-linspace(-Fs1/2,Fs1/2-Fs1/(Fs1*at),Fs1*at)'; % freq. vector 1
freq2=-linspace(-Fs2/2,Fs2/2-Fs2/(Fs2*at),Fs2*at)'; % freq. vector 2

freqsig1=fftshift(fft(tdsig1));  % signal vector 1
freqsig2=fftshift(fft(tdsig2));  % signal vector 2

%----------- end ------------------

=================================================
On 2/19/14, oxy <address@hidden> wrote:
> On 2/12/14, Brian Kaczynski <address@hidden> wrote:
>> Hi Oxy,
>>
>> Since you're taking the FFT of a complex vector it will have unique terms
>> for negative vs. positive frequency.  You are correct that it makes more
>> sense to think of the FFT from -Fs/2 to +Fs/2.  It's just that the Octave
>> fft function doesn't compute the bins in that order.  Due to aliasing,
>> any
>> frequency Fs/2 + df is equivalent to (-Fs/2 + df) so it's more a matter
>> of
>> choice how you want to display the data.
>>
>> If you prefer plotting from -Fs/2 to +Fs/2 I would change these two lines
>> of your code as follows:
>>
>> freq=linspace(-Fs/2,Fs/2-Fs/(Fs*at),Fs*at)'
>> freqsig=fftshift(fft(tdsig);
>>
>> Let us know if that gives you what you want!
>>
>> -Brian
>>
>>
>> 2014-02-12 17:15 GMT+01:00 oxy <address@hidden>:
>>
>>> Hi Brian,
>>>
>>> > The frequency vector for FFT should go from DC as bin 1 to slightly
>>> > less
>>> > than Fs in the last bin (Fs - Fs/N where N is the number of FFT
>>> > points).
>>>
>>> If i understand u correctly, the frequency vector (freq) must be written
>>> as in this modified version of code below. However, according to Nyquist
>>> we
>>> cannot measure a frequency higher than Fs/2. Thus i do not see
>>> the meaning of plotting up to ~Fs.
>>>
>>> Also, if I rerun the code below changing FsFactor, I again see this
>>> dependency of the signal frequency on FsFactor.
>>> I cannot understand it. Looks like basics, yet not that obvious.
>>>
>>>   #---------- start code ------------
>>>   clear all
>>>   nu=10;                    % signal frequency
>>>   at=5;                       % acquisition time
>>>   T1=2                       % signal decay constant in time domain
>>>   FsFactor=16;             % the ratio (sampling rate)/(signal
>>> frequency), or Fs/nu
>>>
>>>   clf
>>>   Fs = FsFactor*nu;                             % Sampling rate
>>>   t = ((0:(at*Fs-1))/Fs)';                         % Time vector
>>>   % freq=linspace(-1,1,Fs*at)' * Fs/2;         % frequency vector, first
>>> version
>>>   freq=linspace(0,1,Fs*at)' * Fs- Fs/(Fs*at);  % frequency vector
>>> suggested by Brian
>>>   tdsig=exp(-i*2*pi*nu*t).*exp(-t./(T1));    % time domain signal
>>>   freqsig=fft(tdsig);                                % freq. domain
>>> signal
>>>   subplot(1,2,1)
>>>   plot(t,tdsig)
>>>   axis([ 0 0.4])       % zooming time domain to see that period=1/nu
>>>   subplot(1,2,2)
>>>   plot(freq, freqsig)
>>>   #---------- end code ------------
>>>
>>> thx guys ...
>>>
>>>
>>> > 2014-02-12 14:22 GMT+01:00 oxy <address@hidden>:
>>> >
>>> >> hey guys,
>>> >>
>>> >> the (simple) code bellow is how i ve learned to do FFT according to
>>> >> several docs online. However i observe a dependency of the signal
>>> >> frequency in the spectrum on the constant FsFactor. In other words,
>>> >> the signal frequency depends on the sampling rate. I should'nt be,
>>> >> right? So what is wrong here?
>>> >>
>>> >>   #---------- start code ------------
>>> >>   clear all
>>> >>   nu=10;                    % signal frequency
>>> >>   at=5;                       % acquisition time
>>> >>   T1=2                       % signal decay constant in time domain
>>> >>   FsFactor=8;             % the ratio (sampling rate)/(signal
>>> >> frequency), or Fs/nu
>>> >>
>>> >>   clf
>>> >>   Fs = FsFactor*nu;                             % Sampling rate
>>> >>   t = ((0:(at*Fs-1))/Fs)';                         % Time vector
>>> >>   freq=linspace(-1,1,Fs*at)' * Fs/2;         % frequency vector
>>> >>   tdsig=exp(-i*2*pi*nu*t).*exp(-t./(T1));    % time domain signal
>>> >>   freqsig=fft(tdsig);                                % freq. domain
>>> >> signal
>>> >>   subplot(1,2,1)
>>> >>   plot(t,tdsig)
>>> >>   axis([ 0 0.4])       % zooming time domain to see that period=1/nu
>>> >>   subplot(1,2,2)
>>> >>   plot(freq, freqsig)
>>> >>   #---------- end code ------------
>>> >>
>>> >> Do it yourself. Just rerun the code trying different values of
>>> >> FsFactor (eg: 2, 4, 8).
>>> >> Thx a lot for any hint!!!
>>> >>
>>> >> oxy
>>> >>
>>> >> ps: cross post
>>> >>
>>> http://www.mathworks.com/matlabcentral/answers/115700-fft-why-signal-frequency-depends-on-sampling-rate
>>> >> _______________________________________________
>>> >> Help-octave mailing list
>>> >> address@hidden
>>> >> https://mailman.cae.wisc.edu/listinfo/help-octave
>>> >>
>>> >
>>> _______________________________________________
>>> Help-octave mailing list
>>> address@hidden
>>> https://mailman.cae.wisc.edu/listinfo/help-octave
>>>
>>
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]