3.127 FAQ-750 如何计算两个信号之间的传播延迟时间?

Last Update: 7/22/2018

假设我们有两个时变信号:信号延迟信号,数据分别保存在工作表列(B),列(D) 中。

Signal y.png

假设我们要计算两个信号之间的传播延迟,模型可以设置如下,其中 f(t) 是原始信号,而 g(t) 是延迟信号。

g(t)=f(t-t_0)

对于所有 t, t_0 是常数.

然后,我们将使用非线性曲线拟合来计算 t_0,,可以用一下这种方法来构建用户定义的拟合函数:

图中显示的 t_0 接近0.8,因此以0.8 作为拟合的初始值。


Function Name: fitdelay
Function Type: User-Defined
Independent Variables: x
Dependent Variables: y
Parameter Names: t0
Function Form: Origin C
Function:
#include <origin.h>
//
#include <ONLSF.H>
// 
void _nlsffitdelay1(
// Fit Parameter(s):
double t0,
// Independent Variable(s):
double x,
// Dependent Variable(s):
double& y)
{
	// Beginning of editable part
	NLFitContext *pCtxt = Project.GetNLFitContext();
	Worksheet wks;
	DataRange dr;
	int c1,c2;
	dr = pCtxt->GetSourceDataRange(); //Get the source data range
	dr.GetRange(wks, c1, c2);        //Get the source data worksheet	
	
	if ( pCtxt )
	{
		static vector vX, vY;	
		static double nSize;
		
		BOOL bIsNewParamValues = pCtxt->IsNewParamValues();
		if ( bIsNewParamValues )
		{
			Dataset dsx(wks, 0);
			Dataset dsy(wks, 1);				
			vX = dsx;			
			vY = dsy;
			
			nSize = vY.GetSize();
		}		
		double x1;
		x1 = x-t0;
		ocmath_interpolate( &x1, &y, 1, vX, vY, nSize );	
	}
	// End of editable part
}


关于构建用户定义拟合函数的详细步骤,请参考 此页面


拟合曲线

在拟合函数主体中,我们会从当前工作表中直接读取响应数据。 因此,您应该从工作表中执行拟合。 打开一个新工作簿,并导入文件\ Samples \ Curve Fitting \ DelaySignal.dat

  1. 选中列 C,按 Ctrl + Y 打开 Nonlinear Fitting 对话框。
  2. 选择 Function Selection 页,选择刚刚定义的 fitdelay 函数
  3. 点击 Fit 按钮,输出结果。
拟合结果与此类似:
Signal delay results.png

Keywords:Nonlinear Curve Fit, Signal Process,非线性曲线拟合,信号处理