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

📄 polardb.m

📁 这是一个关于hht变换很有用的工具箱
💻 M
字号:
function hpol = polardb(theta,rho,line_style,rho_axis)

% The function POLARDB makes a plot using polar coordinates.
% First parameter is required. POLARDB can take additional parameters,
% which if not supplied take default values: rho=theta, line_style = 'auto'.
%
% Calling sequence-
% hpol = polardb(theta[,rho][,line_style][,rho_axis])
%
% POLARDB(THETA, RHO) makes a plot using polar decibel coordinates of
% the angle THETA, in radians, versus the radius 10log(RHO).
% POLARDB(THETA,RHO,S) uses the linestyle specified in string S.
% See PLOT for a description of legal linestyles.
% POLARDB(THETA,RHO,S,RHO_AXIS) uses RHO_AXIS to define the minimum.
% and maximum ring limits of RHO.
%
% See also POLAR PLOT, LOGLOG, SEMILOGX, SEMILOGY.
 
% Copyright (c) 1984-94 by The MathWorks, Inc.
% Modified 2/1/95 Patrick Marchand : To include dB capability

if nargin < 1
	error('Requires 2 3 or 4 input arguments.')
elseif nargin == 2 
	if isstr(rho)
		line_style = rho;
		rho = theta;
		[mr,nr] = size(rho);
		if mr == 1
			theta = 1:nr;
		else
			th = (1:mr)';
			theta = th(:,ones(1,nr));
		end
	else
		line_style = 'auto';
	end
elseif nargin == 1
	line_style = 'auto';
	rho = theta;
	[mr,nr] = size(rho);
	if mr == 1
		theta = 1:nr;
	else
		th = (1:mr)';
		theta = th(:,ones(1,nr));
	end
end
if nargin < 4
  rho_axis = [];
end
if isstr(theta) | isstr(rho)
	error('Input arguments must be numeric.');
end
if any(size(theta) ~= size(rho))
	error('THETA and RHO must be the same size.');
end

% get hold state
cax = newplot;
next = lower(get(cax,'NextPlot'));
hold_state = ishold;

% get x-axis text color so grid is in same color
tc = get(cax,'xcolor');

% Hold on to current Text defaults, reset them to the
% Axes' font attributes so tick marks use them.
fAngle  = get(cax, 'DefaultTextFontAngle');
fName   = get(cax, 'DefaultTextFontName');
fSize   = get(cax, 'DefaultTextFontSize');
fWeight = get(cax, 'DefaultTextFontWeight');
set(cax, 'DefaultTextFontAngle',  get(cax, 'FontAngle'), ...
	'DefaultTextFontName',   get(cax, 'FontName'), ...
	'DefaultTextFontSize',   get(cax, 'FontSize'), ...
	'DefaultTextFontWeight', get(cax, 'FontWeight') )

% only do grids if hold is off
if ~hold_state

% make a radial grid
	hold on;
	hhh=plot([ (theta(:))],[ 10*log10(abs(rho(:)))]);
	v = [get(cax,'xlim') get(cax,'ylim')];
	ticks = length(get(cax,'ytick'));
	delete(hhh);
% check radial limits and ticks
	rmin = v(3); rmax = v(4); rticks = ticks-1;
	if rticks > 5	% see if we can reduce the number
		if rem(rticks,2) == 0
			rticks = rticks/2;
		elseif rem(rticks,3) == 0
			rticks = rticks/3;
		end
	end

% define a circle
	th = 0:pi/50:2*pi;
	xunit = cos(th);
	yunit = sin(th);
% now really force points on x/y axes to lie on them exactly
    inds = [1:(length(th)-1)/4:length(th)];
    xunits(inds(2:2:4)) = zeros(2,1);
    yunits(inds(1:2:5)) = zeros(3,1);

	if length(rho_axis) ~= 0
	   rmin = min([rho_axis(1) rmin]);
	   rmax = max([rho_axis(2) rmax]);
	end

	if length(rho_axis) > 2
	   rinc =  rho_axis(3);
	else
	   rinc = (rmax-rmin)/rticks;
	end

	rvals = ((rmin:rinc:rmax));
	if ~any(rvals == rmax)
	   rmax = max(rvals)+rinc;
	   rvals = [rvals rmax];
	end

	for i= rvals
		plot(xunit*(i-rmin),yunit*(i-rmin),'-','color',tc,'linewidth',1);
		text(0,round((i-rmin+rinc/20) ) ,...
		['  ' num2str(round(i*1e4)/1e4)],'verticalalignment','bottom' );
	end
% plot spokes
	th = (1:6)*2*pi/12;
	cst = cos(th); snt = sin(th);
	cs = [-cst; cst];
	sn = [-snt; snt];
	plot((rmax-rmin)*cs,(rmax-rmin)*sn,'-','color',tc,'linewidth',1);
% annotate spokes in degrees
	rt = 1.1*(rmax-rmin);
	for i = 1:max(size(th))
		text(rt*cst(i),rt*snt(i),int2str(i*30),'horizontalalignment','center' );
		if i == max(size(th))
			loc = int2str(0);
		else
			loc = int2str(180+i*30);
		end
		text(-rt*cst(i),-rt*snt(i),loc,'horizontalalignment','center' );
	end

% set viewto 2-D
	view(0,90);
% set axis limits
	axis((rmax-rmin)*[-1 1 -1.1 1.1]);
end

% Reset defaults.
set(cax, 'DefaultTextFontAngle', fAngle , ...
	'DefaultTextFontName',   fName , ...
	'DefaultTextFontSize',   fSize, ...
	'DefaultTextFontWeight', fWeight );

% transform data to Cartesian coordinates.
xx = (( -rmin)+10*log10(rho)).*cos(theta);
yy = (( -rmin)+10*log10(rho)).*sin(theta);

% plot data on top of grid
if strcmp(line_style,'auto')
	q = plot(xx,yy);
else
	q = plot(xx,yy,line_style);
end
if nargout > 0
	hpol = q;
end
if ~hold_state
	axis('equal');axis('off');
end

% reset hold state
if ~hold_state, set(cax,'NextPlot',next); end

⌨️ 快捷键说明

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