Discrete Fourier Transform Explanation

371 days ago by schilly

%auto var('x') @interact def signal(f1 = slider(-5,5,0.01,.5), f2 = slider(-5,5,0.01,-3), f3 = slider(-5,5,0.01,1),\ d1 = slider(-pi,pi,0.01,0.6), d2 = slider(-pi,pi,0.01,-1.9), d3 = slider(-pi,pi,0.01,0.1)): expr = sin(f1*x+d1) * sin(f2*x+d2) * sin(f3*x+d3) * (x+pi) * (x-pi) global f f = expr.function(x).simplify() print "Function:", f plot(f,(-pi,pi)).show() 
       
f1 
f2 
f3 
d1 
d2 
d3 

Click to the left again to hide and once more to show the dynamic interactive window

%auto def discrete_jitter(f, n=100): vals = [ (_, f(x=_).n()) for _ in srange(-pi,pi, (2*pi)/n, universe=RDF, include_endpoint=True) ] minmax = max((_[1] for _ in vals)) - min((_[1] for _ in vals)) vals = [ (_[0], _[1] + (random()-0.5)*minmax*0.05) for _ in vals ] return vals vals = discrete_jitter(f) plt = plot(f, (-pi,pi), color='green') show(plt +list_plot(vals)) 
       
%auto @interact def _(speed = slider(-5,5,0.1,1)): i = CC.gen(0) # just a safety vals = discrete_jitter(f) pvals = [(v[1] * cos(speed * v[0]), (v[1] * sin(speed * v[0]))) for v in vals] plt = list_plot(pvals) center = [sum(_[idx] for _ in pvals)/len(pvals) for idx in [0,1]] print "frequency: ", speed print "center: ", center print "abs(center):", sqrt(center[0]^2 + center[1]^2).n() pp = polar_plot(lambda x : f(x = speed*x), (-pi, pi), color='green') show(pp + point2d(center, pointsize=100, color='red') + plt) 
       
speed 

Click to the left again to hide and once more to show the dynamic interactive window