📄 fftgui.m
字号:
function fftgui(y)%FFTGUI Demonstration of Finite Fourier Transform.% FFTGUI(y) plots real(y), imag(y), real(fft(y)) and imag(fft(y)).% FFTGUI, without any arguments, uses y = zeros(1,32).% When any point is moved with the mouse, the other plots respond.%% Inspired by Java applet by Dave Hale, Stanford Exploration Project,% http://sepwww.stanford.edu/oldsep/hale/FftLab.htmlif nargin == 0 % Default initial y is all zeros. y = zeros(1,32);endif ~isempty(y) if isequal(y,'reset') % Restore original data y = get(0,'userdata'); set(gcf,'userdata',y); set(findobj('tag','fftguirc'),'string','close', ... 'callback','close(gcf)') else % Save input data. y = y(:)'; set(0,'userdata',y); % Initialize figure. clf reset set(gcf, ... 'doublebuffer','on', ... 'name','FFT gui', ... 'menu','none', ... 'numbertitle','off', ... 'userdata',y, ... 'units','normalized', ... 'pos',[.05 .25 .90 .65], ... 'doublebuffer','on', ... 'windowbuttondownfcn', ... 'fftgui([]); set(gcf,''windowbuttonmotionfcn'',''fftgui([])'')', ... 'windowbuttonupfcn', ... 'set(gcf,''windowbuttonmotionfcn'','''')') uicontrol('tag','fftguirc','string','close','callback','close(gcf)'); end % Initialize four subplots n = length(y); x = 1:n; z = fft(y); subplot(221) u = real(y); plot([0 n+1],[0 0],'k-', [x;x],[0*u;u],'c-', x,u,'b.','markersize',16) axis([0 n+1 -1 1]) set(gca,'xtick',[]) set(gca,'ytick',[]) title('real(y)','fontname','courier','fontweight','bold') subplot(222) u = imag(y); plot([0 n+1],[0 0],'k-', [x;x],[0*u;u],'c-', x,u,'b.','markersize',16) axis([0 n+1 -1 1]) set(gca,'xtick',[]) set(gca,'ytick',[]) title('imag(y)','fontname','courier','fontweight','bold') subplot(223) u = real(z); plot([0 n+1],[0 0],'k-', [x;x],[0*u;u],'c-', x,u,'b.','markersize',16) axis([0 n+1 -2 2]) set(gca,'xtick',[]) set(gca,'ytick',[]) title('real(fft(y))','fontname','courier','fontweight','bold') subplot(224) u = imag(z); plot([0 n+1],[0 0],'k-', [x;x],[0*u;u],'c-', x,u,'b.','markersize',16) axis([0 n+1 -2 2]) set(gca,'xtick',[]) set(gca,'ytick',[]) title('imag(fft(y))','fontname','courier','fontweight','bold') else % Respond to mouse motion. y = get(gcf,'userdata'); n = length(y); pt = get(gcf,'currentpoint'); pos = get(gca,'pos'); p = round((n+1)*(pt(1)-pos(1))/pos(3)); q = 2*(pt(2)-pos(2))/pos(4)-1; kase = 1 + (pt(1)>.5) + 2*(pt(2)<.5); if (p > 0) & (p < n+1) & (abs(q) <= 1) switch kase case 1 y(p) = q+i*imag(y(p)); z = fft(y); case 2 y(p) = real(y(p))+i*q; z = fft(y); case 3 z = fft(y); z(p) = 2*q+i*imag(z(p)); y = ifft(z); case 4 z = fft(y); z(p) = real(z(p))+i*2*q; y = ifft(z); end set(gcf,'userdata',y) axs = get(gcf,'children'); for k = 1:4 h(:,k) = get(axs(k),'children'); end set(h(1,4),'ydata',real(y)) set(h(1,3),'ydata',imag(y)) set(h(1,2),'ydata',real(z)) set(h(1,1),'ydata',imag(z)) for k = 1:n set(h(n+2-k,4),'ydata',[0 real(y(k))]) set(h(n+2-k,3),'ydata',[0 imag(y(k))]) set(h(n+2-k,2),'ydata',[0 real(z(k))]) set(h(n+2-k,1),'ydata',[0 imag(z(k))]) end set(findobj('tag','fftguirc'),'string','reset', ... 'callback','fftgui(''reset'')') endend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -