Fast Fourier transform in APL
Forum rules
This forum is for discussing APL-related issues. If you think that the subject is off-topic, then the Chat forum is probably a better place for your thoughts !
This forum is for discussing APL-related issues. If you think that the subject is off-topic, then the Chat forum is probably a better place for your thoughts !
5 posts
• Page 1 of 1
Fast Fourier transform in APL
I have had some success in creating music from scratch just using Dyalog APL. So far, I have manage to reproduce (to some extent) the sound of Organ pipes, Piano and a Guitar string.
I wish to add some more (and improve the quality of my existing) instruments.
Currently I create an instrument sound of a note by adding to the fundamental frequency, multiple harmonics of that frequency with various amplitudes (and than apply a sound envelope to the whole).
However I have failed to find the amplitudes and frequency data for many instruments of sufficient quality on the internet to meet my needs.
My understanding is that I "should" be able to via Fast Fourier Transforms, analysis a sound file to get the harmonics and amplitudes information I need.
My idea is to produce (via a Midi interface) the sounds of different instruments playing a single note of know frequency to use as my sound source.
At this point, it all falls apart, as I have no idea how to write (or use) an FFT in APL!
Can anyone offer any help with FFT in APL?
Thanks
Ray
I wish to add some more (and improve the quality of my existing) instruments.
Currently I create an instrument sound of a note by adding to the fundamental frequency, multiple harmonics of that frequency with various amplitudes (and than apply a sound envelope to the whole).
However I have failed to find the amplitudes and frequency data for many instruments of sufficient quality on the internet to meet my needs.
My understanding is that I "should" be able to via Fast Fourier Transforms, analysis a sound file to get the harmonics and amplitudes information I need.
My idea is to produce (via a Midi interface) the sounds of different instruments playing a single note of know frequency to use as my sound source.
At this point, it all falls apart, as I have no idea how to write (or use) an FFT in APL!
Can anyone offer any help with FFT in APL?
Thanks
Ray
Ray Cannon
Please excuse any smelling pisstakes.
Please excuse any smelling pisstakes.
-
ray - Posts: 238
- Joined: Wed Feb 24, 2010 12:24 am
- Location: Blackwater, Camberley. UK
Re: Fast Fourier transform in APL
Hello Ray, I am not an expert in Fourier Transform but here is what I have done:
The https://aplcart.info/ has one liner but you may get a WS full if you have too much data, so I have made a function with iteration.
Good luck.
∇ X←DFT x;k;n;N
⍝ Discrete Fourier Transform
⍝ https://en.wikipedia.org/wiki/Discrete_ ... _transform
⍝ DFT←{⍵+.×⍨*○0J¯2×n÷⍨∘.×⍨¯1+⍳n←≢⍵} APLCart WS Full if too big
⍝ For x←1 2J¯1 0J¯1 ¯1J2 then X = 2 ¯2J¯2 0J¯2 4J4
⍝ Angular frequency of the points of the DFT = n×(2×PI)÷(N×∆t)
N←≢x ⍝ Size of vector to transform
X←⍳0 ⍝ Placeholder for the result
n←¯1+⍳N ⍝ index generator
:For k :In n
X,←+/x×(*○0J¯2×k×n÷N)
:EndFor
∇
∇ x←IDFT X;k;n;N
⍝ Inverse Discrete Fourier Transform
⍝ https://en.wikipedia.org/wiki/Discrete_ ... _transform
⍝ IDFT←{n÷⍨⍵+.×⍨*○0J2×n÷⍨∘.×⍨¯1+⍳n←≢⍵} APLCart WS Full if too big
⍝ For X = 2 ¯2J¯2 0J¯2 4J4 then x←1 2J¯1 0J¯1 ¯1J2
N←≢X ⍝ Size of vector to transform
x←⍳0 ⍝ Placeholder for the result
n←¯1+⍳N ⍝ index generator
:For k :In n
x,←(÷N)×+/X×(*○0J2×k×n÷N)
:EndFor
∇
⍝ For complex number:
Re←{9○⍵} ⍝ Real part
Im←{11○⍵} ⍝ Imaginary part
Mag←{|⍵} ⍝ Magnitude
Phi←{12○⍵} ⍝ Phase
The https://aplcart.info/ has one liner but you may get a WS full if you have too much data, so I have made a function with iteration.
Good luck.
-
PGilbert - Posts: 440
- Joined: Sun Dec 13, 2009 8:46 pm
- Location: Montréal, Québec, Canada
Re: Fast Fourier transform in APL
Thank you so much for this.
I will let you know how I get on with it.
Ray
I will let you know how I get on with it.
Ray
Ray Cannon
Please excuse any smelling pisstakes.
Please excuse any smelling pisstakes.
-
ray - Posts: 238
- Joined: Wed Feb 24, 2010 12:24 am
- Location: Blackwater, Camberley. UK
Re: Fast Fourier transform in APL
You can also use the fastest fourier transformation in the world, available through a library: https://github.com/dyalog/math?tab=read ... le#fourier
-
Adam|Dyalog - Posts: 143
- Joined: Thu Jun 25, 2015 1:13 pm
Re: Fast Fourier transform in APL
Being able to write a definitional Fourier transform , not fast , in one line of APL was quite instrumental in the course of my life , http://www.cosy.com/views/sycofiz.htm . ( The one line transform in the paper on that page struck Christopher Zeeman as excessively cryptic when I tried to explain it token by token . Failed to impress him with the revolution APL was at the time . I think he had a bit of a point with the
I was motivated to read Cooley&Tukey's paper at that time and wanted to express the algorithm as operations across an array of the dimensions of the prime factors of the total data length . That lines up all the redundancies in calculation so they can be simply reduced across .
I thought I noticed some additional redundancies which were not exploited by the algorithm , but had , to say the least , other priorities and never got a round toit .
That http://www.fftw.org/ site looks very interesting & impossible to beat . I'd be particularly interested in how they optimize the algorithm on prime sizes . The fact that it handles multiple dimensions is also compelling .
- Code: Select all
1 2 ∘.○
I was motivated to read Cooley&Tukey's paper at that time and wanted to express the algorithm as operations across an array of the dimensions of the prime factors of the total data length . That lines up all the redundancies in calculation so they can be simply reduced across .
I thought I noticed some additional redundancies which were not exploited by the algorithm , but had , to say the least , other priorities and never got a round toit .
That http://www.fftw.org/ site looks very interesting & impossible to beat . I'd be particularly interested in how they optimize the algorithm on prime sizes . The fact that it handles multiple dimensions is also compelling .
-
Bob Armstrong - Posts: 27
- Joined: Wed Dec 23, 2009 8:41 pm
- Location: 39.038681° -105.079070° 2500m
5 posts
• Page 1 of 1
Who is online
Users browsing this forum: No registered users and 1 guest
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group