[squeak-dev] The Trunk: Sound-ul.20.mcz

commits at source.squeak.org commits at source.squeak.org
Tue Aug 3 14:25:02 UTC 2010


Levente Uzonyi uploaded a new version of Sound to project The Trunk:
http://source.squeak.org/trunk/Sound-ul.20.mcz

==================== Summary ====================

Name: Sound-ul.20
Author: ul
Time: 3 August 2010, 4:01:13.3 pm
UUID: 24415f7e-d674-f643-a087-a03906092306
Ancestors: Sound-ar.19

- FFT >> #transformForward: now uses FFTPlugin
- use #transformForward: instead of #pluginTransformData:

=============== Diff against Sound-ar.19 ===============

Item was changed:
  ----- Method: FFT>>transformForward: (in category 'transforming') -----
  transformForward: forward
  	| lev lev1 ip theta realU imagU realT imagT i |
+ 	<primitive: 'primitiveFFTTransformData' module: 'FFTPlugin'>
  	self permuteData.
  	1 to: nu do:
  		[:level |
  		lev := 1 bitShift: level.
  		lev1 := lev // 2.
  		1 to: lev1 do:
  			[:j |
  			theta := j-1 * (n // lev).   "pi * (j-1) / lev1 mapped onto 0..n/2"
  			theta < (n//4)  "Compute U, the complex multiplier for each level"
  				ifTrue:
  					[realU := sinTable at: sinTable size - theta.
  					imagU := sinTable at: theta + 1]
  				ifFalse:
  					[realU := (sinTable at: theta - (n//4) + 1) negated.
  					imagU := sinTable at: (n//2) - theta + 1].
  			forward ifFalse: [imagU := imagU negated].
  "
  			Here is the inner loop...
  			j to: n by: lev do:
  				[:i |   hand-transformed to whileTrue...
  "
  			i := j.
  			[i <= n] whileTrue:
  				[ip := i + lev1.
  				realT := ((realData at: ip) * realU) - ((imagData at: ip) * imagU).
  				imagT := ((realData at: ip) * imagU) + ((imagData at: ip) * realU).
  				realData at: ip put: (realData at: i) - realT.
  				imagData at: ip put: (imagData at: i) - imagT.
  				realData at: i put: (realData at: i) + realT.
  				imagData at: i put: (imagData at: i) + imagT.
  				i := i + lev]]].
  	forward ifFalse: [self scaleData]  "Reverse transform must scale to be an inverse"!

Item was changed:
  ----- Method: FFT>>transformDataFrom:startingAt: (in category 'bulk processing') -----
  transformDataFrom: anIndexableCollection startingAt: index
  	"Forward transform a block of real data taken from from the given indexable collection starting at the given index. Answer a block of values representing the normalized magnitudes of the frequency components."
  
  	| j real imag out |
  	j := 0.
  	index to: index + n - 1 do: [:i |
  		realData at: (j := j + 1) put: (anIndexableCollection at: i)].
  	realData *= window.
  	imagData := FloatArray new: n.
+ 	self transformForward: true.
- 	self pluginTransformData: true.
  
  	"compute the magnitudes of the complex results"
  	"note: the results are in bottom half; the upper half is just its mirror image"
  	real := realData copyFrom: 1 to: (n / 2).
  	imag := imagData copyFrom: 1 to: (n / 2).
  	out := (real * real) + (imag * imag).
  	1 to: out size do: [:i | out at: i put: (out at: i) sqrt].
  	^ out
  !




More information about the Squeak-dev mailing list