Sponsored Content
Full Discussion: Slow FFT in ksh93 and awk.
Operating Systems OS X (Apple) Slow FFT in ksh93 and awk. Post 303023472 by Corona688 on Monday 17th of September 2018 06:14:05 PM
Old 09-17-2018
Absolutely. I don't post code for people to not use it.

It's a kind of naive implementation though. Usually better to read values from stdin, but knowing how audioscope works I knew you'd need batches. That'd obscure how it really works a bit though. Maybe better as this, people can populate the arrays as they please.

It's not truly an FFT either, just a DFT -- which gives the same result but takes much more time to do so. Notice how it must do N*N loops for N input. FFT accomplishes the same with N log N loops.

Still, I hope it has its uses. And I'm grateful for you writing one in shell. That's the first DFT I've seen written in a language I really understand.

Last edited by Corona688; 09-17-2018 at 07:26 PM..
These 2 Users Gave Thanks to Corona688 For This Post:
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

echo is too slow. HELP with Awk

Hello All, Below is a simple script i worte to find the 208th char in a file. If the char = "C" then I re-direct the line to a file called change.txt. If it is not "C" then I re-direct it to a file called delete.txt. My problem is I have a file 0f 500K lines. this script is very slow. I am... (4 Replies)
Discussion started by: eja
4 Replies

2. Shell Programming and Scripting

ksh93 deprecation...

Any means of running ksh93 in a ksh88-mode? Might sound odd, but I want/need to restrict U/Win-developed scripts to correspond to the ksh88 version on my Solaris environment(s). Thanks. (2 Replies)
Discussion started by: curleb
2 Replies

3. Shell Programming and Scripting

ksh88 or ksh93

Hi all! Does anybody know how can I check if any UNIX installation has implemented ksh88 or ksh93? Thanks in advance. Néstor. (3 Replies)
Discussion started by: Nestor
3 Replies

4. Shell Programming and Scripting

The builtin split function in AWK is too slow

I have a text file that contains 4 million lines, each line contains 2 fields(colon as field separator). as shown: 123:444,555,666,777,888,345 233:5444,555,666,777,888,345 623:454,585,664,773,888,345 ...... Here I have to split the second field(can be up to 40,000 fields) by comma into an... (14 Replies)
Discussion started by: kevintse
14 Replies

5. Shell Programming and Scripting

cut, sed, awk too slow to retrieve line - other options?

Hi, I have a script that, basically, has two input files of this type: file1 key1=value1_1_1 key2=value1_2_1 key4=value1_4_1 ... file2 key2=value2_2_1 key2=value2_2_2 key3=value2_3_1 key4=value2_4_1 ... My files are 10k lines big each (approx). The keys are strings that don't... (7 Replies)
Discussion started by: fzd
7 Replies

6. Shell Programming and Scripting

Making a faster alternative to a slow awk command

Hi, I have a large number of input files with two columns of numbers. For example: 83 1453 99 3255 99 8482 99 7372 83 175 I only wish to retain lines where the numbers fullfil two requirements. E.g: =83 1000<=<=2000 To do this I use the following... (10 Replies)
Discussion started by: s052866
10 Replies

7. UNIX for Advanced & Expert Users

Ksh93 on Linux compatible with ksh93 on AIX

Hi Experts, I have several shell scripts that have been developed on a Linux box for korn ksh93. If we want to run this software on an AIX 6.1 box that runs ksh88 by default can we just change the she-bang line to reference /bin/ksh93 which ships with AIX as its "enhanced shell" to ensure... (6 Replies)
Discussion started by: Keith Turley
6 Replies

8. 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

9. AIX

Ksh93/AIX compatibility

Hi everyone ! Im trying to know from wich version of AIX KSH93 is available ? Internet tell me 6.x and 7.x AIX are available, bue what about 5.x ? Is KSH93 available on AIX 5.x ? Is it the same way to manipulate variables as KSH93 on 7.x ? Thanks for your support and have a nice day ! (2 Replies)
Discussion started by: majinfrede
2 Replies

10. OS X (Apple)

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... (0 Replies)
Discussion started by: wisecracker
0 Replies
FFT(3)							User Contributed Perl Documentation						    FFT(3)

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.12.1 2010-07-05 FFT(3)
All times are GMT -4. The time now is 08:03 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy