ÎÌÌÌ̈ˆˆ¬ªªª¬ˆˆˆ¬ÌÌ̬ÌÀ̬ÌÀ̬ÌÀÌÌÌìÌÀÀî̬ÀÌÀ¬ÀÀÀ¬ÀÀÀ¬ÀÀÎÌÌÌ̈ˆˆ¬ªªª¬ˆˆˆ¬ÌÌ̬ÌÌ̬ÌÀ̬ÌÀÌÌÌìÌÀÀî̬ÀÌ̬ÀÀÀ¬ÀÀÀ¬ÀÀ¬ÌÌ̬ªªª¬ª¬ª¬ªÊ̬ªªªŒˆˆˆÌÀÌÎÌÌÎ̬̪ªÀ쬪ÀÀÀÌîÀìîÌÌîî¬ÌÌ̬ªªª¬ª¬ª¬ªÊ̬ªªªŒˆˆˆÌÀÌÎÌÌÎ̬̪ªÀ쬪ÀÀÀÌîÀìîÌÌîî >²?ÀÌÌÀ Ì À ÌÌÀÌÌÀ À Ì À À ÌÌÌÀ ÀÌ À ÀÌÀÌÀ ÀÌ ÌÌÌÌÀÌ Ì ÀÌÌÌ À Ì À ÀÀÌ ÀÌÌÌÌÌ ÌÌÀÌ ÌÌÀÌ À ÀÌÌÌÌÀÀÌ Ì ÀÌÀÌÌÀ ÀÀ ÌÀ Ì ÌÌ À ÌÀÌÀÌÀ ÀÀ ÌÌÀ ÌÀÌ À ÀÀ ÀÀ ÀÀ ÌÀ Ì À Ì À Ì Ì ÌÌ Ì Ì ÌÌ À Ì ÀÌÀÀÀÀ ÀÀ Ì Ì À À ÌÀÌÀÌÀ ÀÌÌÀÌÀ À ÀÀ ÀÀ À Ì ÌÀ Ì À Ì Ì À Ì Ì ÀÌÌÀ ÌÌÌÀÀÀÀÌ Ì ÀÌÀÌÀ ÀÌ ÌÀÌ ÌÌÀ Ì ÀÌÌ À Ì Ì À À ÀÌÌÌ ÌÀÌ Ì ÌÌÀ ÀÌÌ À @DDàîàà@D@DD@Dîîîîàîàîàîàîîàààîîîîîàîàîàîîîàî@@D@D@îîîàîîàîîîîîîààààà@@@D@@@îîîîîîàîîîîîîàààà@@@DDDîîîàîîîîîàîîààîîîàîîààîàîîàîîÌ À ÌÀ À À À ÀÀÌ ÀÌÀÌ ÌÌÀ ÀÌ ÀÌ ÌÌ ÀÌ À ÀÀ ÀÀ À ÌÀ ÀÀÌÀ À À À À À ÀÀ À ÌÌ ÌÀ ÀÀÌÀ À À À À Ì À À À ÌÀ ÀÌÌÌ ÀÌ ÀÌ Ì ÀÌ ÀÌ0333303333033333033030330333303033 Ð33333033 Ð0303333333033 Ð330303303030333333Ð Ð3333033 33033033333Ð Ð0333333 33033 ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ03303033 033 33Ð303Ð0303303303033 33303333033333 0303303303333303033033033333303330330333333303ÀÌÌÀ À Ì ffff™™� À Ì À ÀÀÌ ÀÌÌÌÌÌ ÌÌÀÌ ÌÌÀÌ À ÀÌÌÌÌÀf`f`ff`fff`f`ff� � ™™�™ ™™™™ ÀÌ À ÀÀ ÀÀ ÀÀ ÌÀ Ì À Ì À Ì Ì ÌÌ Ì Ì ÌÌ ff``f```f``f� �™™™ � ™ � À À ÀÀ ÀÀ À Ì ÌÀ Ì À Ì Ì À Ì Ì fff`f```f`f� ���� ™ � ™� À Ì Ì À À ÀÌÌÌ ÌÀÌ Ì ÌÌÀ ÀÌÌ f`f`f`f`fff``f™™���� ™™�™ ™™ `™`f`fffffffffffff`f`f™ �™™ �™™ �™™ ™ �™ Ð ™™ Ð �™™™ Ð ™™ ™™ ™ Ð ™™ �™�™™ Ð ™™ �™™ Ð �™ �™™ Ð ™ Ð Ð�™Ð Й™ РЙ™ РЙ™ Ð Ð�™Ð Ð Ð Ð Ð Ð fÐ Ð `ffÐ ™ �™Ð `ffÐ �™™ ™™ Ð `ff�™Ð �™™ ™™ Ð f™™ Ð �™™ `f ™ ™™ Ð ™ ™™ Ð ™ ff™ ™ �™™–™Ð �™™™™ Ð Ð ff�™™`f�™™`f�™™ffÐ �™ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ�™™ `ff Ð f�™�™™ff�™™ff™ `ff ™ `ff™™ ™ `ff Ð `ff™™ ™ ff™ ffÐ`ff �™™`ff™™ `ff Ð`f`ff™™ Ð`fÐ`fÐ`ff`f�™™`ff�™ f Ðff`ff™™ ÐÐ Ð`ffff�™™f Ðfff�™Ðf Ðfff™ Ð ÐffÐÐ`ff ÐffÐÐ `f Ð`fÐf`ff f`fÐÐ`fff ÐÐ`ff`ff `ff ÐÐffff ÐÐ`fff `ff ÐÐffff�™fÐ`ff `ff fÐff`f™™ `ffÐf f `ffÐ`f™™ `ffÐ `ffЙ™ `ffÐ `ffÐ�™fÐ fЙ Ð�™™ �™Ð�™™ ™™ Ð�™™�™™™ Й ™™ ™™ Й™ �™Ð™™ Ð�™™ �™™�™™�™™y -- title: dft example -- author: cid -- desc: an example of discrete Fourier transform for the cyclic group of n elements (the usual dft) -- license: Unlicense -- version: 0.1 -- script: lua t=0 n= 20; flag_new = false function gen_data(n) -- generate random data data = {} for i=1,n do data[i] = math.random(-7,7)+math.random() end return data end function test_data_const(n) -- example data : costant function data = {} for i=1,n do data[i] = 3 end return data end function test_data_sin(n) -- example data: sine data = {} for i=1,n do data[i] = 2+4*math.sin(i) end return data end function plot_data(data,y,n,c) -- plot original data delta = math.floor(240/(n+1)) for i=1,n do line(delta*i,y,delta*i,y- data[i],13) circ(delta*i,y- data[i],2,c) end line(0,y,240,y,12) end function plot_datac(fdata,y,n,c,d) -- plot real and im. part of Fourier transform of data delta = math.floor(240/(n+1)) for i=1,n do line(delta*i,y,delta*i,y- fdata[1][i],13) line(delta*i,y,delta*i,y- fdata[2][i],13) circ(delta*i,y- fdata[1][i],2,c) circ(delta*i,y- fdata[2][i],2,d) end line(0,y,240,y,12) end function char_gen(n) -- generates the characters of the cyclic group of n elements -- i.e. exp(-2 pi * i * j / n) -- separated by real and imaginary part re = {} im = {} exp = math.exp for i = 1,n do re[i]= {} im[i]= {} for j = 1,n do re[i][j] = math.cos(-(2*(j-1)*(i-1)*math.pi)/n) im[i][j] = math.sin(-(2*(j-1)*(i-1)*math.pi)/n) end end return {re,im} end -- save characters (need to be cmputed only once) chars = char_gen(n) function dft(data,n) fre = {} fim = {} for i=1,n do fre[i] = 0 fim[i] = 0 for j=1,n do fre[i] = fre[i] + data[j]*chars[1][i][j] fim[i] = fim[i] + data[j]*chars[2][i][j] end end return {fre,fim} end function TIC() cls(0) print("Example of discrete Fourier transform" ,1,0,12) print("n = " .. n ,1,10,4) print("press 'z' for new data",120,10,14) print("Original data",1,19,12) if not flag_new then data = gen_data(n) -- data = test_data_const(n) -- data = test_data_sin(n) fdata = dft(data,n) flag_new = true end plot_data(data,40,n,3) print("Fourier transform",1,60,12) print("Real part",120,60,6) print("Im. part",190,60,9) plot_datac(fdata,110,n,6,9) if btnp(4) then flag_new=false end end