Bookmark and Share

Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.


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

st: Rescaling Fast Fourier Transform


From   Jorge Eduardo Pérez Pérez <[email protected]>
To   <[email protected]>
Subject   st: Rescaling Fast Fourier Transform
Date   Tue, 4 Jan 2011 17:34:20 -0500

Dear Statalist:

I'm trying to implement in Stata the Ideal Band Pass Filter for time
series described in

Corbae and Ouliaris (2006) "Extracting Cycles from Nonstationary
data"Econometric theory and Practice: Frontiers of Analysis and
Applied Research (Cambridge and New York: Cambridge University Press),
pp 167-177

At some point, I have to compute a Discrete Fourier Transform. I
translated a function -dft- to do this into Mata:

	complex matrix dft( transmorphic matrix x)
	{	
		real matrix yr, yi, dftr, dfti, range
		real scalar n, i, ae
		complex matrix y, df
		y=C(x)
		yr=Re(y)
		yi=Im(y)
		n=rows(x)
		dftr=J(n,1,.)
		dfti=J(n,1,.)
		range=range(1,n,1)
		for (i=0; i<=n-1; i++) {	
			ae=-2*pi()/n
			dftr[i+1]=colsum(yr:*cos((range:-1):*ae:*i)-yi:*sin((range:-1):*ae:*i))
			dfti[i+1]=colsum(yr:*sin((range:-1):*ae:*i)+yi:*cos((range:-1):*ae:*i))
		}
		df=conj(C(dftr,dfti))
		return(df)
	}

For vectors with length equal to a power of 2, this function yields
the same results as the built-in -fft- function (That uses the Fast
Fourier Transform algorithm),  up to rounding error:

mata

: x=range(1,4,1)
: dft(x)
                      1
    +--------------------+
  1 |                10  |
  2 |           -2 - 2i  |
  3 |  -2 + 9.7972e-16i  |
  4 |           -2 + 2i  |
    +--------------------+

: fft(x)
             1
    +-----------+
  1 |       10  |
  2 |  -2 - 2i  |
  3 |       -2  |
  4 |  -2 + 2i  |
    +-----------+

However, if the length of the vector is not a power of 2, I have to
use zero padding. i.e: -fft(ftpad(x))- . How do I scale the results
obtained from -fft(ftpad(x))- to be the same as the ones obtained from
-dft- ?

Thank you.

_______________________
Jorge Eduardo Pérez Pérez

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/


© Copyright 1996–2018 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   Site index