Sponsored Content
Operating Systems OS X (Apple) FFT for Python 2.0.x to 3.7.0. Post 303021904 by wisecracker on Monday 20th of August 2018 09:54:44 AM
Old 08-20-2018
FFT for Python 2.0.x to 3.7.0.

Hi guys...
This is code that was originally designed to work on an upgraded AMIGA A1200 using Python 2.0.x.
Unfortunately it broke inside much later versions, NOT because of the print statement/function but other minor subtleties. So this is the final result tested on various machines including the desired one.
The print(FFT) function also acts correctly, (even in Python 1.4.0 believe it or not), so there is no need to alter it for any Python version from 2.0.x to the current 3.7.0; just delete it as it is only there for this DEMO...
More information inside the code and as can be seen tested on various platforms and machines.
Code:
#
# SIMPLE_FFT.py
# For Python Version(s) 2.0.x to 3.7.0...
# 20 August 2018, CC0, Public Domain Licence.
#
# TESTED ON:
#
# Python 2.0 (#1, Oct 29 2000, 23:53:20)  (SAS/C 6.x] on amiga
#
# Python 2.7.10 (default, Oct  6 2017, 22:29:07)
# [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
#
# Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25)
# [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
#
# Python 3.7.0 (v7.7.0:1bf9cc5093, Jun 27 2018,04:59:51) [MSC v.1914 64 bit
# (AMD64)] on win32
#
# Python 2.7.15rc1 (default, Apr 15 2018, 21:51:34)
# [GCC 7.3.0] on linux2

# This is a builtin, no external libraries required.
import cmath

def fft(DATA):
	N=len(DATA)
	if N<=1: return DATA
	EVEN=fft([DATA[K] for K in range(0,N,2)])
	ODD=fft([DATA[K] for K in range(1,N,2)])
	L=[EVEN[K]+cmath.exp(-2j*cmath.pi*K/N)*ODD[K] for K in range(int(N/2))]
	R=[EVEN[K]-cmath.exp(-2j*cmath.pi*K/N)*ODD[K] for K in range(int(N/2))]
	return L+R

# NOTE: Although not necessary, for best results, DATA sizes be in powers of 2.
# http://www.bitweenie.com/listings/fft-zero-padding/
# Single cycle square wave, 8 samples.
FFT_LIST=[1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0]

FFT=fft(FFT_LIST)
print(FFT)

# Correct results, within limits of floating point accuracy, should read:
# -----------------------------------------------------------------------
#
# [(4+0j), (1-2.414213562373095j), 0j, (1-0.4142135623730949j), 0j,
# (0.9999999999999999+0.4142135623730949j), 0j,
# (0.9999999999999997+2.414213562373095j)]

 

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

what is python?

I heard that its a new programming language but ill like to get a deeper explaination of it. (1 Reply)
Discussion started by: kprescod4158
1 Replies

2. Programming

Python: bash-shell-like less functionality in the python shell

Hello, Is there some type of functional way to read things in the Python shell interpreter similar to less or more in the bash (and other) command line shells? Example: >>> import subprocess >>> help(subprocess) ... ... I'm hoping so as I hate scrolling and love how less works with... (0 Replies)
Discussion started by: Narnie
0 Replies

3. Ubuntu

Python 3.1 vs 2.6?

i just found python 3.1 in the Ubuntu Software Center today... yes i know, i've probably been under a rock... but my question is, would installing 3.1 cause any conflicts with the 2.6 installation in terms of retro compatibility with python based apps? i don't know if 3.1 is supposed to replace... (0 Replies)
Discussion started by: Sterist
0 Replies

4. SuSE

"ssh suse-server 'python -V' > python-version.out" not redirecting

Okay, so I have had this problem on openSUSE, and Debian systems now and I am hoping for a little help. I think it has something to do with Python but I couldn't find a proper Python area here. I am trying to redirect the output of "ssh suse-server 'python -V'" to a file. It seems that no matter... (3 Replies)
Discussion started by: Druonysus
3 Replies

5. Shell Programming and Scripting

**python** unable to read the background color in python

I am working on requirement on spreadsheet in python scripting. I have a spreadsheet containing cell values and with background color. I am able to read the value value but unable to get the background color of that particular cell. Actually my requirement is to read the cell value along... (1 Reply)
Discussion started by: giridhar276
1 Replies

6. OS X (Apple)

FFT for the AMIGA through ksh88 shell.

I don't know if anyone is interested but I have been meddling with FFT for the AMIGA. (Sadly we AMIGAns don't have these luxuries through any scripting language. Below is a Python snippet that uses the builtin 'cmath' module to work with the lowly Python 2.0.1 for the AMIGA. It is part of a... (0 Replies)
Discussion started by: wisecracker
0 Replies

7. OS X (Apple)

Slow FFT in ksh93 and awk.

Well i set myself a challenge to have an FFT function using nothing but ksh93 and awk. It took some serious jiggery pokery and concentration with all the brackets and '$' characters but here is the result. It is RADIX 2 only, but hey, show me another UNIX shell script that does it. It IS SLOW but... (17 Replies)
Discussion started by: wisecracker
17 Replies

8. Windows & DOS: Issues & Discussions

How to execute python script on remote with python way..?

Hi all, I am trying to run below python code for connecting remote windows machine from unix to run an python file exist on that remote windows machine.. Below is the code I am trying: #!/usr/bin/env python import wmi c = wmi.WMI("xxxxx", user="xxxx", password="xxxxxxx")... (1 Reply)
Discussion started by: onenessboy
1 Replies

9. Programming

Create a C source and compile inside Python 1.4.0 to 3.7.0 in Python for ALL? platforms...

Hi all... As you know I like making code backwards compatible for as many platforms as possible. This Python script was in fact dedicated for the AMIGA A1200 using Pythons 1.4.0, 1.5.2, 1.6.0, 2.0.1, and 2.4.6 as that is all we have for varying levels of upgrades from a HDD and 4MB FastRam... (1 Reply)
Discussion started by: wisecracker
1 Replies
FFT(3pm)						User Contributed Perl Documentation						  FFT(3pm)

NAME
PDL::FFT - FFTs for PDL DESCRIPTION
FFTs for PDL. These work for arrays of any dimension, although ones with small prime factors are likely to be the quickest. For historical reasons, these routines work in-place and do not recognize the in-place flag. That should be fixed. SYNOPSIS
use PDL::FFT qw/:Func/; fft($real, $imag); ifft($real, $imag); realfft($real); realifft($real); fftnd($real,$imag); ifftnd($real,$imag); $kernel = kernctr($image,$smallk); fftconvolve($image,$kernel); DATA TYPES
The underlying C library upon which this module is based performs FFTs on both single precision and double precision floating point piddles. Performing FFTs on integer data types is not reliable. Consider the following FFT on piddles of type 'double': $r = pdl(0,1,0,1); $i = zeroes($r); fft($r,$i); print $r,$i; [2 0 -2 0] [0 0 0 0] But if $r and $i are unsigned short integers (ushorts): $r = pdl(ushort,0,1,0,1); $i = zeroes($r); fft($r,$i); print $r,$i; [2 0 65534 0] [0 0 0 0] This used to occur because PDL::PP converts the ushort piddles to floats or doubles, performs the FFT on them, and then converts them back to ushort, causing the overflow where the amplitude of the frequency should be -2. Therefore, if you pass in a piddle of integer datatype (byte, short, ushort, long) to any of the routines in PDL::FFT, your data will be promoted to a double-precision piddle. If you pass in a float, the single-precision FFT will be performed. FREQUENCIES
For even-sized input arrays, the frequencies are packed like normal for FFTs (where N is the size of the array and D is the physical step size between elements): 0, 1/ND, 2/ND, ..., (N/2-1)/ND, 1/2D, -(N/2-1)/ND, ..., -1/ND. which can easily be obtained (taking the Nyquist frequency to be positive) using "$kx = $real->xlinvals(-($N/2-1)/$N/$D,1/2/$D)->rotate(-($N/2 -1));" For odd-sized input arrays the Nyquist frequency is not directly acessible, and the frequencies are 0, 1/ND, 2/ND, ..., (N/2-0.5)/ND, -(N/2-0.5)/ND, ..., -1/ND. which can easily be obtained using "$kx = $real->xlinvals(-($N/2-0.5)/$N/$D,($N/2-0.5)/$N/$D)->rotate(-($N-1)/2);" ALTERNATIVE FFT PACKAGES
Various other modules - such as PDL::FFTW and PDL::Slatec - contain FFT routines. However, unlike PDL::FFT, these modules are optional, and so may not be installed. FUNCTIONS
fft() Complex FFT of the "real" and "imag" arrays [inplace]. fft($real,$imag); ifft() Complex inverse FFT of the "real" and "imag" arrays [inplace]. ifft($real,$imag); realfft() One-dimensional FFT of real function [inplace]. The real part of the transform ends up in the first half of the array and the imaginary part of the transform ends up in the second half of the array. realfft($real); realifft() Inverse of one-dimensional realfft routine [inplace]. realifft($real); fftnd() N-dimensional FFT (inplace) fftnd($real,$imag); ifftnd() N-dimensional inverse FFT ifftnd($real,$imag); fftconvolve() N-dimensional convolution with periodic boundaries (FFT method) $kernel = kernctr($image,$smallk); fftconvolve($image,$kernel); fftconvolve works inplace, and returns an error array in kernel as an accuracy check -- all the values in it should be negligible. See also PDL::ImageND::convolveND, which performs speed-optimized convolution with a variety of boundary conditions. The sizes of the image and the kernel must be the same. kernctr centres a small kernel to emulate the behaviour of the direct convolution routines. The speed cross-over between using straight convolution (PDL::Image2D::conv2d()) and these fft routines is for kernel sizes roughly 7x7. convmath Signature: ([o,nc]a(m); [o,nc]b(m)) Internal routine doing maths for convolution convmath does not process bad values. It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles. cmul Signature: (ar(); ai(); br(); bi(); [o]cr(); [o]ci()) Complex multiplication cmul does not process bad values. It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles. cdiv Signature: (ar(); ai(); br(); bi(); [o]cr(); [o]ci()) Complex division cdiv does not process bad values. It will set the bad-value flag of all output piddles if the flag is set for any of the input piddles. BUGS
Where the source is marked `FIX', could re-implement using phase-shift factors on the transforms and some real-space bookkeeping, to save some temporary space and redundant transforms. AUTHOR
This file copyright (C) 1997, 1998 R.J.R. Williams (rjrw@ast.leeds.ac.uk), Karl Glazebrook (kgb@aaoepp.aao.gov.au), Tuomas J. Lukka, (lukka@husc.harvard.edu). All rights reserved. There is no warranty. You are allowed to redistribute this software / documentation under certain conditions. For details, see the file COPYING in the PDL distribution. If this file is separated from the PDL distribution, the copyright notice should be included in the file. perl v5.14.2 2012-05-30 FFT(3pm)
All times are GMT -4. The time now is 03:25 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy