专利名称:用于确定非相干抽样数据的功率频谱的低泄露技术的制作方法
技术领域:
本发明涉及电子装置测试设备和方法,具体涉及用于从电子测试信号中抽出测试信号频率分量的幅度的技术。
众所周知,每当抽样时钟与抽样信号不“相干”时,被称为“泄漏”的误差就会显现在由DFT生成的功率频谱中。如果抽样时钟的频率是抽样信号内存在的各频率的精确整倍数,则抽样时钟是“相干的”。泄漏是对截断频率,即在抽样窗口内未完成整个循环的频率执行DFT的数学推论。随着谱线的误展宽、假波峰和假波谷(凸起部)的生成、以及功率频谱噪声最低限度的一般升高,会观察到泄漏。
已设计了多种方法来减少泄漏。一种方法是增加抽样速度。一般来说,抽样速度越高,感兴趣频率范围内的截断量就越小,泄漏误差就越小。该方法尽管有效,然而增加抽样速度来减少泄漏仅与这种增加的幅度成正比。而且该方法往往会大幅增加所用抽样设备的成本。
用于减少泄漏的另一常用技术是用开窗口函数来乘以抽样的数据序列。窗口函数具有使抽样数据序列围绕其端点递减的效果,从而消除会引起泄漏误差的不连续性。可使用不同的窗口函数,例如,Blackman,Hanning,或Hamming窗口函数,每种函数均具有其自身具体特性。窗口函数往往会减少与功率频谱中的波峰相隔一定距离的泄漏偏差,但也往往会生成较宽波峰。这样,这些窗口函数具有重新分配泄漏而不是完全消除泄漏的效果。而且,由于窗口函数实际改变执行DFT的数据,因而这些窗口函数往往会使频谱略微失真。
还有一种技术是按照与抽样信号频率相干的抽样速度对波形数据“重新抽样”。重新抽样工作是通过在按照某一速度抽样的实际点之间进行插值来实现的,以便在数学上构建一系列点,该一系列点看起来已按照某一不同速度进行抽样。尽管重新抽样对于减少泄漏会极其有效,然而它的计算工作量大,并且其精度会受到插值误差的影响。
还有一种减少泄漏的技术是改变抽样时钟速度,以使该速度与在抽样信号中发现的各频率的整倍数精确相等。该技术虽极其有效,但需要价格昂贵的硬件。当测试仪包括大量抽样时钟时,该方案尤其价格昂贵,而情况经常是这样。
自动测试设备(ATE或“测试仪”)的制造商一般通过提供价格不贵的常规测试问题解决方案来力图改善其产品。通过增加测试仪性能,同时降低测试仪成本,可获益匪浅。为此,目前强烈要求提供一种价格低廉的技术来减少由自动测试系统抽样的信号频谱中的泄漏。
为了实现上述目的以及其他目的和优点,提供了一种用于对抽样波形频率含量进行分析的技术,该技术包括对预计在抽样波形中将要求发现的N个频率的列表进行汇编。假定抽样波形与一波形模型一致,而该波形模型在数学上与N个正弦波之和对应。N个正弦波中的各方均具有未知幅度和相位,并具有一频率,该频率与频率列表中的N个频率中的一不同频率相等。该技术可求出使模型与抽样数据最佳拟合的未知幅度和/或相位。
根据一个说明性实施例,当抽样的波形频率事先未知时,也可使用上述技术。根据该变形例,可对抽样波形进行傅里叶变换计算,以生成常规(rough)功率频谱。对该常规功率频谱中的波峰进行识别,并对其频率进行编译,以形成N个频率的列表。在对N个频率列表进行编译时,可考虑其他因素,例如,向从中获得抽样数据的装置施加的已知激励,以及其他伴随情况。然后,对生成的N个频率列表实施上述技术,以确定N个正弦波中的各方的精确幅度和/或相位。
主计算机一般把由数字化仪116获得的抽样数据存储在存储器内进行分析。测试程序,或者可用于测试程序的软件例行程序可对存储的抽样数据进行操作,以分析该抽样数据内容。常规上,测试程序将引导测试仪软件对抽样的数据进行离散傅里叶变换(DFT)。然后,测试程序将对DFT的结果进行测试。
图2示出了根据本发明的用于在ATE环境中对测试信号进行抽样和分析的一般处理。在步骤210,自动测试系统110向DUT 120的输入施加激励。
在步骤212,访问N个频率列表。该N个频率表示幅度和/或相位信息期望是已知的抽样波形的频率。数字N可以是任何正整数。并不是所有的N个频率都实际需要存在于抽样波形中。实际上,该技术可用于测定任何具体频率分量的有无。优选地是,该N个频率列表事先是已知的,并存储在测试程序内。
在步骤214,对抽样波形进行计算机建模。表示抽样波形的该计算机模型由总计的N个正弦波构成,以近似于实际抽样波形。该N个正弦波中的每个均采用以下公式Aksin(ωki)+Bkcos(ωki)(公式1)式中· “Ak”和“Bk”是未知系数,· “k”是范围从1到N的指数,并表示N个频率分量中的一个,· ωk表示第k频率分量(具体地说,ωk=2πFk,式中,Fk是第k频率),以及· “i”是识别具体抽样并表示时间的指数。
尽管公式1看起来是两个正弦波之和,然而公式1在数学上等于单个正弦波,该正弦波的频率等于ωk/2π,幅度等于A2k+B2k]]>,相位等于Bk和Ak的2自变量反正切。
假定公式1表示抽样波形中的N个正弦波中的每个,则整个抽样波形可使用以下公式来建模Σk=1N(Akcosωki+Bksinωki)]]>(公式2)在步骤216,对公式2的波形模型进行计算机处理,以获得在模型和实际抽样波形之间的最佳拟合。优选实施例采用线性最小二乘方技术,以使模型与数据拟合。特别是,步骤216试图使以下最小二乘方估计量最小Σi=0M[yi-Σk=1N(Akcosωki+Bksinωki)]2]]>(公式3)式中,yi是抽样波形的第i抽样点,并且i的范围从0到M,其中,M表示抽样波形中的抽样总数。
为了最小化公式3,该技术认识到,当公式3的偏导数等于零时,即当根据Ak和Bk的各值获得公式3的偏导数时,可实现最佳拟合。由于N个频率中的每个均存在Ak和Bk的值,因而根据这些Ak和Bk的各值获得公式3的偏导数,可生成2N方程组。Σi=0Myicosωji=Σk=1N(AkΣi=0Mcosωkicosωji+BkΣi=0Msinωkicosωji)]]>(公式4)Σi=0Myisinωji=Σk=1N(AkΣi=0Mcosωkisinωji+BkΣi=0Msinωkisinωji)]]>(公式5)式中,当“j”指数的范围从1到N时,公式4和公式5均重复N次。定义以下系数可简化说明令cckj=Σi=0Mcosωkicosωji]]>(公式6)
令sckj=Σi=0Msinωkicosωji]]>(公式7)令cskj=Σi=0Mcosωkisinωji]]>(公式8)令sskj=Σi=0Msinωkisinωji]]>(公式9)这些系数可在数学上简化是通过认识到以下公式cckj=(Σi=0Mcos(ωk+ωj)i+Σi=0Mcos(ωk-ωj)i)/2]]>sckj=cskj=(Σi=0Msin(ωk+ωj)i+Σi=0Msin(ωk-ωj)i)/2]]>sskj=(Σi=0Mcos(ωk+ωj)i-Σi=0Mcos(ωk-ωj)i)/2]]>以及Σi=0Mcosαi=(cosα(N-1)-cosαN-cosα+1)/2(1-cosα)]]>和Σi=0Msinαi=(sinα(N-1)-sinαN+sinα)/2(1-cosα)]]>式中,α是ω的任何任意值。
使用在公式6~公式9中定义的系数来重写公式4和公式5,可生成以下矩阵 (公式10)通过确定矩阵X的逆矩阵,并把该逆矩阵乘以公式10左侧的矢量V,可解公式10求矢量ab中的Ak和Bk的每个值。
一旦对从1到N的k的每个值的Ak和Bk是已知的,就可通过计算A2k+B2k]]>来确定频率列表的每个第k个频率的幅度。通过计算Bk和Ak的2自变量反正切,可确定各相位的值。
通过施加约束,即2N=M+1(频率数是抽样数的一半),可减轻一些通过解公式10所施加的计算负担。通过把该约束放在合适位置,可将公式10的矢量V重写如下 (公式11)由于施加上述约束会迫使C和X-1成为同一秩(rank)的方形矩阵,因而可把公式10和公式11进行组合以形成ab=(X-1C)y (公式12)这样,可求出ab,而无须计算V。
建议使用以下方法求出ab· 首先,使用以下递归关系来快速构建Ccos(a+1)ωk=2cosωkcosaωk-cos(a-1)ωksin(a+1)ωk=2cosωksinaωk-sin(a-1)ωk· 然后,通过L-U分解,计算X-1;· 把X-1施加于C;· 通过使X-1C乘以y来计算ab。
一旦构建了X-1C,计算ab就可大致要求N2倍增累积。
优选地是,本文所述技术是作为软件库中的一种函数来实施的。该函数优选地接收输入阵列,该输入阵列存储频率列表和所述抽样数据指针。该函数优选地返回包含Ak和Bk各值的阵列,从中可计算幅度和相位。或者,该函数直接返回幅度和相位。软件库优选地驻留在自动测试系统上,在该自动测试系统中,可访问在测试系统中运行的测试程序。
各图的水平轴表示频率,具体地说,表示频率点(Bin)0~63。为了与采用FFT的方法进行直接比较,使用N=64来操作最佳拟合技术,其中,N个频率中的每个均与FFT点(Bin)对应。垂直轴表示以db为单位的幅度。
各图均示出了从第9频率点(Bin)即即未进行相干抽样的频率点(Bin)的中心略微偏斜的单音调。特别是,ωk=2π(k-1)(1+ε),式中,对图4A中ε=10-6,对图4B为ε=10-9,对图4C为ε=10-12。这些图均表明了最佳拟合技术的强度。与其他技术相比,最佳拟合技术可保持极窄波峰,而在波峰周围没有升高区域(“裙部”)。
优点所揭示技术与常规DFT比起来有许多优点,特别是在自动测试设备方面。使用所述技术,可利用价格较低廉的测试仪电子装置进行高精度频谱分析。抽样时钟无需与待测定频率相干,并可大大消除频谱泄漏。与把频率分类为宽度有限的各点(Bin)的常规DFT相比,所揭示技术不采用频率点(Bin),而采用离散频率。这样,所揭示技术可按照使用常规DFT无法实现的方式来分辨间隔极密的频率。
该技术还具有可升级的,因为其计算时间随着N的函数,即待分析频率数而变化。这样,如果仅分析少量频率,则可较快实施该技术。此外,由于该技术采用最佳拟合算法,因而可使用该技术来确定在抽样窗口内未充分完成一个循环的频率分量的幅度和相位。要求事先规定频率,一般在自动测试设备中不会起到不利作用,在该自动测试设备中,由DUT生成的频率事先在很大程度上是已知的,并且测试仪生成用于驱动DUT的激励。
尽管X-1C需要大量时间来计算,然而每当分析波形时,无需对其重新计算。只要频率列表和抽样数M保持恒定,就可通过检索X-1C的存储拷贝并将其乘以y,对新获得的抽样数据进行分析。提供的库可包括针对不同频率和抽样数的各种不同X-1C组合。用户可从这些组合中进行选择,以便对波形进行快速分析。
替代例在对一个实施例作了说明之后,可进行各种替代实施例或变化。
例如,如上所述,在自动测试设备方面可使用抽样波形分析技术。然而,该技术可更普遍地适用于期望进行频率信息分析的任何抽样数据。尽管根据
图1的具体测试方案对该技术作了说明,然而该技术不限于任何具体测试方案。
本文揭示的实施例对使用线性最小二乘方来获得在波形模型(公式2)和实际抽样数据之间的最佳拟合作了规定。然而,可使用其他最佳拟合技术,例如,柯西-洛伦兹(Cauchy-Lorentz)分布,以及试图使模型和抽样数据之差的绝对值最小的技术。因此,本发明不限于使用最小二乘方。
此外,本说明还提供了用于处理矩阵和执行必要计算的软件。或者,可提供专用硬件电路或处理器,以便更有效地执行这些功能。
如上所述,该技术要求N个频率列表事先是已知的。然而,可通过对抽样数据进行DFT并检查结果来避免该要求。这种变形例如图3所示。在步骤310,进行DFT。在步骤312,在从DFT得出的功率频谱中识别波峰。然后,把与波峰对应的频率附加给频率列表,用于进行更准确的分析。步骤316和318如上所述进行假定抽样数据与模型一致,并且获得在抽样和模型之间的最佳拟合。该技术无需在空白中(vacuum)进行。也可将伴随情况加以考虑,例如,施加给DUT的激励频率,这些频率的谐波,以及DUT的已知特性。
上述技术假定按照匀速进行波形抽样。然而,根据替代实施例,也可按照非匀速进行波形抽样。特别是,用“ti”项(即实际抽样时间)替代上述方程和矩阵中的离散指数“i”,可实现任意非均匀抽样。对于非均匀抽样,可以不使用公式9之后的计算简化;然而,该变化对所述技术的其余部分是透明的。
这些替代例和变形例以及其他例等均由本发明人作了设想,并用于包含在本发明的范围内。因此,应理解的是,上述说明仅是作为例子,并且本发明应仅由所附权利要求的精神和范围来限制。
计算机列表以下提供了用于生成这些图表的数据的测试代码的软件列表
<pre listing-type="program-listing"> /* standard header files */ #include <stdio.h> #include <math.h> #include <sys/time.h> #include <image.h> #define N 128 /* Number of samples of original waveform */ #define M 64 /* Number of frequency bins for least-squares fit routine */ #define M2 (2*M) /* Total number of bins(real,and imaginary) */ #define R 32 /* Number of samples to expand by in resampling routine*/ #define F 1024 /* Number of samples infilter in resampling routine*/ double raw_capture[N];/* The original samplas*//* These are used in the resampling routine only */double extended_capture[2*N],/* basically raw_capture[],but with extra samples */ expanded_capture[R*N],/* this is (hopefully) equivalent to raw_capture[] */ /* but with R times as many samples*/ filter, /* uses a cos^2 filter 1024 points */ resampled_capture[N]; /* this is (hopefully) raw_capture[] but sampled at */ /* the correct rate*/double Mx[M2][M2], /* This corresponds to matrix M */ Mi[M2][M2], /* inverse of matrix M*/ MiC[M2][M2], /* This is the product of M^-1C */ x[M2],xmags[M],xargs[M], /* uncorrected dft-mags and phases (arguments)*/ xw[M2],xwmags[M],xwargs[M],/* uncorrected dft with hamming window*/ xs[M2],xsmags[M],xsargs[M],/* resampled dft */ xp[M2],xpmags[M],xpargs[M];/* least squares dft *//* Computes sum(cos w*i)i=0 to n */double sumcos(w,n)double w;{return w ? 0.5*(cos(w*(n-1))-cos(w*n)-cos(w)+1)/(1-cos(w)n;}/* Computes sum(sin w*i) i=0 to n */double sumsin(w,n)double w;{return w ? 0.5*(sin(w*(n-1))-sin(w*n)+sin(w))/(1-cos(w))0;}/* Makes 1024 point cos^2 filter-used for resampling algorithm *//* This is not used by least squares */make_filter(){int i; for(i=0;i<1024;i++)<dp n="d12"/> filter[i]=(1-cos(2+M_PI*i/1024))/2; } /* 1d interpolation routine-used for resampling algorithm.*/ /* Basically Laqrange’s interpolation */ /* This is not used by least squares */ /* tries to return y[a] given y
...y[n-1] as input */ double interpolate_1d(a,y,n) double a,y[]; int n; {int k,j,xl,xr; double product,sum=0; xl=ftoi(a-2.0); xr=ftoi(a+2.0); xl=xl>=0?xl0; xr=xl<=n?xrn; for(k=xl;k<=xr;k++) {product=y[k]; for(j=xl;j<=xr;j++) if(j!=k) product*=(a-j)/(k-j); sum+=product; } return sum;}main(){int i,j,k,m; struct timeval tp0,tp1,tp2,tp3; /* Used for timing */ double f0=1.0+0.001e-9; /* Frequency error of 0.001ppb */ gettimeofday(&amp;tp0,NULL); for(i=0;i<N;i++) raw_capture[i]=cos(2*M_PI* 9*f0*i/N); gettimeofday(&amp;tp1,NULL); printf(″Time to construct raw capture%6uus\n″,diff(tp1,tp0)); gettimeofday(&amp;tp0,NULL); for(m=0;m<M;m++) {x[2*m]=x[2*m+1]=0; for(i=0;i<N;i++) {x[2*m]+=raw_capture[i]*cos(2*M_PI*m*i/N); x[2*m+1]+=raw_capture[i]*sin(2*M_PI*m*i/N); }} gettimeofday(&amp;tp1,NULL); printf(″Time to construct %i-point uncorrected dft%6uus\n″,M,diff(tp1,tp0)); for(i=0;i<M;i++) {xmags[i]=hypot(x[2*i+1],x[2*i+0])/M; xargs[i]=180/M_PI*atan2.(x[2*i+1],x[2*i+0]); }/* This section is not least squares fit,but is a crude resampling algorithm */#ifdef R gettimeofday(&amp;tp0,NULL); for(i=0;i<2*N;i++) extended_capture[i]=cos(2*M_PI* 9*f0*(i-N/2)/N); gettimeofday(&amp;tp1,NULL); printf(″Time to construct raw capture(with N/2 padding)%6uus\n″,diff(tp1,tp0)); gettimeofday(&amp;tp0,NULL); make_filter();<dp n="d13"/> gettimeofday(&amp;tp1,NULL); printf(″Time to construct cos^2 filter%6uus\n″,diff(tp1,tp0)); gettimeofday(&amp;tp0,NULL); for(i=0;i<N*R;i++) {int e0=N/2-F/R/2+(i+R-1)/R; expanded_capture[i]=0; for(j=0;j<F/R;j++) {int fi=(N*R-i)%R+j*R; int ej=e0+j; expanded_capture[i]+=filter[fi]*extended_capture[ej]; }} gettimeofday(&amp;tp1,NULL); printf(″Time to expand padded capture%6uus\n″,diff(tp1,tp0)); gettimeofday(&amp;tp1,NULL); for(i=0;i<N;i++) resampled_capture[i]=interpolate_ld(i*R/f0,expanded_capture,N*R); gettimeofday(&amp;tp1,NULL); printf(″Time to resample from expanded capture%6uus\n″,diff(tp1,tp0)); gettimeofday(&amp;tp0,NULL); for(m=0;m<M;m++) {xs[2*m]=xs[2*m+1]=0; for(i=0;i<N;i++) {xs[2*m]+=resampled_capture[i]*cos(2*M_PI*m*i/N); xs[2*m+1]+=resampled_capture[i]*sin(2*M_PI*m*i/N); }} gettimeofday(&amp;tp1,NULL); printf(″Time to construct %i-point resampled dft%6uus\n″,M,diff(tp1,tp0)); for(i=0;i<M;i++) {xsmags[i]=hypot(xs[2*i+1],xs[2*i+0])/M; xsargs[i]=180/M_PI*atan2(xs[2*i+1],xs[2*i+0]); }#endif/* This section is not least squares fit,but instead uses a hanning window */ gettimeofday(&amp;tp0,NULL); for(m=0;m<M;m++) {xw[2*m]=xw[2*m+1]=0; for(i=0;i<N;i++) {xw[2*m]+=raw_capture[i]*cos(2*M_PI*m*i/N)*(1-(1+cos(2*M_PI*i/N))/2); xw[2*m+1]+=raw_capture[i]*sin(2*M_PI*m*i/N)*(1-(1+cos(2*M_PI*i/N))/2); }} gettimeofday(&amp;tp1,NULL); printf(″Time to construct %i-point windowed dft%6uus\n″,M,diff(tp1,tp0)); for(i=0;i<M;i++) {xwmags[i]=hypot(xw[2*i+1],xw[2*i+0])/M; xwargs[i]=180/M_PI*atan2(xw[2*i+1],xw[2*i+0]); } /* The least-squares section */ gettimeofday(&amp;tp0,NULL); for(i=0;i<M;i++) for(j=0;j<M;j++) {Mx[2*i][2*j]=0.5*(sumcos(2*M_PI*(i+j)*f0/N,N)+sumcos(2*M_PI*(i-j)*f0/N,N)); Mx[2*i][2*j+1]=0.5*(sumsin(2*M_PI*(i+j)*f0/N,N)-sumsin(2*M_PI*(i-j)*f0/N,N)); Mx[2*i+1][2*j]=0.5*(sumsin(2*M_PI*(i+j)*f0/N,N)+sumsin(2*M_PI*(i-j)*f0/N,N)); Mx[2*i+1][2*j+1]=0.5*(-sumcos(2*M_PI*(i+j)*f0/N,N)+sumcos(2*M_PI*(i-j)*f0/N,N)); }Mx[1][1]=Mx
;/* fix that nasty problem with sin */gettimeofday(&amp;tp1,NULL);printf(″Time to construct matrix%6uus/n″,diff(tp1,tp0));<dp n="d14"/> gettimeofday(&amp;tp0,NULL); invert2M( ); gettimeofday(&amp;tp1,NULL); printf(″Time to invert matrix%6uus\n″,diff(tp1,tp0)); gettimeofday(&amp;tp0,NULL); for(i=0;i<M2;i++) for(j=0;j<M2;j++) {MiC[i][j]=0.0; for(k=0;k<M;k++) MiC[i][j]+=Mi[i][2*k]*cos(2*M_PI*k*f0*j/N)+ Mi[i][2*k+1]*sin(2*M_PI*k*f0*j/N); } gettimeofday(&amp;tp1,NULL); printf(″Time to construct composite matrix%6uus\n″,diff(tp1,tp0)); gettimeofday(&amp;tp0,NULL); for(i=0;i<M2;i++) {xp[i]=0; for(j=0;j<M2;j++) xp[i]+=MiC[i][j]*raw_capture[j]; } gettimeofday(&amp;tp1,NULL); printf(″Time to multiply composite matrix on result%6uus\n″,diff(tp1,tp0)); for(i=0;i<M;i++) {xpmags[i]=hypot(xp[2*i+1],xp[2*i+0]); xpargs[i]=180/M_PI*atan2(xp[2*i+1],xp[2*i+0]);}}/* These matrix inversion routines should be replaced by L-U decomposition *//* These unfortunately use a crude Gauss-Jordon algorithm with no pivoting */initMi( ){int i,j; for(i=0;i<M2;i++) for(j=0;j<M2;j++) Mi[i][j]=i==j;}invert2M( ){int i,j; initMi( ); for(i=0;i<M2;i++) {divrow(i,Mx[i][i]); for(j=i+1;j<M2;j++) if(Mx[j][i]) {divrow(j,Mx[j][i]); decrow(j,i); } } for(i=M2-1;i;i--) for(j=i-1;j>=0;j--) submultdrow(j,Mx[j][i],i);}divrow(i,denom)int i;float denom;{int k; for(k=0;k<M2;k++) {Mx[i][k]/=denom; Mi[i][k]/=denom;}}<dp n="d15"/>decrow(i,j)int i,j;{int k; for(k=0;k<M2;k++) [Mx[i][k]-=Mx[j][k]; Mi[i][k]-=Mi[j][k];}}submultdrow(i,factor,j)int i,j;float factor;{int k; for(k=0;k<M2;k++) {Mx[i][k]-=factor*Mx[j][k]; Mi[i][k]-=factor*Mi[j][k];}}/* returns the difference in microseconds between two timeval structures. */diff(tp1,tp0)struct timeval tp0,tp1;{return(tp1.tv_sec-tp0,tv_sec)*1000000+tp1.tv_usec-tp0,tv_usec;}/* this makes an ascii file which can be cut and pasted into spreadsheet */write out data_for_msexcel(filename)char *filename;{int i; FILE *fp; fp=fopen(filename,″w″); if(fp) {for(i=0;i<M;i++) fprintf(fp,″%4.3f\t%4.3f\t%4.3f\t%4.3f%c\n″, 20*log10(xmags[i]), 20*log10(xwmags[i]), 20*log10(xsmags[i]), 20*log10(xpmags[i]), 13); fclose(fp);}else{fprintf(stderr,″Could not open output file.\n″); perror(filename);}}</pre>
权利要求
1.一种用于对抽样信号频率分量进行分析的方法,该方法包括以下步骤(A)生成想要在抽样信号内进行分析的N个不同频率分量的列表,N>1,其中,N个频率分量中的每个频率是已知的,并且幅度和相位是未知的;(B)对抽样信号进行建模,作为与N个正弦波之和对应的波形模型,N个正弦波中的每个也具有未知幅度和相位,并具有一频率,该频率与多个N个频率分量中的一个频率相等;以及(C)对波形模型进行处理,以使波形模型与抽样信号最佳拟合。
2.根据权利要求1所述的方法,其中,对波形模型进行计算机处理的步骤C采用最小二乘方算法,用于使波形模型与抽样信号拟合。
3.根据权利要求2所述的方法,其中,N个正弦波中的每个均可采用公式Aksinωki+Bkcosωki来表示,式中,“Ak”和“Bk”是未知系数,“k”是范围从1到N的指数,并表示N个频率分量中的一个,ωk对应于第k频率分量,以及“i”是识别具体抽样并表示时间的指数。
4.根据权利要求3所述的方法,其中,对波形模型进行处理的步骤C使估计量最小,该估计量可表示为Σi=0M[yi-Σk=1N(Akcosωki+Bksinωki)]2]]>式中,“M”表示构成抽样波形的抽样数,以及“yi”表示在抽样波形情况下的第i点。
5.根据权利要求1所述的方法,该方法进一步包括求出N个频率分量的未知幅度和相位中的至少一个。
6.根据权利要求5所述的方法,其中,N个频率分量的各第k频率分量的幅度可表示为A2k+B2k]]>
7.根据权利要求5所述的方法,其中,N个频率分量的各第k频率分量的相位可表示为Bk和Ak的2自变量反正切。
8.一种在自动测试系统中对在测设备进行测试的方法,该方法包括以下步骤(A)把激励信号施加给在测设备;(B)从在测设备中进行响应信号抽样;(C)生成想要在抽样响应信号内进行分析的N不同频率分量的列表,N>1,其中,N个频率分量中的各方的频率是已知的,并且幅度和相位是未知的;(D)对抽样信号进行计算机建模,作为与N个正弦波之和对应的波形模型,N个正弦波中的每个也具有未知幅度和相位,并具有一频率,该频率与多个N频率分量中的一个不同频率相等;(E)对波形模型进行计算机处理,以使波形模型与抽样信号最佳拟合;以及(F)求出N频率分量的未知幅度和相位中的至少一方。
9.根据权利要求8所述的方法,其中,该设备是作为其制造工艺的一部分而测试的,用于确保其在装运前的质量。
10.根据权利要求8所述的方法,其中,生成N个不同频率分量的列表的步骤C包括向施加给在测设备的激励信号的频率提供N个频率分量列表。
11.根据权利要求10所述的方法,该方法进一步包括向施加给在测设备的激励信号的频率的谐波提供N频率分量列表。
12.根据权利要求8所述的方法,其中,生成N个不同频率分量列表的步骤C包括对抽样的响应信号进行离散傅里叶变换(DFT);识别DFT中的波峰;以及把与DFT中的波峰基本相等的频率附加给N个频率分量列表。
13.在自动测试系统中,一种用于对测试信号频率含量进行分析的设备,该设备包括数字化仪,用于从在测设备中进行测试信号抽样;存储器,用于存储想要在抽样信号内进行分析的N个不同频率分量的列表,N>1,其中,N个频率分量中的每个频率是已知的,并且幅度和相位是未知的;计算机建模软件,用于对抽样信号进行计算机建模,作为与N个正弦波之和对应的波形模型,N个正弦波中的每个也具有未知幅度和相位,并具有一频率,该频率与多个N频率分量中的一个不同频率相等;以及计算机处理软件,用于对波形模型进行计算机处理,以使波形模型与抽样信号最佳拟合。
14.根据权利要求13所述的设备,进一步包括测试程序,该测试程序在自动测试系统上运行,并在N频率列表中规定频率。
15.根据权利要求13所述的设备,其中,计算机建模软件和计算机处理软件驻留在软件库内,该软件库由不同测试程序来访问,用于分析抽样的波形。
16.根据权利要求13所述的设备,其中,计算机处理软件采用最小二乘方算法,用于使波形模型与抽样响应信号拟合。
17.根据权利要求16所述的设备,其中,N个正弦波中的每个均可采用公式Aksinωki+Bkcosωki来表示,式中,“Ak”和“Bk”是未知系数,“k”是范围从1到N的指数,并表示N频率分量中的一个,ωk对应第k频率分量,以及“i”是表示时间的指数。
18.根据权利要求17所述的设备,其中,计算机处理软件使估计量最小,该估计量可表示为Σi=0M[yi-Σk=1N(Akcosωki+Bksinωki)]2]]>式中,“M”表示构成抽样波形的抽样数,以及“yi”表示在抽样波形情况下的第i点。
19.在自动测试系统中,一种用于对测试信号频率含量进行分析的设备,该设备包括数字化仪,用于从在测设备中进行测试信号抽样;存储装置,用于存储想要在抽样信号内进行分析的N个不同频率分量的列表,N>1,其中,N个频率分量中的每个频率是已知的,并且幅度和相位是未知的;建模装置,用于对抽样信号进行建模,作为与N个正弦波之和对应的波形模型,N个正弦波中的每个也具有未知幅度和相位,并具有一频率,该频率与多个N频率分量中的一个不同频率相等;以及处理装置,用于对波形模型进行处理,以使波形模型与抽样信号最佳拟合。
20.根据权利要求19所述的设备,其中,建模装置和处理装置驻留在软件库内,该软件库由不同测试程序来访问,用于分析抽样波形。
21.根据权利要求1所述的方法,其中,抽样信号按照非匀速进行抽样。
全文摘要
本发明提供了一种技术,用于对从自动测试系统中抽样的波形的频率分量的幅度进行确定,该技术包括对预计在抽样波形中发现的N个频率的列表进行汇编。在测试仪上运行的测试程序通常提供频率列表。该技术假定抽样波形与理想化波形模型一致,而该理想化波形模型在数学上与N个正弦波之和对应。构成该模型的N个正弦波中的每个均具有未知幅度,并具有一频率,该频率与频率列表中的N个频率中的一个相等。该技术试图在数学上通过线性最小二乘方算法使模型与实际抽样波形之差最小,从而求出N频率中的各方的未知幅度。
文档编号G01R23/16GK1464979SQ02802241
公开日2003年12月31日 申请日期2002年6月24日 优先权日2001年6月29日
发明者格雷戈里E·迪翁 申请人:泰拉丁公司