ress8c.c

来自「seismic software,very useful」· C语言 代码 · 共 66 行

C
66
字号
/* Copyright (c) Colorado School of Mines, 1990./* All rights reserved.                       */#include "cwp.h"void ress8c (int nxin, float dxin, float fxin, complex yin[], 	complex yinl, complex yinr, 	int nxout, float dxout, float fxout, complex yout[])/*****************************************************************************Resample a uniformly-sampled complex function y(x) via 8-coefficient sincapproximations; maximum error for frequiencies less than 0.6 nyquist is less than one percent.******************************************************************************Input:nxin		number of x values at which y(x) is inputdxin		x sampling interval for input y(x)fxin		x value of first sample inputyin		array of input y(x) values:  yin[0] = y(fxin), etc.yinl		value used to extrapolate yin values to left of yin[0]yinr		value used to extrapolate yin values to right of yin[nxin-1]nxout		number of x values at which y(x) is outputdxout		x sampling interval for output y(x)fxout		x value of first sample outputOutput:yout		array of output y(x) values:  yout[0] = y(xout[0]), etc.******************************************************************************Notes:Because extrapolation of the input function y(x) is defined by theleft and right values yinl and yinr, the output x values definedby nxout, dxout, and fxout are not restricted to lie within the range of input x values defined by nxin, dxin, and fxin.******************************************************************************Author:  Dave Hale, Colorado School of Mines, 06/06/90*****************************************************************************/{	int ixin,ixout;	float odxin,tiny,xout,xini,error,*xoutt;		/* initially, assume output samples fall on input samples */	odxin = 1.0/dxin;	tiny = 0.01;	for (ixout=0,xout=fxout; ixout<nxout; ++ixout,xout+=dxout) {		xini = (xout-fxin)*odxin;		ixin = NINT(xini);		error = xini-ixin;		if (ABS(error)>tiny) break;		if (ixin<0)			yout[ixout] = yinl;		else if (ixin>=nxin)			yout[ixout] = yinr;		else			yout[ixout] = yin[ixin];	}		/* if all output samples fell on input samples, then done */	if (ixout==nxout) return;		/* otherwise, must interpolate */	xoutt = alloc1float(nxout);	for (ixout=0; ixout<nxout; ++ixout)		xoutt[ixout] = fxout+ixout*dxout;	ints8c(nxin,dxin,fxin,yin,yinl,yinr,nxout,xoutt,yout);	free1float(xoutt);}

⌨️ 快捷键说明

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