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

📄 shfs8r.c

📁 su 的源代码库
💻 C
字号:
/* Copyright (c) Colorado School of Mines, 2006.*//* All rights reserved.                       *//*********************** self documentation **********************//*****************************************************************************SHFS8R - Shift a uniformly-sampled real-valued function y(x) via	a table of 8-coefficient sinc approximations.shfs8r	shift a uniformly-sampled real function via a table of 8-coeff. sinc	approximations.******************************************************************************Function Prototypes:void shfs8r (float dx, int nxin, float fxin, float yin[], 	float yinl, float yinr, int nxout, float fxout, float yout[]);******************************************************************************Input:dx		x sampling interval for both input and output y(x)nxin		number of x values at which y(x) is inputfxin		x value of first sample inputyin		array[nxin] 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 a which y(x) is outputfxout		x value of first sample outputOutput:yout		array[nxout] of output y(x) values:  yout[0] = y(fxout), etc.******************************************************************************Notes:Because extrapolation of the input function y(x) is defined by theleft and right values yinl and yinr, the output samples defined bydx, nxout, and fxout are not restricted to lie within the range of input sample locations defined by dx, nxin, and fxin.The maximum error for frequencies less than 0.6*nyquist is lessthan one percent.******************************************************************************Author:  Dave Hale, Colorado School of Mines, 06/02/89*****************************************************************************//**************** end self doc ********************************/#include "cwp.h"#define LTABLE 8#define NTABLE 513void shfs8r (float dx, int nxin, float fxin, float yin[], 	float yinl, float yinr, int nxout, float fxout, float yout[])/*****************************************************************************Shift a uniformly-sampled real-valued function y(x) viaa table of 8-coefficient sinc approximations; maximum error forfrequencies less than 0.6*nyquist is less than one percent.******************************************************************************Input:dx		x sampling interval for both input and output y(x)nxin		number of x values at which y(x) is inputfxin		x value of first sample inputyin		array[nxin] 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 a which y(x) is outputfxout		x value of first sample outputOutput:yout		array[nxout] of output y(x) values:  yout[0] = y(fxout), etc.******************************************************************************Notes:Because extrapolation of the input function y(x) is defined by theleft and right values yinl and yinr, the output samples defined bydx, nxout, and fxout are not restricted to lie within the range of input sample locations defined by dx, nxin, and fxin.******************************************************************************Author:  Dave Hale, Colorado School of Mines, 06/02/89*****************************************************************************/{	static float table[NTABLE][LTABLE];	static int tabled=0;	int jtable,ishift,ktable,ixout,itable,jshift,ilo,ihi;	float frac,shift,dshift,tablei,youti;	/* tabulate sinc interpolation coefficients if not already tabulated */	if (!tabled) {		for (jtable=1; jtable<NTABLE-1; jtable++) {			frac = (float)jtable/(float)(NTABLE-1);			mksinc(frac,LTABLE,&table[jtable][0]);		}		for (jtable=0; jtable<LTABLE; jtable++) {			table[0][jtable] = 0.0;			table[NTABLE-1][jtable] = 0.0;		}		table[0][LTABLE/2-1] = 1.0;		table[NTABLE-1][LTABLE/2] = 1.0;		tabled = 1;	}	/* determine most appropriate set of tabulated coefficients */	shift = (fxout-fxin)/dx;	ishift = (int)shift;	if (shift<0.0) ishift--;	dshift = shift-(float)ishift;	ktable = NINT(dshift*(NTABLE-1));	/* convolve sinc approximation with input function */	for (ixout=0; ixout<nxout; ixout++)		yout[ixout] = 0.0;	for (itable=0; itable<LTABLE; itable++) {		tablei = table[ktable][itable];		jshift = ishift+itable-LTABLE/2+1;		for (ixout=0,youti=yinl*tablei; ixout<-jshift; ixout++)			yout[ixout] += youti;		ilo = MAX(0,-jshift);		ihi = MIN(nxout-1,nxin-jshift-1);		for (ixout=ilo; ixout<=ihi; ixout++)			yout[ixout] += yin[ixout+jshift]*tablei;		for (ixout=nxin-jshift,youti=yinr*tablei; ixout<nxout; ixout++)			yout[ixout] += youti;	}}

⌨️ 快捷键说明

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