Add test for LPC Synthesis

This commit is contained in:
Sean DuBois 2022-09-07 15:58:41 -04:00
parent e06e1cdfef
commit 496497d1f7
2 changed files with 110 additions and 1 deletions

View file

@ -1061,8 +1061,8 @@ func (d *Decoder) limitLPCFilterPredictionGain(a32Q17 []int32) (aQ12 []float64)
// https://datatracker.ietf.org/doc/html/rfc6716#section-4.2.7.5.8
for n := range a32Q17 {
aQ12[n] = float64((a32Q17[n] + 16) >> 5)
}
return
}

View file

@ -183,3 +183,112 @@ func TestLimitLPCFilterPredictionGain(t *testing.T) {
t.Fatal()
}
}
func TestLPCSynthesis(t *testing.T) {
d := &Decoder{}
bandwidth := BandwidthWideband
dLPC := 16
aQ12 := []float64{
405, 305, 131, 114, -118, -138, -72, -146, -108, -120,
-140, -50, -61, -97, -67, -91,
}
res := []float64{
7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06,
-7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06,
7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06,
7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
-7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06,
-7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
-7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06,
7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06,
7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06,
7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
-7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
-7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06,
7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
-7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06,
-7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06,
7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06,
7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06,
7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06,
7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
-7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06,
7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06,
-7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06,
7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06,
7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06,
7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06,
-7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
-7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06,
7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06,
7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06,
-7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06,
7.152557373046875e-06, -7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, -7.152557373046875e-06,
-7.152557373046875e-06, -7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06, 7.152557373046875e-06,
}
gainQ16 := []float64{
210944, 112640, 96256, 96256,
}
expectedOut := []float64{
2.302229404449463e-05, 2.529866833356209e-05, 2.7238055850808962e-05, -1.7708957379176547e-05,
2.4749380560290345e-05, -2.0981798454772844e-05, 2.1477830715765397e-05, -2.4204054632453483e-05,
2.0573308751838655e-05, 2.1253221788382786e-05, -2.1795743617147622e-05, -2.5572395890179134e-05,
1.8106643964895232e-05, 2.1679570267935762e-05, -2.3421448312108795e-05, -2.5406199017389676e-05,
-2.6599602275986916e-05, 1.7052067576811296e-05, 2.0067949408694348e-05, -2.1078623688906863e-05,
2.271243480683997e-05, 2.72150166867741e-05, -1.7916321594691292e-05, -2.270884152381766e-05,
-2.4033412923016192e-05, 2.0436563417128885e-05, -2.427532508544255e-05, 2.099238635148557e-05,
2.3130783534808538e-05, 2.749115150529425e-05, 2.9121850985151823e-05, -1.6076042144548942e-05,
-2.0142893098101348e-05, -2.5156895229144312e-05, 1.8372226407770105e-05, -2.6231528245909858e-05,
-2.7873633118355813e-05, -2.827462776329132e-05, -2.8362645350449658e-05, 1.5891388432233637e-05,
-2.5135526747850188e-05, -2.4985248615337324e-05, 2.064507848100911e-05, 2.5244048336741552e-05,
2.739063247080468e-05, -1.59980955341928e-05, 2.986235454333743e-05, -1.5701907849066896e-05,
-1.9655022837758317e-05, -2.3930568720535936e-05, -2.5864346366616522e-05, 1.8898232022390776e-05,
2.181083873255081e-05, 2.5461110645823852e-05, -1.8590886796307292e-05, -2.050522154748354e-05,
-2.3710687868596256e-05, -2.7372444700744424e-05, -2.944923186846253e-05, -2.950886965229287e-05,
1.686553027485115e-05, 2.2160990035467353e-05, 2.6091190985943028e-05, 3.0279020155065333e-05,
3.3413790911176856e-05, -1.2277945607991174e-05, -1.797789733287015e-05, -2.3009254117084007e-05,
-2.6130379141626882e-05, -2.9129650057967384e-05, -2.9311587554258764e-05, 1.6120577972288713e-05,
-2.5391204288454823e-05, 2.0852605782226922e-05, 2.4056945286107526e-05, 2.8484019080176072e-05,
-1.714856704971997e-05, 2.653301837863552e-05, 2.7821685893519827e-05, 2.860888470653348e-05,
}
out := make([]float64, 80)
d.lpcSynthesis(out, bandwidth, dLPC, aQ12, res, gainQ16)
if !reflect.DeepEqual(out, expectedOut) {
t.Fatal()
}
}