Interaktive FFT in Python

Python lässt sich mit einigen Plug Ins ideal als hilfreiches Tool zur Signalverarbeitung verwenden. Ein wesentlicher und wichtiger Unterschied zu Octave ist das sich schnell auch interaktive Elemente einfügen lassen.
Hier ein Beispiel zum direkten Vergleich wie sich Änderungen im Zeitbereich auf den Frequenzbereich auswirken. Auch wie es sich auswirkt Frequenzen über fs/2 reinzubekommen zeigt sich.

interaktive FFT

Der Python Code hierzu lautet wie folgt:

# -*- coding: utf-8 -*-
"""
Created on Wed Sep 26 17:42:48 2012

@author: Tobias Markus
„““
from pylab import *
from matplotlib.widgets import Slider
clf()
Offset0=1
f0=1
A0=1
A_noise0=0.1
x = np.linspace(0, np.pi, 500,endpoint=True) # set Sinus range
y = A0*np.cos(2*np.pi*f0*x)+Offset0+A_noise0*np.random.randn(500) # set default sinus
subplot(2,1,1) # 2 plots go to the upper one
t,=plot(x,y,’b+‘)# plot default sinus
subplot(2,1,2)#
subplots_adjust(left=0.1, bottom=0.35)
tn=1/1000;
z=0.001*np.abs(np.fft.fft(y))
t1,=semilogy(z[0:250]) # plot fft of the default sinus

axcolor = ‚lightgoldenrodyellow‘
axfreq = axes([0.1, 0.1, 0.65, 0.03], axisbg=axcolor)# set position of slider
axamp = axes([0.1, 0.15, 0.65, 0.03], axisbg=axcolor)
axOffset = axes([0.1,0.2,0.65,0.03],axisbg=axcolor)
axANoise = axes([0.1,0.25,0.65,0.03],axisbg=axcolor)

sfreq = Slider(axfreq, ‚Freq‘, 0.1, 200.0, valinit=f0)
samp = Slider(axamp, ‚Amp‘, 0.1, 10.0, valinit=A0)
sOffset = Slider(axOffset, ‚Off‘, 0.1, 30.0, valinit=Offset0)
sANoise = Slider(axANoise, ‚Noise‘, 0.01, 1, valinit=A_noise0)
def update(val):# define the update function
amp = samp.val
freq = sfreq.val
Off = sOffset.val
ANoi = sANoise.val
y=amp*sin(2*pi*freq*x)+Off+ANoi*np.random.randn(500)# new function
t.set_ydata(y)
t1.set_ydata((0.001*np.abs(np.fft.fft(y)))[0:250])# new fft
draw()
draw()
sfreq.on_changed(update)# update on change
samp.on_changed(update)
sOffset.on_changed(update)
sANoise.on_changed(update)
show()

 

Dieser Beitrag wurde unter DSP, Python abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.