Joseph Park
2011-Sep-23 17:02 UTC
[R] Cross Spectrum : Conversion of 2-D spectrum into a single complex array
Hi, I'm wondering why the spectrum() phase of quadrature couple isn't purely +/-pi. But mostly, I'm looking for a recommended way to take a 2-D spectrum and convert it into a single complex array. Kindly consider: # 10 Hz sine wave 10 seconds long sampled at 50 Hz deltaT = 1/50 t = seq(0, 10, deltaT) w = 2 * pi * 10 x = ts( sin( w * t ), deltat = deltaT ) y = ts( sin( w * t ), deltat = deltaT ) # Want the cross spectrum between x and y Sxy = spectrum( cbind( x, y ), plot = F ) # The phase is perfectly zero plot( Sxy $ freq, Sxy $ phase[ ,1], type = 'l' ) # Make y a quadrature component of x y = ts( cos( w * t ), deltat = deltaT ) Sxy = spectrum( cbind( x, y ), plot = F ) # The phase should be either +pi or -pi # since exp(i pi) = exp(-i pi) = -1 + 0i # Why isn't it? Sampling issues? Nyquist has been satisfied. plot( Sxy $ freq, Sxy $ phase[ ,1], type = 'l' ) # The real question (limited to a 2-D input): # How to combine the amplitude/phase into a single # complex valued cross spectrum? mySxy = complex( real = Sxy $ spec[,1] * Sxy$ spec[,2], imaginary = Sxy $ phase[ ,1] ) # This does give something affine to a plot of Sxy # Compare plot( Sxy, log="dB" ) # to: plot( Sxy$freq, 10*log10( Re(mySxy) ), type='l')
Joseph Park
2011-Sep-24 16:43 UTC
[R] Cross Spectrum : Conversion of 2-D spectrum into a single complex array
Perhaps this question is inappropriate or posted to the wrong list? Any guidance would be appreciated. Thanks. --- On Fri, 9/23/11, Joseph Park <jpark.us at att.net> wrote:> From: Joseph Park <jpark.us at att.net> > Subject: Cross Spectrum : Conversion of 2-D spectrum into a single complex array > To: r-help at r-project.org > Date: Friday, September 23, 2011, 5:02 PM > Hi, I'm wondering why the spectrum() > phase of quadrature > couple isn't purely +/-pi. > > But mostly, I'm looking for a recommended way to take a > 2-D > spectrum and convert it into a single complex array. > > Kindly consider: > > # 10 Hz sine wave 10 seconds long sampled at 50 Hz > deltaT = 1/50 > t? ? ? = seq(0, 10, deltaT) > w? ? ? = 2 * pi * 10 > > x = ts( sin( w * t ), deltat = deltaT ) > y = ts( sin( w * t ), deltat = deltaT ) > > # Want the cross spectrum between x and y > Sxy = spectrum( cbind( x, y ), plot = F ) > > # The phase is perfectly zero > plot( Sxy $ freq, Sxy $ phase[ ,1], type = 'l' ) > > # Make y a quadrature component of x > y = ts( cos( w * t ), deltat = deltaT ) > Sxy = spectrum( cbind( x, y ), plot = F ) > > # The phase should be either +pi or -pi > # since exp(i pi) = exp(-i pi) = -1 + 0i > # Why isn't it?? Sampling issues?? Nyquist has > been satisfied. > plot( Sxy $ freq, Sxy $ phase[ ,1], type = 'l' ) > > # The real question (limited to a 2-D input): > # How to combine the amplitude/phase into a single > # complex valued cross spectrum? > mySxy = complex( real? ???= Sxy $ > spec[,1] * Sxy$ spec[,2], > ? ? ? ? ? ? ? ? > imaginary = Sxy $ phase[ ,1] ) > > # This does give something affine to a plot of Sxy > # Compare > plot( Sxy, log="dB" ) > # to: > plot( Sxy$freq, 10*log10( Re(mySxy) ), type='l') > >