39 lines
		
	
	
		
			707 B
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			39 lines
		
	
	
		
			707 B
		
	
	
	
		
			Factor
		
	
	
| 
								 | 
							
								! Copyright (c) 2007 Hans Schmid.
							 | 
						||
| 
								 | 
							
								! See http://factorcode.org/license.txt for BSD license.
							 | 
						||
| 
								 | 
							
								USING: columns grouping kernel math math.constants math.functions math.vectors
							 | 
						||
| 
								 | 
							
								    sequences ;
							 | 
						||
| 
								 | 
							
								IN: math.transforms.fft
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								! Fast Fourier Transform
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<PRIVATE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: n^v ( n v -- w ) [ ^ ] with map ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: omega ( n -- n' )
							 | 
						||
| 
								 | 
							
								    recip -2 pi i* * * exp ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: twiddle ( seq -- seq )
							 | 
						||
| 
								 | 
							
								    dup length [ omega ] [ n^v ] bi v* ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								PRIVATE>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								DEFER: fft
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: two ( seq -- seq )
							 | 
						||
| 
								 | 
							
								    fft 2 v/n dup append ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								<PRIVATE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: even ( seq -- seq ) 2 group 0 <column> ;
							 | 
						||
| 
								 | 
							
								: odd ( seq -- seq ) 2 group 1 <column> ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: (fft) ( seq -- seq )
							 | 
						||
| 
								 | 
							
								    [ odd two twiddle ] [ even two ] bi v+ ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								PRIVATE>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: fft ( seq -- seq )
							 | 
						||
| 
								 | 
							
								    dup length 1 = [ (fft) ] unless ;
							 | 
						||
| 
								 | 
							
								
							 |