ГОСТ Р 53556.7—2013
for (i = 0: i <numHarmLine: i +*)
ha [i] = abs (H (exp (j *pi * (i*1) / (numHarmLino+1))):
c j= sqrt (-1) и
H (z) = 1/( 1 - h [Qj *pow (z.-\) - h fl) ’povv (z,-2)-... - Л[numHarmPara-1] *pow (z. - numHarmPara))
Импульсная характеристика Л //] вычисляется из LARs по следующему алгоритму.
В первом шаге LARs преобразовываются в коэффициенты отражения:
for (i = 0: i <питНагтРага: i *+)
г
[i]
=
(exp
(harmLPCPara
[i])
-1 ) /
(охр
(harmLPCPara
[ij)
+ Л).
После этого коэффициенты отражения преобразовываются в характеристику времени. Функция С
делает это преобразование по месту (вызов cx[i]= r [i] и N=numHarmPara, возвраты с х [i) =h [ij):
void Convert_k_to_h (float *x. int N)
{
int/,j.
float a. b, c:
for (i —1; / <N: i +■*■)
f
c = x(ij:
for (j = 0;j <i-j-1:j **)
{
a = x[jj:
b = x (i-j-1);
x [j] = a-c’b;
x 14-1) = b-c’a:
}
if 0 ==4-V
x [j] • = c’x Ш;
}
}
После вычисления амплитуд ha [i] они должны быть нормализованы и умножены на harmAmp\,
чтобы найти амплитуды гармонической линии, удовлетворяющие условию:
sum (hUneAmpI [i] *hLinoAmpI pj) =power ofharmonic tone
Это реализуется следующим образом:
р = 0,0
for р - 0: / <numHarmLine: i ++)
p * - ha p] *ha p]:
s = sqrt (harmPwr/ p):
for (i = 0: i <numHarmLine: i +*)
hLineArnplp]-ha p]*s:
Дополнительная информация о фазе декодируется следующим образом:
for (i = 0: / <numHarmLine: i +♦,) {
if (harmPhaseAvailр]) {
hStartPhase p] = 2*pi * (harmPhase p) +0.5 / (1 «phasebits) - pi:
hStartPhascAvailp] = 1;
}
else
hStartPhaseAvail p] = 0;
}
32