Fast Fourier Transform

This code will capture, process and show you the FFT of the signal on AIN0.CH0.

In [1]:
import Box0
import Gadfly

##### PART 1 - Capture

# Allocate resources
dev = Box0.Usb.open_supported()
ain0 = Box0.ain(dev)

# Prepare AIN0 for snapshot mode
Box0.snapshot_prepare(ain0)

# Read data from AIN0
bitsize, sampling_freq = Box0.bitsize_speed_get(ain0)
data = Array(Float32, 1000)
Box0.snapshot_start(ain0, data)

# Free the resources
Box0.close(ain0)
Box0.close(dev)

##### PART 2 - Process

# perform FFT on captured data
fft_amp = abs(fft(data))
fft_freq =  linspace(0, sampling_freq, length(fft_amp))

##### PART 3 - Visualize

# Show the time domain results (unable to show both plot at once - fix later!...never ;)
#time_x = linspace(0, length(data) / sampling_freq, length(data))
#Gadfly.plot(x=time_x, y=data, Gadfly.Geom.line)

# Show the frequency domain results
Gadfly.plot(x=fft_freq, y=fft_amp, Gadfly.Geom.line)
Out[1]:
x -7.0×10⁵ -6.0×10⁵ -5.0×10⁵ -4.0×10⁵ -3.0×10⁵ -2.0×10⁵ -1.0×10⁵ 0 1.0×10⁵ 2.0×10⁵ 3.0×10⁵ 4.0×10⁵ 5.0×10⁵ 6.0×10⁵ 7.0×10⁵ 8.0×10⁵ 9.0×10⁵ 1.0×10⁶ 1.1×10⁶ 1.2×10⁶ 1.3×10⁶ -6.00×10⁵ -5.80×10⁵ -5.60×10⁵ -5.40×10⁵ -5.20×10⁵ -5.00×10⁵ -4.80×10⁵ -4.60×10⁵ -4.40×10⁵ -4.20×10⁵ -4.00×10⁵ -3.80×10⁵ -3.60×10⁵ -3.40×10⁵ -3.20×10⁵ -3.00×10⁵ -2.80×10⁵ -2.60×10⁵ -2.40×10⁵ -2.20×10⁵ -2.00×10⁵ -1.80×10⁵ -1.60×10⁵ -1.40×10⁵ -1.20×10⁵ -1.00×10⁵ -8.00×10⁴ -6.00×10⁴ -4.00×10⁴ -2.00×10⁴ 0 2.00×10⁴ 4.00×10⁴ 6.00×10⁴ 8.00×10⁴ 1.00×10⁵ 1.20×10⁵ 1.40×10⁵ 1.60×10⁵ 1.80×10⁵ 2.00×10⁵ 2.20×10⁵ 2.40×10⁵ 2.60×10⁵ 2.80×10⁵ 3.00×10⁵ 3.20×10⁵ 3.40×10⁵ 3.60×10⁵ 3.80×10⁵ 4.00×10⁵ 4.20×10⁵ 4.40×10⁵ 4.60×10⁵ 4.80×10⁵ 5.00×10⁵ 5.20×10⁵ 5.40×10⁵ 5.60×10⁵ 5.80×10⁵ 6.00×10⁵ 6.20×10⁵ 6.40×10⁵ 6.60×10⁵ 6.80×10⁵ 7.00×10⁵ 7.20×10⁵ 7.40×10⁵ 7.60×10⁵ 7.80×10⁵ 8.00×10⁵ 8.20×10⁵ 8.40×10⁵ 8.60×10⁵ 8.80×10⁵ 9.00×10⁵ 9.20×10⁵ 9.40×10⁵ 9.60×10⁵ 9.80×10⁵ 1.00×10⁶ 1.02×10⁶ 1.04×10⁶ 1.06×10⁶ 1.08×10⁶ 1.10×10⁶ 1.12×10⁶ 1.14×10⁶ 1.16×10⁶ 1.18×10⁶ 1.20×10⁶ -1×10⁶ 0 1×10⁶ 2×10⁶ -6.00×10⁵ -5.50×10⁵ -5.00×10⁵ -4.50×10⁵ -4.00×10⁵ -3.50×10⁵ -3.00×10⁵ -2.50×10⁵ -2.00×10⁵ -1.50×10⁵ -1.00×10⁵ -5.00×10⁴ 0 5.00×10⁴ 1.00×10⁵ 1.50×10⁵ 2.00×10⁵ 2.50×10⁵ 3.00×10⁵ 3.50×10⁵ 4.00×10⁵ 4.50×10⁵ 5.00×10⁵ 5.50×10⁵ 6.00×10⁵ 6.50×10⁵ 7.00×10⁵ 7.50×10⁵ 8.00×10⁵ 8.50×10⁵ 9.00×10⁵ 9.50×10⁵ 1.00×10⁶ 1.05×10⁶ 1.10×10⁶ 1.15×10⁶ 1.20×10⁶ -600 -500 -400 -300 -200 -100 0 100 200 300 400 500 600 700 800 900 1000 1100 -500 -480 -460 -440 -420 -400 -380 -360 -340 -320 -300 -280 -260 -240 -220 -200 -180 -160 -140 -120 -100 -80 -60 -40 -20 0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320 340 360 380 400 420 440 460 480 500 520 540 560 580 600 620 640 660 680 700 720 740 760 780 800 820 840 860 880 900 920 940 960 980 1000 -500 0 500 1000 -500 -450 -400 -350 -300 -250 -200 -150 -100 -50 0 50 100 150 200 250 300 350 400 450 500 550 600 650 700 750 800 850 900 950 1000 y