[Scipy-tickets] [SciPy] #547: chirp - logarithmic cosine sweep - bad initial value and incorrect waveform

SciPy scipy-tickets@scipy....
Tue Nov 27 16:26:29 CST 2007


#547: chirp - logarithmic cosine sweep  - bad initial value and incorrect
waveform
--------------------------+-------------------------------------------------
 Reporter:  knorthover    |       Owner:  somebody
     Type:  defect        |      Status:  new     
 Priority:  normal        |   Milestone:  0.7     
Component:  scipy.signal  |     Version:          
 Severity:  major         |    Keywords:          
--------------------------+-------------------------------------------------
 In Lib/signal/waveforms.py, in chirp():

 The initial value for the cosine logarithmic sweep for t[0] = 0 is not
 1.0.
 This is easily seen by evaluating the phase_angle expression on line 180
 for t=0:

 {{{
 phase_angle = 2*pi * (f0*t + pow(10,beta*t)/(beta*log(10)))
 }}}

 pow(10, beta*t) = 1.0 when t = zero so the phase angle cannot be zero.

 I think line 180 is intended to read:

 {{{
 phase_angle = 2*pi * (f0 + pow(10,beta*t)/(beta*log(10))) * t
 }}}


 However I also think the setup of beta is incorrect.  For a logarithmic
 sweep the coefficient in the exponent of the frequency term should be
 determined by the ratio of the frequencies, not their difference.

 In the notation for chirp line 179-180 should read:


 {{{
 beta = log( f1 / f0) / t1
 phase_angle = 2*pi * (f0 * exp(beta * t)) * t
 }}}


 (or use log10 and pow, but this is simpler)

 here is a simple generator for a logarithmic sweep:


 {{{
 def log_sine(fs, fe, rate, sweeplen):
     """Generate a logarithmically swept sine wave.
        rate - sample rate in samples / second
        sweeplen - length of sweep in seconds.
     """
     t = -1
     tmax = float(rate) * sweeplen
     k = log(float(fe) / fs) / tmax
     while t < tmax:
         t = t + 1
         f = fs * exp(k * t)
         yield sin(2 * pi * f * t / rate)
 }}}


 Kevin

-- 
Ticket URL: <http://scipy.org/scipy/scipy/ticket/547>
SciPy <http://www.scipy.org/>
SciPy is open-source software for mathematics, science, and engineering.


More information about the Scipy-tickets mailing list