用於確定非相干抽樣數據的功率頻譜的低洩露技術的製作方法
2023-05-22 07:08:26 1
專利名稱:用於確定非相干抽樣數據的功率頻譜的低洩露技術的製作方法
技術領域:
本發明涉及電子裝置測試設備和方法,具體涉及用於從電子測試信號中抽出測試信號頻率分量的幅度的技術。
眾所周知,每當抽樣時鐘與抽樣信號不「相干」時,被稱為「洩漏」的誤差就會顯現在由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(Akcoski+Bksinki)]]>(公式2)在步驟216,對公式2的波形模型進行計算機處理,以獲得在模型和實際抽樣波形之間的最佳擬合。優選實施例採用線性最小二乘方技術,以使模型與數據擬合。特別是,步驟216試圖使以下最小二乘方估計量最小i=0M[yi-k=1N(Akcoski+Bksinki)]2]]>(公式3)式中,yi是抽樣波形的第i抽樣點,並且i的範圍從0到M,其中,M表示抽樣波形中的抽樣總數。
為了最小化公式3,該技術認識到,當公式3的偏導數等於零時,即當根據Ak和Bk的各值獲得公式3的偏導數時,可實現最佳擬合。由於N個頻率中的每個均存在Ak和Bk的值,因而根據這些Ak和Bk的各值獲得公式3的偏導數,可生成2N方程組。i=0Myicosji=k=1N(Aki=0Mcoskicosji+Bki=0Msinkicosji)]]>(公式4)i=0Myisinji=k=1N(Aki=0Mcoskisinji+Bki=0Msinkisinji)]]>(公式5)式中,當「j」指數的範圍從1到N時,公式4和公式5均重複N次。定義以下係數可簡化說明令cckj=i=0Mcoskicosji]]>(公式6)
令sckj=i=0Msinkicosji]]>(公式7)令cskj=i=0Mcoskisinji]]>(公式8)令sskj=i=0Msinkisinji]]>(公式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=0Mcosi=(cos(N-1)-cosN-cos+1)/2(1-cos)]]>和i=0Msini=(sin(N-1)-sinN+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之後的計算簡化;然而,該變化對所述技術的其餘部分是透明的。
這些替代例和變形例以及其他例等均由本發明人作了設想,並用於包含在本發明的範圍內。因此,應理解的是,上述說明僅是作為例子,並且本發明應僅由所附權利要求的精神和範圍來限制。
計算機列表以下提供了用於生成這些圖表的數據的測試代碼的軟體列表
/* 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/ 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/ 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/ 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/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);}}
權利要求
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(Akcoski+Bksinki)]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(Akcoski+Bksinki)]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·迪翁 申請人:泰拉丁公司