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

📄 mmtool.m

📁 对于精通掌握matlab非常有用的资料
💻 M
字号:
function mmtool(z1,z2,z3,z4,z5,z6,z7)% MMTOOL user-interactive visualization of 2-D data.%% MMTOOL(Y) plots the data in the columns of the matrix Y%           versus the data in the first column of Y.% MMTOOL(x,Y) plots the data in the columns of the matrix Y%             versus the data in the vector x.% MMTOOL(x,y1,y2,y3,y4,y5,y6) plots up to six y data vectors%                             versus the data in the vector x.%% Column oriented data analysis is assumed. That is, data% is assumed to vary down the columns of matrices and each% column is a separate variable. All vectors and matrices must% have identical maximum dimensions.% D.C. Hanselman, University of Maine, Orono, ME 04469% 2/1/95% Copyright (c) 1996 by Prentice-Hall, Inc. rc=zeros(nargin,2);for i=1:nargin	si=int2str(i);	eval(['z=z' si ';']);	rc(i,:)=size(z);	if rc(i,1)~=max(rc(i,:))		rc(i,:)=rc(i,[2 1]);eval(['z' si '=z.'';']);	endendif any(diff(rc(:,1)))	error('Some input data vectors are not the same length.')endif nargin==1	if rc(1,2)==1, error('Not enough input data.')	else, x=z1(:,1);y=z1(:,2:min(rc(1,2),6));	endelseif nargin==2, 	x=z1(:,1);y=z2(:,1:min(rc(2,2),6));else	x=z1(:,1);y=zeros(rc(2,1),nargin-1);	for i=2:nargin,eval(['y(:,i-1)=z' int2str(i) '(:,1);']);endend[ry,cy]=size(y);X=x;Y=y;cY=cy;rY=ry;M=[...'----------- MMTOOL -----------'' Y select         Label       '' Restore          Hold  OFF   '' Plot Y           Grid        '' Integral Y       Truncate Y  '' Derivative Y     Spline  Y   '' Manipulate Y     Curve fit Y '' FFT Y            Explore Y   '' Quit             ?-help      ''------------------------------'];msg='using mouse and mouse button.';paktc='Press any key to continue';m='a';ctp=1:cY;Lctp=length(ctp);close allHp=[];Ha=[];pflag=0;hflag=0;yflag=0;Num=['One  ';'Two  ';'Three';'Four ';'Five ';'Six  '];while m~='q'	if m=='$'		home,clc,disp(M)		disp(['Y columns: ' sprintf('%.0f ',ctp)])		m=input('Your Choice? > ','s');		if ~isempty(m),			MM=m(2:length(m));			Ma=lower(MM(~isspace(MM)));			m=lower(m(1));		else,m='$';		end	elseif m=='r'		if input('Restore original data as Y? (y/n) [y] > ','s')~='n' 			X=x;Y=y;rY=ry;cY=cy;,m='p';yflag=0;			hold off;M(3,25:27)='OFF';hflag=0;		else,m='$';		end	elseif m=='a'		if isempty(Ha)			ss=get(0,'ScreenSize');			Pa=get(0,'DefaultFigurePosition');			Ha=figure('Position',[5 ss(4)-40-.6*Pa(4) .6*Pa(3:4)],...						'NumberTitle','off','Name','INPUT DATA');			plot(x,y)			Cord=get(gca,'ColorOrder');			zoom on,a=axis;dx=(a(2)-a(1))/(cY+1);xp=a(1)-dx/2;yp=a(3)+(a(4)-a(3))/20;			for i=1:cy				text(xp+i*dx,yp,Num(i,:),'Color',Cord(i,:),'HorizontalAlignment','center')			end		else,figure(Ha);		end		m='$';	elseif m=='p'		if isempty(Hp)			Hp=figure('Position',[min(ss(3)-5-Pa(3),5+.6*Pa(3)) ss(4)-40-Pa(4) Pa(3:4)]);		end		figure(Hp)		set(Hp,'NumberTitle','off','Name',['Y columns: ' sprintf('%.0f ',ctp)])		Hpl=plot(X,Y(:,ctp));		for i=1:Lctp,set(Hpl(i),'Color',Cord(ctp(i),:));end		zoom on;pflag=1;m='$';	elseif m=='y'		if yflag,			disp('After Splines or FFT, the X-axis data has changed.')			disp('Therefore selecting other columns is not appropriate.')			disp('Use Restore option to restore all original data.')			disp(paktc),pause,m='$';		else			if isempty(Ma),s=input('Enter desired Y columns > ','s');else,s=Ma;end			if ~isempty(s)				s(s<'1'|s>'6')=[];				if isempty(s),s='1:6';end,c='[';				for i=1:length(s),c=[c s(i) ' '];end;c=[c ']'];				eval(['ctp=' c ';']);ctp(ctp>cY)=[];				if isempty(ctp),ctp=1:cY;end				Lctp=length(ctp);pflag=0;			end			m='p';		end	elseif m=='e'		if isempty(Ma)			c=input('Explore using X or Y? [y] > ','s');c=[c 'y'];		else,c=Ma;		end		if c(1)=='x'			disp(['Max value: ' sprintf('%.4g',max(X))])			disp(['Min value: ' sprintf('%.4g',min(X))])			xi=input('Enter desired X value > ');			if ~isempty(xi)				yi=mminterp([X Y(:,ctp)],1,xi(1));				if isempty(yi),	disp('No interpolated values found.')				else,			disp('Values found are:')								disp('    X        Y'),disp(yi)				end				disp(paktc),pause			end		else			c(c<'1'|c>'6')=[];			if isempty(c)				disp(['Y columns available: ' sprintf('%.0f ',ctp)])				c=input('Explore using which column? > ');m='$';			else, c=abs(c(1)-'0');			end			if isempty(c)|isempty(find(c==ctp)),c=ctp(1);end			disp(['Column chosen: ' sprintf('%.0f ',c)])			disp(['Max value: ' sprintf('%.4g',max(Y(:,c)))])			disp(['Min value: ' sprintf('%.4g',min(Y(:,c)))])			xi=input('Enter desired Y value > ');			if ~isempty(xi)				yi=mminterp([X Y],c+1,xi(1));				if isempty(yi),	disp('No interpolated values found.')				else,			disp('Values found are:')								disp('    X        Y'),disp(yi(:,[1 ctp+1]))				end				disp(paktc),pause			end		end		m='$';  	elseif m=='m'		m='$';		disp('Manipulations Available:'),disp(['abs   dB    invdB';'+K    *K    -mean'])		i=input('Your choice? > ','s');		if ~isempty(i)			if i(1)=='a', Y(:,ctp)=abs(Y(:,ctp));			elseif i(1)=='d', Y(:,ctp)=20*log10(abs(Y(:,ctp)));			elseif i(1)=='i', Y(:,ctp)=10.^(Y(:,ctp)/20);			elseif i(1)=='-', K=mean(Y(:,ctp));Y(:,ctp)=Y(:,ctp)-K(ones(size(X)),:);			elseif i(1)=='+'|i(1)=='='				K=input('Enter K > ');if isempty(K),K=1;end,Y(:,ctp)=K(1)+Y(:,ctp);			elseif i(1)=='*'|i(1)=='8'				K=input('Enter K > ');if isempty(K),K=1;end,Y(:,ctp)=K(1)*Y(:,ctp);			end			m='p';		end	elseif m=='c'		n=input('Desired polynomial order?  > ');		if n>0&n<min(10,rY-1)			disp('Curve fit polynomials are:')			for i=1:Lctp				cf=polyfit(X,Y(:,ctp(i)),n);				pstring=['Y' int2str(ctp(i)) '(x)=' polystr(cf,'x')];				disp(pstring),disp(' ')				Y(:,ctp(i))=polyval(cf,X);			end			m='p';hold on,M(3,25:27)='ON!';hflag=1;disp(paktc),pause		else, disp('Improperly chosen order. No action taken.')			disp(paktc),pause,m='$';		end	elseif m=='i'		Y(:,ctp)=mmintgrl(X,Y(:,ctp));		m='p';	elseif m=='d'		Y(:,ctp)=mmderiv(X,Y(:,ctp));		m='p';	elseif m=='t'		disp('Choose X-axis bounds for Truncation'),disp(msg)		zoom off,[xg,yg]=ginput(2);xg=[min(xg) max(xg)];		xg=find(x>=xg(1)&x<=xg(2));		if length(xg)>1			X=X(xg(:));Y=Y(xg,:);[rY,cY]=size(Y);m='p';			disp('All data columns have been Truncated.')		else			disp('Invalid data selected, no action taken'),m='$';		end		disp(paktc),pause	elseif m=='s'		Ef=input('Choose X-axis expansion factor (2-10) > ');m='$';		if ~isempty(Ef)			Ef=fix(min(max(Ef,2),10)*rY);Xi=linspace(X(1),X(rY),Ef).';			Z=zeros(Ef,Lctp);			for i=1:Lctp				Z(:,i)=spline(X,Y(:,ctp(i)),Xi);			end			X=Xi;Y=zeros(Ef,cY);Y(:,ctp)=Z;[rY,cY]=size(Y);m='p';yflag=1;		end	elseif m=='f'		dX=diff(X);Ts=dX(1);		if max(abs(dX-Ts))>1e-6			disp('X axis data is not linearly spaced. FFT not possible.'),m='$';		else			np=2^nextpow2(X);			c=input(['Choose frequency resolution in Hz [' num2str(1/(np*Ts)) '] > ']);			if ~isempty(c),np=min(2^fix(log(1/(c(1)*Ts))/log(2)),np);end			if input('Apply Hamming window to data? (y/n) [n] > ','s')=='y'				w=0.54-0.46*cos(2*pi*(0:rY-1)'/(np-1)); %Hamming window				Y(:,ctp)=Y(:,ctp).*w(:,ones(size(ctp)));			end			X=((0:np/2).')/(np*Ts);			Z=abs(fft(Y(:,ctp),np));rY=np/2+1;Z=Z(1:rY,:);			Y=zeros(rY,cY);Y(:,ctp)=Z;			m='p';yflag=1;			disp(['Frequency resolution used is ' num2str(1/(np*Ts))])			disp('X-axis now has units of Hz'),disp(paktc),pause		end	elseif m=='g'&pflag		figure(Hp),grid,m='$';	elseif m=='h'&pflag		figure(Hp),hold,m='$';		if ishold,	M(3,25:27)='ON!';hflag=1;		else,		M(3,25:27)='OFF';hflag=0;		end	elseif m=='l'&pflag		figure(Hp)		xl=input('Enter X-axis Label > ','s');if isempty(xl),xl=' ';end		yl=input('Enter X-axis Label > ','s');if isempty(yl),yl=' ';end		zl=input('Enter X-axis Label > ','s');if isempty(zl),zl=' ';end		xlabel(xl),ylabel(yl),title(zl)		m='$';	elseif m=='@'&pflag		tt=input('Enter text to put on plot > ','s');		if ~isempty(tt)			figure(Hp),zoom off			disp('Identify the left edge for text placement'),disp(msg),gtext(tt)			zoom on		end		m='$';	elseif m=='-'&pflag		hvf=input('Horizontal, Vertical, or Free Line? [f] > ','s');		if hvf=='v'|hvf=='h'			disp(['Choose Three points: ';'1 is point to cross, ';'2 and 3 are Endpoints'])			disp(msg),			figure(Hp),zoom off,[xg,yg]=ginput(3);			if hvf=='v',hh=line([xg(1) xg(1)],yg(2:3),'Clipping','off');			else,       hh=line(xg(2:3),[yg(1) yg(1)],'Clipping','off');			end			set(hh,'Linestyle',':','Color','w'),figure(Hp)		else			disp('Choose the ENDpoints of the line to be drawn')			disp(msg),figure(Hp),zoom off			[xg,yg]=ginput(2);hh=line(xg,yg,'Clipping','off');			set(hh,'Linestyle',':','Color','w'),figure(Hp)		end,m='$';zoom on	elseif m=='!'		eval(MM),disp(paktc),pause,m='$';	elseif m=='?'|m=='/'		if isempty(MM)			disp('For help enter: Your Choice? > ?L')			disp('where L is the letter of the command you want help on.')			disp('Hidden commands: @ ! -'),disp(paktc),pause,m='$';		else			mm=lower(MM(1));mm(isspace(mm))=[];			if isempty(mm),mm='$';m='?';MM=[];end			if mm=='a'				disp('All plot: plot all input data.')			elseif mm=='p'				disp('Plot Y: plot current selected data.')			elseif mm=='r'				disp('Restore all: restore input data as selected data.')			elseif mm=='y'				disp('Y select: select data columns for analysis.')			elseif mm=='i'				disp('Integrate: compute integral of selected columns of Y.')			elseif mm=='d'				disp('Derivative: compute derivative of selected columns of Y.')			elseif mm=='m'				disp('Manipulate: manipulate selected columns of Y.')			elseif mm=='f'				disp('FFT Y: compute FFT of selected columns in Y.')			elseif mm=='l'				disp('Label: place labels and title on the current plot.')			elseif mm=='h'				disp('Hold: hold the current plot.')			elseif mm=='g'				disp('Grid: add or remove a grid on the current plot.')			elseif mm=='t'				disp('Truncate: selects a subrange of X axis further examination.')			elseif mm=='s'				disp('Smooth: applies splines smoothing to selected columns in Y.')			elseif mm=='c'				disp('Curve fit: fits a polynomial to selected columns of Y.')			elseif mm=='e'				disp('Explore: interpolates X or Y data to find specific values.')			elseif mm=='@'				disp('@: places text on the current plot at a user-selected point.')			elseif mm=='-'				disp('-: places a line on the current plot at a user-selected location.')			elseif mm=='!'				disp('!: passes the rest of the line to MATLAB for processing.')			end			disp(paktc),pause,m='$';		end	else		disp('Command unknown or not available at this time.')		pause(2),m='$';	end   endif input('Close figure windows? (y/n) [y] > ','s')~='n',close all,end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -