9. ura (plan): FFT

forum v pomoč delavnici UR
Post Reply
alesB
Site Admin
Posts: 33
Joined: Tue Jul 12, 2022 8:43 am

9. ura (plan): FFT

Post by alesB »

FFT je diskretna hitra Fourierjeva transformacija. Uporabljali bomo ukaze, ki smo jih spoznali 8. uro, polega tega pa

Code: Select all

fft
in

Code: Select all

ifft
alesB
Site Admin
Posts: 33
Joined: Tue Jul 12, 2022 8:43 am

Re: 9. ura (plan): FFT

Post by alesB »

Code: Select all

% vsota dveh signalov istih amplitud (akord)
% vnaprej pripravljeno

function fft01a()
 f1=10;
 f2=15;
 tmax=1.0;
 fs=1000;
 tt=0:1/fs:(tmax-1/fs);
 ss=akordvol([f1,f2],[1,0.5],tmax,fs);
 plot(tt,ss,"linewidth",3);grid;
 pause(1);
 
 fftss=fft(ss);
 ff=0:1/tmax:(fs-1/tmax);
 nmax=round(tmax*fs);
 plot(ff(1:nmax),abs(fftss(1:nmax)),"linewidth",3);grid;
 pause(1);
 
 fftss=fft(ss);
 nmax=4*round(f2);
 plot(ff(1:nmax),abs(fftss(1:nmax)),"linewidth",3);grid;
 pause(1);
end
alesB
Site Admin
Posts: 33
Joined: Tue Jul 12, 2022 8:43 am

Re: 9. ura (plan): FFT

Post by alesB »

Code: Select all

% vsota dveh signalov poljubnih amplitud (akord)
% parametri na izbiro
% predlog: ft01b(10,15,1,0.8,1,fs), kjer fs od 100 od 10000
% (probaj tudi 40, kjer je hud aliasing)

function fft01b(f1,f2,v1,v2,tmax,fs)
 tt=0:1/fs:(tmax-1/fs);
 ss=akordvol([f1,f2],[v1,v2],tmax,fs);
 plot(tt,ss,"linewidth",3);grid;
 pause(2);
 
 fftss=fft(ss);
 ff=0:1/tmax:(fs-1/tmax);
 nmax=round(tmax*fs);
 plot(ff(1:nmax),abs(fftss(1:nmax)),"linewidth",3);grid;
 pause(2);
 
 nmax=2.5*max([f1,f2]);
 plot(ff(1:nmax),abs(fftss(1:nmax)),"linewidth",3);grid;
 pause(2);
end
alesB
Site Admin
Posts: 33
Joined: Tue Jul 12, 2022 8:43 am

Re: 9. ura (plan): FFT

Post by alesB »

Code: Select all

% vsota ve"c signalov poljubnih amplitud
% parametri na izbiro (glej ffto1b.m)

function fft01c(ffin,vv,tmax,fs)
 tspause=2.0;
 tt=0:1/fs:(tmax-1/fs);
 ss=akordvol(ffin,vv,tmax,fs);
 plot(tt,ss,"linewidth",3);grid;
 pause(tspause);
 
 fftss=fft(ss);
 ff=0:1/tmax:(fs-1/tmax);
 nmax=round(tmax*fs);
 plot(ff(1:nmax),abs(fftss(1:nmax)),"linewidth",3);grid;
 pause(tspause);% vsota ve"c signalov poljubnih amplitud
% parametri na izbiro (glej ffto1b.m)

function fft01c(ffin,vv,tmax,fs)
 tspause=2.0;
 tt=0:1/fs:(tmax-1/fs);
 ss=akordvol(ffin,vv,tmax,fs);
 plot(tt,ss,"linewidth",3);grid;
 pause(tspause);
 
 fftss=fft(ss);
 ff=0:1/tmax:(fs-1/tmax);
 nmax=round(tmax*fs);
 plot(ff(1:nmax),abs(fftss(1:nmax)),"linewidth",3);grid;
 pause(tspause);% vsota ve"c signalov poljubnih amplitud
% parametri na izbiro (glej ffto1b.m)

function fft01c(ffin,vv,tmax,fs)
 tspause=2.0;
 tt=0:1/fs:(tmax-1/fs);
 ss=akordvol(ffin,vv,tmax,fs);
 plot(tt,ss,"linewidth",3);grid;
 pause(tspause);
 
 fftss=fft(ss);
 ff=0:1/tmax:(fs-1/tmax);
 nmax=round(tmax*fs);
 plot(ff(1:nmax),abs(fftss(1:nmax)),"linewidth",3);grid;
 pause(tspause);
 
 nmax=floor(1.2*max(ffin));
 plot(ff(1:nmax),abs(fftss(1:nmax)),"linewidth",3);grid;
 pause(tspause);
end
 
 nmax=floor(1.2*max(ffin));
 plot(ff(1:nmax),abs(fftss(1:nmax)),"linewidth",3);grid;
 pause(tspause);
end
 
 nmax=floor(1.2*max(ffin));
 plot(ff(1:nmax),abs(fftss(1:nmax)),"linewidth",3);grid;
 pause(tspause);
end
alesB
Site Admin
Posts: 33
Joined: Tue Jul 12, 2022 8:43 am

Re: 9. ura (plan): FFT

Post by alesB »

Posebni za ton, akord in produkt:

Code: Select all

function [yy]=tonvol(f,v,ts,fs)
 tt=0:1/fs:(ts-1/fs);
 yy=v.*sin(2*pi*f*tt);
end

Code: Select all

function [aa]=akordvol(ff,vv,ts,fs)
 n=length(ff);
 bb=[];
 for i=1:n
  bb=[bb;tonvol(ff(i),vv(i),ts,fs)];
 end
 aa=mean(bb);
end

Code: Select all

function [aa]=sigprod(ff,vv,ts,fs)
 n=length(ff);
 aa=tonvol(ff(1),vv(1),ts,fs);
 for i=2:n
  bb=tonvol(ff(i),vv(i),ts,fs);
  aa=aa.*bb;
 end
end
alesB
Site Admin
Posts: 33
Joined: Tue Jul 12, 2022 8:43 am

Re: 9. ura (plan): FFT

Post by alesB »

Code: Select all

% produkt dveh signalov poljubnih amplitud (akord)
% parametri na izbiro

function fft02a(f1,f2,v1,v2,tmax,fs)
 tt=0:1/fs:(tmax-1/fs);
 ss=sigprod([f1,f2],[v1,v2],tmax,fs);
 plot(tt,ss,"linewidth",3);grid;
 pause(2);

 fftss=fft(ss);
 ff=0:1/tmax:(fs-1/tmax);
 nmax=round(tmax*fs);
 plot(ff(1:nmax),abs(fftss(1:nmax)),"linewidth",3);grid;
 pause(2);

 nmax=round(3.2*(f1+f2));
 plot(ff(1:nmax),abs(fftss(1:nmax)),"linewidth",3);grid;
 pause(2);
end
alesB
Site Admin
Posts: 33
Joined: Tue Jul 12, 2022 8:43 am

Re: 9. ura (plan): FFT

Post by alesB »

Code: Select all

% produkt ve"cih signalov poljubnih amplitud (akord)
% parametri na izbiro

function fft02b(ffin,vv,tmax,fs)
 tt=0:1/fs:(tmax-1/fs);
 ss=sigprod(ffin,vv,tmax,fs);
 plot(tt,ss,"linewidth",3);grid;
 pause(2);

 fftss=fft(ss);
 ff=0:1/tmax:(fs-1/tmax);
 nmax=round(tmax*fs);
 plot(ff(1:nmax),abs(fftss(1:nmax)),"linewidth",3);grid;
 pause(2);

 nmax=round(2.2*sum(ffin));
 plot(ff(1:nmax),abs(fftss(1:nmax)),"linewidth",3);grid;
 pause(2);
end
alesB
Site Admin
Posts: 33
Joined: Tue Jul 12, 2022 8:43 am

Re: 9. ura (plan): FFT

Post by alesB »

Code: Select all

% od signala do spektra in nazaj: FFT in IFFT

% vsota ve"c signalov poljubnih amplitud
% parametri na izbiro (glej ffto1b.m)

function fft03a(ffin,vv,tmax,fs)
 tspause=2.0;
 tt=0:1/fs:(tmax-1/fs);
 ss=akordvol(ffin,vv,tmax,fs);
 plot(tt,ss,"linewidth",3);grid;
 pause(tspause);

 fftss=fft(ss);
% length(fftss)
 ff=0:1/tmax:(fs-1/tmax);
 nmax=round(0.5*tmax*fs);
 plot(ff(1:nmax+1),abs(fftss(1:nmax+1)),"linewidth",3);grid;
 pause(tspause);

 ifftss=ifft(fftss);
 plot(tt,ifftss,"linewidth",3);grid;
 pause(tspause);
end
Post Reply