Think about a signal, lets say a sine with 5Hz frequency and a sine with 15Hz of frequency with amplitudes of 0.8 and 0.4. They look like this (black and red) and combined like the green one in following figure.
So, how about the Frequency Domain of these signals? Looks like a FFT (=Discrete Fast Fourier Transform) does the right thing for us, right?
Connection between time and frequency domain of a signal
Matlab Code of this FFT Animation
%% Animation zum Zusammenhang zwischen Signal im Zeit und Frequenzbereich % Paul Balzer % Motorblog | www.cbcity.de %% Signal generieren % dt = 0.001; t=0:dt:1; f1 = 5; s1 = 0.8*sin(2*pi*f1*t); f2 = 15; s2 = 0.4*sin(2*pi*f2*t); s=s1+s2; % figure(1) % subplot(3,1,1) % plot(t,s1,'-k') % ylabel('Signal 1') % ylim([-1 1]) % grid on % % subplot(3,1,2) % plot(t,s2,'-r') % ylabel('Signal 2') % ylim([-1 1]) % grid on % % subplot(3,1,3) % plot(t,s,'-g','linewidth',2) % xlabel('Time [s]') % ylabel('Resulting Signal') % ylim([-1 1]) % grid on %% FFT % Y = fft(s); n = numel(t); % Anzahl Werte m = floor(n/2); % Spektrumbegrenzung aus Nyquist Frequenz fspec = t.* 1/(dt*n) * 1/dt; % Frequenzvektor ampspec = 2.*abs(Y)/n; % Amplitude figure(2) set(gcf,'color',[1 1 1],'position',[10 10 770 520]) hf = stem3(zeros(1,31),fspec(1:31), ampspec(1:31),'fill'); grid on hold on hs1 = plot3(t(1:m), f1.*ones(1,m), s1(1:m),'-k'); hs2 = plot3(t(1:m), f2.*ones(1,m), s2(1:m),'-r'); hs = plot3(t(1:m), zeros(1,m), s(1:m),'-g','linewidth',5); legend('Amplitude Spectrum',['Signal 1 w/' num2str(f1) 'Hz'],... ['Signal 2 w/' num2str(f2) 'Hz'],'Resulting Signal',... 'location','east') xlabel('Time [s]','fontsize',18) xlim([0 max(t(1:m))]) ylabel('Frequency [Hz]','fontsize',18) ylim([0 max(f1,f2)*2]) zlabel('Amplitude [-]','fontsize',18) box off set(gca,'fontsize',16) %% 3D Darstellung erzeugen % view(0,0) % Frequenzspektrum axis vis3d % so skalieren, dass beim Drehen nichts mehr skaliert title('Signal in time Domain','fontsize',18) drawnow % GIF erzeugen mygif = 'Time-2-Frequency-Domain-FFT.gif'; f = getframe(gcf); [im,map]=rgb2ind(f.cdata,256,'nodither'); imwrite(im,map,mygif,'Delaytime',5,'Loopcount',inf) for i = 0:0.5:90 % Smooth View change hann=0.5*(1-cos(2*pi*i/90)); view(90*(3*(i/90)^2-2*(i/90)^3),40*sind(2*i)*hann) f = getframe(gcf); [im,map]=rgb2ind(f.cdata,256,'nodither'); imwrite(im,map,mygif,'writemode','append','Delaytime',.02) end title('Amplitude Spectrum of the Signal (FFT)','fontsize',18) set(hs,'visible','off') for i = -1:.02:0 zlim([i 1]) f = getframe(gcf); [im,map]=rgb2ind(f.cdata,256,'nodither'); imwrite(im,map,mygif,'writemode','append','Delaytime',.02) end legend('off') annotation('textbox', [.7 0.0 .1 0.1], 'String', 'CC-BY-SA2.0 Paul Balzer | Motorblog'); drawnow f = getframe(gcf); [im,map]=rgb2ind(f.cdata,256,'nodither'); imwrite(im,map,mygif,'writemode','append','Delaytime',5)