⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fftgui.m

📁 有趣的可视的数值方法 出自网站http://www.mathworks.com/moler
💻 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 + -