[an error occurred while processing this directive]
|
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">
//////////////////////////////////////////////////////////////////////////////
//style='mso-spacerun:yes'>àààààààààààààààààààààààààà F U N C T I O N Sstyle='mso-spacerun:yes'>ààààààààààààààààààààààààààààà //
//////////////////////////////////////////////////////////////////////////////
double class=SpellE>Goertzel_algorithm(int *class=SpellE>BufXn, int k);
double class=SpellE>Goertzel_algorithm(int *class=SpellE>BufXn, int k)
{
//
┌ ─ ─ ─
─ ─ class=SpellE>─ ─ class=SpellE>─ ─ class=SpellE>─ ─ class=SpellE>─ ─ class=SpellE>─ ─ ┬ ─ class=SpellE>─ ─ class=SpellE>─ ─ class=SpellE>─ ─ class=SpellE>─ ─ class=SpellE>─ ─ class=SpellE>─ ─ class=SpellE>─ ─ class=SpellE>─ ┐
//style='mso-spacerun:yes'>àààààààààà n=0,1,2,...,N-1style='mso-spacerun:yes'>ààààààààààààààààààà n=N
//
│àààààààààààààààààààààààààààààà class=SpellE>│style='mso-spacerun:yes'>àààààààààààààààààààààààààààààààà class=SpellE>│
//style='mso-spacerun:yes'>ààà Xstyle='mso-spacerun:yes'>ààààààààààààààààààà Qstyle='mso-spacerun:yes'>ààààààààààààà
┌───┐
//
│àà nstyle='mso-spacerun:yes'>à ┌───┐style='mso-spacerun:yes'>àààààààààààà nstyle='mso-spacerun:yes'>ààààà │style='mso-spacerun:yes'>ààààà │style='mso-spacerun:yes'>à 2│style='mso-spacerun:yes'>ààààààààààààààààà style='mso-spacerun:yes'>àààà│
//style='mso-spacerun:yes'>ààà ───>┤ +
├───────────────>─┬─style='mso-spacerun:yes'>ààààààà │ X
├──>───────────┐
//
│ààààà
└┬─┬┘style='mso-spacerun:yes'>àààààààààààààààà │style='mso-spacerun:yes'>à │style='mso-spacerun:yes'>ààààà │style='mso-spacerun:yes'>àà │style='mso-spacerun:yes'>ààààààààààààà │style='mso-spacerun:yes'>àààààà │
//style='mso-spacerun:yes'>àààààààà │ │style='mso-spacerun:yes'>ààààààààààààààààà vstyle='mso-spacerun:yes'>àààà Qàà
└─┬─┘style='mso-spacerun:yes'>ààààààààààààà │
//
│àààààà │
│ 2Cos(2*pi*k/N)
┌─┴─┐│àà
N-1à │-2Cos(2*pi*k/N)
│àààààà │
//style='mso-spacerun:yes'>àààààààà │ │style='mso-spacerun:yes'>ààààààààààààààà │
-1│à ┌────>─┤style='mso-spacerun:yes'>ààààààààààààààà │
//
│àààààà │
│ààààà class=SpellE>│àààààààà
│Zà
││ │ààààà
│ààààààà
│àààààà
vàààààà │
//style='mso-spacerun:yes'>àààààààà │ │style='mso-spacerun:yes'>ààààà vàààà
Qàà └─┬─class=GramE>┘à │style='mso-spacerun:yes'>ààààà │style='mso-spacerun:yes'>ààààààà vàààà
┌─┴─┐ Y
//
│àààààà │
│àààà
┌┴┐àààà n-class=GramE>1à │style='mso-spacerun:yes'>à │ class=SpellE>│àààà
┌┴┐ààààà class=SpellE>┌┴┐ààà
│àà │style='mso-spacerun:yes'>à kà
│
//style='mso-spacerun:yes'>àààààààà │
└─<───┤X├────────<─┼────┘style='mso-spacerun:yes'>àààà
│X├───>──┤X├──>─┤
+ ├─>─
//
│àààààà │style='mso-spacerun:yes'>àààààà └─┘style='mso-spacerun:yes'>ààààààààà │style='mso-spacerun:yes'>à │style='mso-spacerun:yes'>àààààà └┬┘style='mso-spacerun:yes'>ààààà └─┘style='mso-spacerun:yes'>ààà │àà
│àààà
│
//style='mso-spacerun:yes'>àààààààà │style='mso-spacerun:yes'>ààààààààààààààààààà vstyle='mso-spacerun:yes'>àààà Qàààà
│ààààààààààààà
└─┬─┘
//
│à style='mso-spacerun:yes'>ààààà│style='mso-spacerun:yes'>àààààà -1style='mso-spacerun:yes'>àààààààà
┌─┴─┐│style='mso-spacerun:yes'>àà N-2style='mso-spacerun:yes'>à │style='mso-spacerun:yes'>ààààààààààààààà ^style='mso-spacerun:yes'>àààààà │
//style='mso-spacerun:yes'>àààààààà │style='mso-spacerun:yes'>ààààààààààààààààà │
-1│à ┌────>─┤style='mso-spacerun:yes'>ààààààààààààààà │
//
│àààààà │style='mso-spacerun:yes'>ààààààà │style='mso-spacerun:yes'>àààààààà │Zstyle='mso-spacerun:yes'>à ││ │style='mso-spacerun:yes'>ààààà │style='mso-spacerun:yes'>ààààààààààààààà │style='mso-spacerun:yes'>àààààà │
//style='mso-spacerun:yes'>àààààààà │style='mso-spacerun:yes'>ààààààà vàààà
Qàà └─┬─class=GramE>┘à │style='mso-spacerun:yes'>ààà ┌─┴─┐style='mso-spacerun:yes'>àààààà style='mso-spacerun:yes'>ààààààà│
//
│àààààà │style='mso-spacerun:yes'>àààààà ┌┴┐style='mso-spacerun:yes'>àààà n-2style='mso-spacerun:yes'>à │style='mso-spacerun:yes'>à │ class=SpellE>│ààà class=SpellE>│à
2│ààààààààààààà │style='mso-spacerun:yes'>àààààà │
//style='mso-spacerun:yes'>àààààààà
└───<───┤X├────────<─┴────┘style='mso-spacerun:yes'>ààà │ X
├──>───────────┘
//
│àààààààààààààà
└─┘àààààààààààà
│ààààà │style='mso-spacerun:yes'>àà │style='mso-spacerun:yes'>ààààààààààààààààààààà │
//style='mso-spacerun:yes'>ààààààààààààààààààààààààààààààààààà style='mso-spacerun:yes'>àààà└───┘
//
└ ─ ─ ─
─ ─ class=SpellE>─ ─ class=SpellE>─ ─ class=SpellE>─ ─ class=SpellE>─ ─ class=SpellE>─ ─ ┴ ─ class=SpellE>─ ─ class=SpellE>─ ─ class=SpellE>─ ─ class=SpellE>─ ─ class=SpellE>─ ─ class=SpellE>─ ─ class=SpellE>─ ─ class=SpellE>─ ┘
//
// class=SpellE>Yk = ╩òðô¨ðª üþôºû lang=EN-US style='mso-ansi-language:EN-US'> k-þù ¸ÿõúª¨ðû¹ýþù ¸þ¸ªðòû ■∙õùlang=EN-US style='mso-ansi-language:EN-US'> = Mk*Mk , óôõlang=EN-US style='mso-ansi-language:EN-US'>
//
//style='mso-spacerun:yes'>ààààà --style='mso-spacerun:yes'>ààààààààààààààààààààààààààààààààààààààà 1--
// Mk =
\ UxCos(class=SpellE>Wxt)[Cos(Wkt)+class=SpellE>jSin(Wkt)] = Ux*N
* -\
//style='mso-spacerun:yes'>ààààà /style='mso-spacerun:yes'>àààààààààààààààààààààààààààààààààààààààà N/
//style='mso-spacerun:yes'>ààààà ~~style='mso-spacerun:yes'>àààààààààààààààààààààààààààààààààààààààà class=SpellE>~~
// ôû lang=EN-US style='mso-ansi-language:EN-US'> Wk==0: Mk=Ux*N,style='mso-spacerun:yes'>àà Ykclass=GramE>=(Ux*N)^2,style='mso-spacerun:yes'>àà ( N=80, Ux=1,
Mk=80, Yk=6400 )
// ôû lang=EN-US style='mso-ansi-language:EN-US'> Wk!=0: Mk=class=SpellE>Ux*N/2, Yk=(Ux*N/2)^2,
( N=80, Ux=1, Mk=40, Yk=1600
)
//
// ╧¨øüõ¨ ò√÷þò𠯺ýú¡øø
// // ò√¢ø¸û õü üþ∙ýþ¸ª¹ 11-ù ¸ÿõúª¨ðû¹ýþù ¸þ¸ªðòû ■∙õù
(¢ð¸ªþªð 1100 ├¡)
// k=11;
Ck2=Goertzel_algorithmclass=GramE>(BufFrame, k);
// // ò√¢ø¸û õü üþ∙ýþ¸ª¹ 17-ù ¸ÿõúª¨ðû¹ýþù ¸þ¸ªðòû ■∙õù
(¢ð¸ªþªð 1700 ├¡)
// k=17;
Ck2=Goertzel_algorithmclass=GramE>(BufFrame, k);
//
//ulong nFsamples=8000;style='mso-spacerun:yes'>ààà // ╫ð¸ªþªð ôø¸ú¨õªø÷ð¡øø
//intstyle='mso-spacerun:yes'>àà nGoertzelFrSz=80;style='mso-spacerun:yes'>à // ─ûøýð ðýðûø÷ø¨ºõüþóþ ¯¨ðóüõýªð
double
PI=3.1415926535897932384626434;
double coef_k;style='mso-spacerun:yes'>ààààààà // Goertzel class=SpellE>úþ¤¯-ª ôû k-þù ¸ÿõúª¨ðû¹ýþù ¸þ¸ªðòû ■∙õù
double Xn;style='mso-spacerun:yes'>ààààààààààà // ╟ýð¢õýø þª¸¢õªþò ò¿þôýþóþ
¸øóýðûð
double Qn,Qn_1,Qn_2;style='mso-spacerun:yes'>à // ▌ûõüõýª√ ÷ðôõ¨öúø ôû Goertzel-¯øû¹ª¨ð
double Yk;style='mso-spacerun:yes'>ààààààààààà // ╩òðô¨ðª üþôºû k-þù ¸ÿõúª¨ðû¹ýþù
¸þ¸ªðòû ■∙õù
double Mk;style='mso-spacerun:yes'>ààààààààààà // ╠þôºû¹ k-þù ¸ÿõúª¨ðû¹ýþù
¸þ¸ªðòû ■∙õù
ààà class=SpellE>coef_klang=EN-US style='mso-ansi-language:EN-US'>=2*class=GramE>cos((2*PI*(double)k)/(double)class=SpellE>nGoertzelFrSz);
style='mso-spacerun:yes'>ààà Qn_1=0;
style='mso-spacerun:yes'>ààà Qn_2=0;
style='mso-spacerun:yes'>ààà int
N=nGoertzelFrSz;
style='mso-spacerun:yes'>ààà int
n;
style='mso-spacerun:yes'>ààà for(n=0;n<class=SpellE>N;n++)
style='mso-spacerun:yes'>ààà {
style='mso-spacerun:yes'>ààààà Xn=class=SpellE>BufXn[n]*AON_Gain;
style='mso-spacerun:yes'>ààààà if(class=SpellE>Xn> (0x7FFF)) Xn= (0x7FFF);
style='mso-spacerun:yes'>ààààà if(class=SpellE>Xn<-(0x7FFF)) Xn=-(0x7FFF);
style='mso-spacerun:yes'>ààààà Xnclass=GramE>=(double)((int)Xn);
style='mso-spacerun:yes'>ààààà Qn=Xn+Qn_1*coef_k-Qn_2;
style='mso-spacerun:yes'>ààààà Qn_2=Qn_1;
style='mso-spacerun:yes'>ààààà Qn_1=Qn;
style='mso-spacerun:yes'>ààà }
style='mso-spacerun:yes'>ààà Ykclass=GramE>=Qn_1*Qn_1+Qn_2*Qn_2-coef_k*Qn_1*Qn_2;
/class=GramE>/à Mk=class=SpellE>sqrt(Yk);
style='mso-spacerun:yes'>ààà if(class=SpellE>LOG_flg==1) Yk=10*log10(class=SpellE>Yk);
style='mso-spacerun:yes'>ààà return(class=SpellE>Yk);
}
E-mail: info@telesys.ru