CMSIS-DSP: Correcting issue #1165

pull/19/head
Christophe Favergeon 5 years ago
parent 944079db82
commit baa16ae1a1

@ -156,7 +156,7 @@ __STATIC_INLINE void arm_bitreversal_16_inpl_mve(
bitRevOff0High = vshrq_n_u16(bitRevOff0High, 3); bitRevOff0High = vshrq_n_u16(bitRevOff0High, 3);
blkCnt = (bitRevLen / 16); blkCnt = (bitRevLen / 16);
while (blkCnt > 0U) { while (blkCnt > 0) {
bitRevTabOff = vldrhq_u16(pBitRevTab); bitRevTabOff = vldrhq_u16(pBitRevTab);
pBitRevTab += 8; pBitRevTab += 8;
@ -248,7 +248,7 @@ __STATIC_INLINE void arm_bitreversal_32_outpl_mve(void *pDst, void *pSrc, uint32
/* bit-reverse fwd indexes */ /* bit-reverse fwd indexes */
bitRevOffs0 = vbrsrq(idxOffs0, bitRevPos); bitRevOffs0 = vbrsrq(idxOffs0, bitRevPos);
bitRevOffs1 = vbrsrq(idxOffs1, bitRevPos); bitRevOffs1 = vbrsrq(idxOffs1, bitRevPos);
while (blkCnt > 0U) { while (blkCnt > 0) {
uint64x2_t vecIn; uint64x2_t vecIn;
vecIn = vldrdq_gather_offset_u64(pSrc, (int64x2_t) bitRevOffs0); vecIn = vldrdq_gather_offset_u64(pSrc, (int64x2_t) bitRevOffs0);
@ -294,7 +294,7 @@ __STATIC_INLINE void arm_bitreversal_16_outpl_mve(void *pDst, void *pSrc, uint32
/* bit-reverse fwd indexes */ /* bit-reverse fwd indexes */
bitRevOffs0 = vbrsrq(idxOffs0, bitRevPos); bitRevOffs0 = vbrsrq(idxOffs0, bitRevPos);
bitRevOffs1 = vbrsrq(idxOffs1, bitRevPos); bitRevOffs1 = vbrsrq(idxOffs1, bitRevPos);
while (blkCnt > 0U) { while (blkCnt > 0) {
uint32x4_t vecIn; uint32x4_t vecIn;
vecIn = vldrwq_gather_offset_s32(pSrc, bitRevOffs0); vecIn = vldrwq_gather_offset_s32(pSrc, bitRevOffs0);

@ -95,7 +95,7 @@ arm_status arm_conv_partial_f32(
const float32_t *pSrc1, *pSrc2; /* Intermediate pointers */ const float32_t *pSrc1, *pSrc2; /* Intermediate pointers */
float32_t sum; /* Accumulator */ float32_t sum; /* Accumulator */
uint32_t j, k, count, blkCnt, check; uint32_t j, k, count, blkCnt, check;
uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ int32_t blockSize1, blockSize2, blockSize3; /* Loop counters */
arm_status status; /* Status of Partial convolution */ arm_status status; /* Status of Partial convolution */
#if defined (ARM_MATH_LOOPUNROLL) #if defined (ARM_MATH_LOOPUNROLL)
@ -187,7 +187,7 @@ arm_status arm_conv_partial_f32(
* ----------------------*/ * ----------------------*/
/* The first stage starts here */ /* The first stage starts here */
while (blockSize1 > 0U) while (blockSize1 > 0)
{ {
/* Accumulator is made zero for every iteration */ /* Accumulator is made zero for every iteration */
sum = 0.0f; sum = 0.0f;
@ -550,7 +550,7 @@ arm_status arm_conv_partial_f32(
* Stage3 process * Stage3 process
* ------------------*/ * ------------------*/
while (blockSize3 > 0U) while (blockSize3 > 0)
{ {
/* Accumulator is made zero for every iteration */ /* Accumulator is made zero for every iteration */
sum = 0.0f; sum = 0.0f;
@ -627,7 +627,6 @@ arm_status arm_conv_partial_f32(
float32_t sum; /* Accumulator */ float32_t sum; /* Accumulator */
uint32_t i, j; /* Loop counters */ uint32_t i, j; /* Loop counters */
arm_status status; /* Status of Partial convolution */ arm_status status; /* Status of Partial convolution */
/* Check for range of output samples to be calculated */ /* Check for range of output samples to be calculated */
if ((firstIndex + numPoints) > ((srcALen + (srcBLen - 1U)))) if ((firstIndex + numPoints) > ((srcALen + (srcBLen - 1U))))
{ {

@ -71,7 +71,7 @@ arm_status arm_conv_partial_fast_q31(
const q31_t *pSrc1, *pSrc2; /* Intermediate pointers */ const q31_t *pSrc1, *pSrc2; /* Intermediate pointers */
q31_t sum; /* Accumulators */ q31_t sum; /* Accumulators */
uint32_t j, k, count, check, blkCnt; uint32_t j, k, count, check, blkCnt;
uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ int32_t blockSize1, blockSize2, blockSize3; /* Loop counters */
arm_status status; /* Status of Partial convolution */ arm_status status; /* Status of Partial convolution */
#if defined (ARM_MATH_LOOPUNROLL) #if defined (ARM_MATH_LOOPUNROLL)
@ -163,7 +163,7 @@ arm_status arm_conv_partial_fast_q31(
* ----------------------*/ * ----------------------*/
/* The first stage starts here */ /* The first stage starts here */
while (blockSize1 > 0U) while (blockSize1 > 0)
{ {
/* Accumulator is made zero for every iteration */ /* Accumulator is made zero for every iteration */
sum = 0; sum = 0;
@ -537,7 +537,7 @@ arm_status arm_conv_partial_fast_q31(
* Stage3 process * Stage3 process
* ------------------*/ * ------------------*/
while (blockSize3 > 0U) while (blockSize3 > 0)
{ {
/* Accumulator is made zero for every iteration */ /* Accumulator is made zero for every iteration */
sum = 0; sum = 0;

@ -76,7 +76,7 @@ arm_status arm_conv_partial_q15(
const q15_t *py; /* Intermediate inputB pointer */ const q15_t *py; /* Intermediate inputB pointer */
const q15_t *pSrc1, *pSrc2; /* Intermediate pointers */ const q15_t *pSrc1, *pSrc2; /* Intermediate pointers */
q31_t x0, x1, x2, x3, c0; /* Temporary input variables to hold state and coefficient values */ q31_t x0, x1, x2, x3, c0; /* Temporary input variables to hold state and coefficient values */
uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ int32_t blockSize1, blockSize2, blockSize3; /* Loop counters */
uint32_t j, k, count, blkCnt, check; uint32_t j, k, count, blkCnt, check;
arm_status status; /* Status of Partial convolution */ arm_status status; /* Status of Partial convolution */
@ -168,7 +168,7 @@ arm_status arm_conv_partial_q15(
/* Second part of this stage computes the MAC operations greater than or equal to 4 */ /* Second part of this stage computes the MAC operations greater than or equal to 4 */
/* The first part of the stage starts here */ /* The first part of the stage starts here */
while ((count < 4U) && (blockSize1 > 0U)) while ((count < 4U) && (blockSize1 > 0))
{ {
/* Accumulator is made zero for every iteration */ /* Accumulator is made zero for every iteration */
sum = 0; sum = 0;
@ -206,7 +206,7 @@ arm_status arm_conv_partial_q15(
* y[srcBLen] and y[srcBLen-1] coefficients, py is decremented by 1 */ * y[srcBLen] and y[srcBLen-1] coefficients, py is decremented by 1 */
py = py - 1; py = py - 1;
while (blockSize1 > 0U) while (blockSize1 > 0)
{ {
/* Accumulator is made zero for every iteration */ /* Accumulator is made zero for every iteration */
sum = 0; sum = 0;
@ -599,7 +599,7 @@ arm_status arm_conv_partial_q15(
/* The first part of the stage starts here */ /* The first part of the stage starts here */
j = count >> 2U; j = count >> 2U;
while ((j > 0U) && (blockSize3 > 0U)) while ((j > 0U) && (blockSize3 > 0))
{ {
/* Accumulator is made zero for every iteration */ /* Accumulator is made zero for every iteration */
sum = 0; sum = 0;
@ -660,7 +660,7 @@ arm_status arm_conv_partial_q15(
* so pointer py is updated to read only one sample at a time */ * so pointer py is updated to read only one sample at a time */
py = py + 1U; py = py + 1U;
while (blockSize3 > 0U) while (blockSize3 > 0)
{ {
/* Accumulator is made zero for every iteration */ /* Accumulator is made zero for every iteration */
sum = 0; sum = 0;

@ -74,7 +74,7 @@ arm_status arm_conv_partial_q31(
const q31_t *pSrc1, *pSrc2; /* Intermediate pointers */ const q31_t *pSrc1, *pSrc2; /* Intermediate pointers */
q63_t sum; /* Accumulator */ q63_t sum; /* Accumulator */
uint32_t j, k, count, blkCnt, check; uint32_t j, k, count, blkCnt, check;
uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ int32_t blockSize1, blockSize2, blockSize3; /* Loop counters */
arm_status status; /* Status of Partial convolution */ arm_status status; /* Status of Partial convolution */
#if defined (ARM_MATH_LOOPUNROLL) #if defined (ARM_MATH_LOOPUNROLL)
@ -166,7 +166,7 @@ arm_status arm_conv_partial_q31(
* ----------------------*/ * ----------------------*/
/* The first stage starts here */ /* The first stage starts here */
while (blockSize1 > 0U) while (blockSize1 > 0)
{ {
/* Accumulator is made zero for every iteration */ /* Accumulator is made zero for every iteration */
sum = 0; sum = 0;
@ -510,7 +510,7 @@ arm_status arm_conv_partial_q31(
* Stage3 process * Stage3 process
* ------------------*/ * ------------------*/
while (blockSize3 > 0U) while (blockSize3 > 0)
{ {
/* Accumulator is made zero for every iteration */ /* Accumulator is made zero for every iteration */
sum = 0; sum = 0;

@ -74,7 +74,7 @@ arm_status arm_conv_partial_q7(
const q7_t *pSrc1, *pSrc2; /* Intermediate pointers */ const q7_t *pSrc1, *pSrc2; /* Intermediate pointers */
q31_t sum; /* Accumulator */ q31_t sum; /* Accumulator */
uint32_t j, k, count, blkCnt, check; /* Loop counters */ uint32_t j, k, count, blkCnt, check; /* Loop counters */
uint32_t blockSize1, blockSize2, blockSize3; /* Loop counters */ int32_t blockSize1, blockSize2, blockSize3; /* Loop counters */
arm_status status; /* Status of Partial convolution */ arm_status status; /* Status of Partial convolution */
#if defined (ARM_MATH_LOOPUNROLL) #if defined (ARM_MATH_LOOPUNROLL)
@ -168,7 +168,7 @@ arm_status arm_conv_partial_q7(
* ----------------------*/ * ----------------------*/
/* The first stage starts here */ /* The first stage starts here */
while (blockSize1 > 0U) while (blockSize1 > 0)
{ {
/* Accumulator is made zero for every iteration */ /* Accumulator is made zero for every iteration */
sum = 0; sum = 0;
@ -613,7 +613,7 @@ arm_status arm_conv_partial_q7(
* Stage3 process * Stage3 process
* ------------------*/ * ------------------*/
while (blockSize3 > 0U) while (blockSize3 > 0)
{ {
/* Accumulator is made zero for every iteration */ /* Accumulator is made zero for every iteration */
sum = 0; sum = 0;

@ -21,7 +21,7 @@ class MISCF16:public Client::Suite
// Reference patterns are not loaded when we are in dump mode // Reference patterns are not loaded when we are in dump mode
Client::RefPattern<float16_t> ref; Client::RefPattern<float16_t> ref;
int nba,nbb,errOffset; int nba,nbb,errOffset,first;
}; };

@ -21,7 +21,7 @@ class MISCF32:public Client::Suite
// Reference patterns are not loaded when we are in dump mode // Reference patterns are not loaded when we are in dump mode
Client::RefPattern<float32_t> ref; Client::RefPattern<float32_t> ref;
int nba,nbb,errOffset; int nba,nbb,errOffset,first;
}; };

@ -16,11 +16,14 @@ class MISCQ15:public Client::Suite
Client::Pattern<q15_t> inputB; Client::Pattern<q15_t> inputB;
Client::LocalPattern<q15_t> output; Client::LocalPattern<q15_t> output;
Client::LocalPattern<q15_t> tmp;
Client::LocalPattern<q15_t> scratchA,scratchB;
// Reference patterns are not loaded when we are in dump mode // Reference patterns are not loaded when we are in dump mode
Client::RefPattern<q15_t> ref; Client::RefPattern<q15_t> ref;
int nba,nbb; int nba,nbb,first;
}; };

@ -16,11 +16,12 @@ class MISCQ31:public Client::Suite
Client::Pattern<q31_t> inputB; Client::Pattern<q31_t> inputB;
Client::LocalPattern<q31_t> output; Client::LocalPattern<q31_t> output;
Client::LocalPattern<q31_t> tmp;
// Reference patterns are not loaded when we are in dump mode // Reference patterns are not loaded when we are in dump mode
Client::RefPattern<q31_t> ref; Client::RefPattern<q31_t> ref;
int nba,nbb,errOffset; int nba,nbb,errOffset,first;
}; };

@ -16,11 +16,14 @@ class MISCQ7:public Client::Suite
Client::Pattern<q7_t> inputB; Client::Pattern<q7_t> inputB;
Client::LocalPattern<q7_t> output; Client::LocalPattern<q7_t> output;
Client::LocalPattern<q7_t> tmp;
Client::LocalPattern<q15_t> scratchA,scratchB;
// Reference patterns are not loaded when we are in dump mode // Reference patterns are not loaded when we are in dump mode
Client::RefPattern<q7_t> ref; Client::RefPattern<q7_t> ref;
int nba,nbb; int nba,nbb,first;
}; };

@ -85,7 +85,6 @@ def writeTests(config,format):
nbTest = nbTest + 1 nbTest = nbTest + 1
# Levinson durbin tests # Levinson durbin tests
config.setOverwrite(True)
a = [Tools.loopnb(format,Tools.TAILONLY), a = [Tools.loopnb(format,Tools.TAILONLY),
Tools.loopnb(format,Tools.BODYONLY), Tools.loopnb(format,Tools.BODYONLY),
@ -120,6 +119,36 @@ def writeTests(config,format):
config.writeReference(errTestID, err,"LDErrors") config.writeReference(errTestID, err,"LDErrors")
# Partial convolutions
config.setOverwrite(True)
inputsA=np.random.randn(NBSAMPLES)
inputsB=np.random.randn(NBSAMPLES)
inputsA = Tools.normalize(inputsA)
inputsB = Tools.normalize(inputsB)
config.writeInput(2, inputsA,"InputsA")
config.writeInput(2, inputsB,"InputsB")
(na,nb) = (6, 8)
# First = 3
numPoints=4
ref = np.convolve(inputsA[0:na],inputsB[0:nb],"full")
first=3
config.writeReference(nbTest, ref[first:first+numPoints])
nbTest = nbTest + 1
first=9
config.writeReference(nbTest, ref[first:first+numPoints])
nbTest = nbTest + 1
first=7
config.writeReference(nbTest, ref[first:first+numPoints])
nbTest = nbTest + 1

@ -0,0 +1,258 @@
H
128
// -0.593218
0xb8bf
// -0.098925
0xae55
// 0.434251
0x36f3
// 0.241624
0x33bb
// 0.193753
0x3233
// 0.047865
0x2a20
// -0.398695
0xb661
// 0.090438
0x2dca
// 0.252456
0x340a
// -0.195773
0xb244
// -0.245517
0xb3db
// -0.083765
0xad5c
// 0.342363
0x357a
// 0.049174
0x2a4b
// -0.766973
0xba23
// 0.078674
0x2d09
// -0.465628
0xb773
// 0.578399
0x38a1
// -0.228118
0xb34d
// -0.037266
0xa8c5
// 0.268094
0x344a
// 0.145986
0x30ac
// -0.176763
0xb1a8
// 0.090111
0x2dc4
// 0.226660
0x3341
// -0.045318
0xa9cd
// 0.304025
0x34dd
// -0.183748
0xb1e1
// -0.281643
0xb482
// 0.289113
0x34a0
// 0.075473
0x2cd5
// -0.576769
0xb89d
// 0.513700
0x381c
// -0.370791
0xb5ef
// 0.200437
0x326a
// -0.038470
0xa8ed
// 0.002267
0x18a4
// 0.252401
0x340a
// 0.126353
0x300b
// 0.548580
0x3863
// -0.085670
0xad7c
// -0.246716
0xb3e5
// -0.157441
0xb10a
// 0.379852
0x3614
// 0.234915
0x3384
// 0.166780
0x3156
// -0.227806
0xb34a
// -0.051023
0xaa88
// 0.212237
0x32cb
// 0.008789
0x2080
// 0.202816
0x327d
// -0.226175
0xb33d
// 0.309740
0x34f5
// -0.295655
0xb4bb
// 0.325004
0x3533
// 0.279029
0x3477
// 0.218798
0x3300
// 0.004502
0x1c9c
// 0.254444
0x3412
// 0.029897
0x27a7
// 0.596791
0x38c6
// -0.743870
0xb9f3
// -0.198965
0xb25e
// -0.184777
0xb1ea
// -0.167531
0xb15c
// -0.386183
0xb62e
// -0.043775
0xa99a
// 0.100731
0x2e72
// -0.253228
0xb40d
// 0.429801
0x36e0
// -0.144273
0xb09e
// -0.622778
0xb8fb
// 0.346472
0x358b
// -0.297673
0xb4c3
// -0.014766
0xa38f
// -0.320525
0xb521
// 0.451929
0x373b
// 0.154022
0x30ee
// 0.249402
0x33fb
// -0.144138
0xb09d
// 0.185855
0x31f3
// 0.093762
0x2e00
// -0.202150
0xb278
// 0.617824
0x38f1
// 0.439157
0x3707
// -0.302993
0xb4d9
// -0.277437
0xb470
// 0.073334
0x2cb2
// 0.199119
0x325f
// 0.052839
0x2ac3
// 0.322378
0x3528
// -0.449058
0xb72f
// -0.124078
0xaff1
// 0.365018
0x35d7
// 0.642896
0x3925
// -0.074547
0xacc5
// -0.459184
0xb759
// -0.287183
0xb498
// 0.518016
0x3825
// 0.202731
0x327d
// 0.302819
0x34d8
// 0.249308
0x33fa
// -0.030339
0xa7c4
// 0.025139
0x266f
// -0.083523
0xad58
// -0.564038
0xb883
// -0.168591
0xb165
// 0.123177
0x2fe2
// -0.075362
0xacd3
// 1.000000
0x3c00
// -0.032574
0xa82b
// 0.004692
0x1cce
// 0.145080
0x30a4
// 0.088233
0x2da6
// -0.192169
0xb226
// -0.203923
0xb287
// 0.086786
0x2d8e
// 0.150309
0x30cf
// 0.750943
0x3a02
// -0.012797
0xa28d
// -0.079466
0xad16
// 0.090636
0x2dcd
// 0.249097
0x33f9
// 0.067411
0x2c50
// -0.354282
0xb5ab
// 0.223532
0x3327
// -0.173375
0xb18c
// 0.186985
0x31fc

@ -0,0 +1,258 @@
H
128
// 0.188851
0x320b
// 0.283101
0x3488
// -0.027420
0xa705
// 0.262251
0x3432
// 0.547549
0x3861
// 0.071527
0x2c94
// -0.021481
0xa580
// -0.130600
0xb02e
// -0.519516
0xb828
// 0.162735
0x3135
// 0.252481
0x340a
// 0.030913
0x27ea
// -0.007150
0x9f52
// -0.073236
0xacb0
// 0.642905
0x3925
// -0.119369
0xafa4
// -0.244784
0xb3d5
// 0.001162
0x14c3
// 0.213802
0x32d7
// 0.143011
0x3094
// 0.345307
0x3586
// -0.433126
0xb6ee
// -0.044798
0xa9bc
// 0.027354
0x2701
// -0.125957
0xb008
// 0.089247
0x2db6
// 0.061532
0x2be0
// -0.284330
0xb48d
// 0.429359
0x36df
// -0.260239
0xb42a
// 0.426883
0x36d5
// 0.936854
0x3b7f
// -0.073308
0xacb1
// 0.521988
0x382d
// 0.575929
0x389c
// 0.222221
0x331c
// 0.471696
0x378c
// -0.363663
0xb5d2
// -0.100341
0xae6c
// -0.521884
0xb82d
// 0.145618
0x30a9
// 0.265268
0x343f
// 0.167876
0x315f
// 0.046480
0x29f3
// 0.199272
0x3260
// 0.038758
0x28f6
// 0.064636
0x2c23
// -0.405344
0xb67c
// -0.248849
0xb3f7
// 0.184206
0x31e5
// 0.380036
0x3615
// 0.635496
0x3915
// -0.692226
0xb98a
// 0.336007
0x3560
// -0.176150
0xb1a3
// 0.213555
0x32d5
// 0.375815
0x3603
// -0.263924
0xb439
// -0.883101
0xbb11
// 0.737840
0x39e7
// 0.102806
0x2e94
// 0.299161
0x34c9
// -0.021362
0xa578
// -0.517571
0xb824
// 0.273135
0x345f
// -0.465468
0xb773
// -0.004011
0x9c1b
// -0.178943
0xb1ba
// -0.168541
0xb165
// -0.029925
0xa7a9
// 0.441647
0x3711
// 0.742742
0x39f1
// -0.242604
0xb3c3
// 0.167170
0x3159
// 0.585460
0x38af
// -0.199603
0xb263
// -0.531041
0xb840
// -0.125736
0xb006
// 0.242829
0x33c5
// 0.169134
0x316a
// -0.241472
0xb3ba
// 0.102336
0x2e8d
// 0.231614
0x3369
// 0.243479
0x33cb
// -0.130909
0xb030
// 0.620268
0x38f6
// 0.408647
0x368a
// 0.419532
0x36b6
// -0.086207
0xad84
// 0.044494
0x29b2
// 0.307354
0x34eb
// 0.529237
0x383c
// 0.099290
0x2e5b
// -0.527995
0xb839
// -0.005183
0x9d4f
// 0.723920
0x39cb
// 0.263613
0x3438
// 0.280372
0x347c
// 0.247475
0x33eb
// 0.280760
0x347e
// 0.211977
0x32c9
// 0.651552
0x3936
// 0.351782
0x35a1
// 0.056839
0x2b46
// -0.014212
0xa347
// -0.012280
0xa24a
// -0.228619
0xb351
// 0.201568
0x3273
// 0.129214
0x3023
// 0.067714
0x2c55
// -0.206529
0xb29c
// 0.077131
0x2cf0
// 0.243397
0x33ca
// -0.108488
0xaef1
// 0.080201
0x2d22
// 0.249415
0x33fb
// -0.084475
0xad68
// 1.000000
0x3c00
// 0.187655
0x3201
// -0.000152
0x88f9
// -0.175222
0xb19b
// -0.063242
0xac0c
// -0.199630
0xb263
// -0.646291
0xb92c
// 0.057387
0x2b58
// 0.777069
0x3a37
// 0.236219
0x338f
// -0.030857
0xa7e6

@ -0,0 +1,10 @@
H
4
// 0.015708
0x2405
// -0.257672
0xb41f
// 0.074552
0x2cc5
// 0.315045
0x350a

@ -0,0 +1,10 @@
H
4
// -0.021836
0xa597
// -0.032294
0xa822
// -0.026332
0xa6be
// -0.006251
0x9e67

@ -0,0 +1,10 @@
H
4
// 0.292460
0x34ae
// 0.139516
0x3077
// -0.021836
0xa597
// -0.032294
0xa822

@ -0,0 +1,258 @@
W
128
// -0.408856
0xbed15588
// 0.352979
0x3eb4b9b8
// -0.212540
0xbe59a3fb
// -0.079176
0xbda22722
// -0.205653
0xbe529696
// 0.443542
0x3ee317e7
// -0.036075
0xbd13c371
// -0.165644
0xbe299e91
// -0.362820
0xbeb9c37f
// -0.090657
0xbdb9aa86
// -0.651197
0xbf26b4d9
// 0.041941
0x3d2bca34
// -0.120781
0xbdf75c41
// -0.138785
0xbe0e1dbd
// 0.266372
0x3e8861ee
// 0.172583
0x3e30b9ae
// -0.208683
0xbe55b0fd
// 1.000000
0x3f800000
// 0.310712
0x3e9f1598
// -0.717067
0xbf3791b2
// 0.137689
0x3e0cfe56
// -0.444512
0xbee39721
// -0.471998
0xbef1a9c0
// -0.305168
0xbe9c3efe
// -0.033565
0xbd097af3
// 0.006256
0x3bccfed4
// 0.044430
0x3d35fc82
// 0.451259
0x3ee70b7a
// -0.874419
0xbf5fd9e8
// 0.082876
0x3da9bae3
// -0.133019
0xbe083620
// -0.004006
0xbb8346f5
// 0.119721
0x3df5307e
// -0.813550
0xbf5044d0
// 0.030887
0x3cfd05cf
// -0.221062
0xbe625e19
// -0.149393
0xbe18fa6b
// -0.087485
0xbdb32b24
// -0.003640
0xbb6e91ee
// 0.214105
0x3e5b3e60
// 0.795207
0x3f4b92ae
// -0.156104
0xbe1fd999
// 0.004570
0x3b95c3e7
// -0.717054
0xbf3790d4
// -0.270248
0xbe8a5de9
// 0.185234
0x3e3dadfa
// -0.440715
0xbee1a556
// 0.228434
0x3e69eaa4
// -0.043029
0xbd303eb3
// -0.025490
0xbcd0d125
// -0.138407
0xbe0dbaaf
// 0.195575
0x3e4844dd
// 0.504440
0x3f0122fa
// -0.218000
0xbe5f3b85
// -0.093577
0xbdbfa568
// 0.538620
0x3f09e2f8
// 0.217783
0x3e5f026c
// -0.414279
0xbed41c6b
// 0.075914
0x3d9b78cf
// -0.148940
0xbe1883b9
// 0.001035
0x3a879fcd
// 0.180469
0x3e38ccdd
// -0.051294
0xbd521a29
// 0.015509
0x3c7e1b72
// -0.295836
0xbe9777dc
// 0.086504
0x3db12915
// -0.071383
0xbd923119
// -0.487609
0xbef9a7e0
// -0.535240
0xbf090579
// 0.319511
0x3ea396f8
// -0.420576
0xbed755af
// -0.347757
0xbeb20d43
// 0.476699
0x3ef411e4
// -0.136017
0xbe0b480b
// 0.281232
0x3e8ffd9a
// -0.480906
0xbef63953
// -0.133580
0xbe08c93d
// 0.361641
0x3eb92913
// 0.063390
0x3d81d2ab
// 0.494117
0x3efcfcf8
// 0.991961
0x3f7df12c
// -0.154200
0xbe1de6a5
// 0.939349
0x3f707934
// 0.494507
0x3efd3005
// 0.885017
0x3f629082
// 0.223906
0x3e654790
// -0.933301
0xbf6eecd2
// 0.404726
0x3ecf382f
// 0.328257
0x3ea8114a
// -0.380696
0xbec2ea9f
// -0.785895
0xbf49306a
// 0.002920
0x3b3f641f
// 0.096507
0x3dc5a538
// 0.366148
0x3ebb77b3
// 0.241460
0x3e774158
// 0.012145
0x3c46fdea
// 0.219302
0x3e6090be
// -0.396050
0xbecac716
// 0.100028
0x3dccdb8e
// -0.110015
0xbde14f85
// -0.667081
0xbf2ac5ca
// 0.149182
0x3e18c33e
// -0.155235
0xbe1ef5dc
// -0.213945
0xbe5b1477
// -0.052183
0xbd55be22
// -0.057000
0xbd6978ff
// 0.611588
0x3f1c910a
// 0.207191
0x3e5429f9
// 0.410298
0x3ed21298
// -0.364217
0xbeba7a98
// 0.126231
0x3e0142c4
// 0.707897
0x3f3538b9
// 0.298122
0x3e98a36a
// 0.460805
0x3eebeea0
// -0.184775
0xbe3d35b4
// -0.685880
0xbf2f95ce
// 0.385297
0x3ec545b4
// 0.151311
0x3e1af15a
// 0.712237
0x3f365531
// 0.320239
0x3ea3f651
// -0.012924
0xbc53c100
// -0.174532
0xbe32b887
// -0.312066
0xbe9fc713
// -0.612360
0xbf1cc3a0
// 0.024899
0x3ccbf8c0
// -0.006532
0xbbd60980
// -0.324830
0xbea6502d
// 0.211399
0x3e5878eb

@ -0,0 +1,258 @@
W
128
// 0.076416
0x3d9c7fd4
// 0.350654
0x3eb388ec
// 0.188778
0x3e414f06
// -0.127704
0xbe02c4df
// -0.578990
0xbf1438b6
// 0.413429
0x3ed3acff
// 0.068825
0x3d8cf45c
// -0.091089
0xbdba8cf3
// 0.357370
0x3eb6f923
// 0.680381
0x3f2e2d7b
// -0.580667
0xbf14a6a0
// 0.256540
0x3e835928
// 0.821903
0x3f526839
// -1.000000
0xbf800000
// -0.360921
0xbeb8caaa
// -0.150020
0xbe199ef8
// 0.145058
0x3e1489f5
// 0.696095
0x3f323342
// 0.350643
0x3eb38771
// -0.749285
0xbf3fd12b
// 0.944457
0x3f71c7f1
// 0.227521
0x3e68fb45
// -0.087795
0xbdb3ce10
// 0.783025
0x3f487459
// -0.340196
0xbeae2e3b
// -0.820017
0xbf51eca4
// 0.063850
0x3d82c39e
// -0.169005
0xbe2d0fc1
// 0.378717
0x3ec1e725
// -0.851016
0xbf59dc33
// 0.508186
0x3f021882
// 0.043058
0x3d305dee
// -0.130515
0xbe05a5cb
// -0.205890
0xbe52d4d5
// 0.237191
0x3e72e227
// -0.177942
0xbe363685
// 0.904609
0x3f679479
// 0.137673
0x3e0cfa43
// 0.217030
0x3e5e3d04
// -0.217788
0xbe5f03d7
// 0.172859
0x3e310209
// 0.945452
0x3f720920
// 0.308103
0x3e9dbfa3
// -0.170330
0xbe2e6aff
// -0.206934
0xbe53e66a
// 0.256208
0x3e832dc0
// -0.079098
0xbda1fe06
// 0.463457
0x3eed4a40
// -0.284928
0xbe91e21b
// -0.568511
0xbf1189f6
// -0.113480
0xbde8681a
// -0.045659
0xbd3b04ce
// 0.988349
0x3f7d0476
// 0.569340
0x3f11c049
// -0.113213
0xbde7dc78
// -0.580495
0xbf149b4b
// -0.232168
0xbe6dbd69
// -0.309811
0xbe9e9f95
// -0.053105
0xbd598429
// 0.201668
0x3e4e81fd
// 0.083913
0x3dabda61
// -0.023750
0xbcc2904c
// -0.282556
0xbe90ab20
// -0.471850
0xbef19658
// 0.071891
0x3d933b78
// 0.013821
0x3c6271d2
// 0.161528
0x3e25677c
// 0.545243
0x3f0b9507
// 0.147893
0x3e177153
// -0.005182
0xbba9c9dd
// -0.191470
0xbe4410bc
// -0.539969
0xbf0a3b6b
// 0.427093
0x3edaabe6
// 0.853451
0x3f5a7bc1
// -0.113256
0xbde7f2e4
// 0.577669
0x3f13e21f
// 0.191972
0x3e449465
// 0.210234
0x3e574779
// -0.438553
0xbee08a0f
// -0.589865
0xbf170164
// 0.242862
0x3e78b0c2
// 0.299998
0x3e999953
// -0.766087
0xbf441e40
// 0.118959
0x3df3a0b9
// -0.400104
0xbeccda66
// -0.737668
0xbf3cd7d7
// 0.328361
0x3ea81efa
// -0.074057
0xbd97ab3c
// -0.732246
0xbf3b7471
// 0.727349
0x3f3a338f
// -0.302912
0xbe9b174c
// 0.103516
0x3dd40049
// 0.914201
0x3f6a0911
// -0.446086
0xbee46560
// -0.523053
0xbf05e6d1
// 0.441490
0x3ee20af2
// -0.739384
0xbf3d484a
// 0.374889
0x3ebff17f
// 0.110313
0x3de1ec0a
// -0.590913
0xbf17460d
// -0.876047
0xbf60449e
// 0.536942
0x3f097504
// 0.917917
0x3f6afca2
// 0.369464
0x3ebd2a70
// -0.188408
0xbe40edf4
// -0.076766
0xbd9d3742
// 0.388861
0x3ec718bd
// -0.031002
0xbcfdf767
// 0.179182
0x3e377b80
// 0.086723
0x3db19bf3
// -0.124183
0xbdfe53bd
// -0.269676
0xbe8a12eb
// -0.129818
0xbe04ef0c
// -0.114480
0xbdea748a
// -0.545107
0xbf0b8c1f
// -0.513347
0xbf036abc
// 0.243437
0x3e79476d
// -0.061636
0xbd7c75d1
// -0.782939
0xbf486eb6
// 0.148320
0x3e17e113
// 0.767157
0x3f44646c
// -0.104280
0xbdd5908c
// -0.600747
0xbf19ca94
// -0.149521
0xbe191bed
// -0.034636
0xbd0dde3c
// 0.804158
0x3f4ddd49
// -0.060410
0xbd77704e
// -0.278624
0xbe8ea7d6

@ -0,0 +1,10 @@
W
4
// 0.038269
0x3d1cc01d
// 0.108045
0x3ddd46ce
// -0.399428
0xbecc81e3
// 0.367669
0x3ebc3f17

@ -0,0 +1,10 @@
W
4
// -0.327918
0xbea7e4ed
// 0.176431
0x3e34aa5a
// 0.049260
0x3d49c485
// -0.040402
0xbd257c67

@ -0,0 +1,10 @@
W
4
// 0.129502
0x3e049c31
// -0.017086
0xbc8bf770
// -0.327918
0xbea7e4ed
// 0.176431
0x3e34aa5a

@ -0,0 +1,258 @@
H
128
// 0.872649
0x6FB3
// 0.119763
0x0F54
// 1.000000
0x7FFF
// 0.110406
0x0E22
// 0.045251
0x05CB
// -0.680202
0xA8EF
// 0.223670
0x1CA1
// 0.136903
0x1186
// -0.280117
0xDC25
// -0.055638
0xF8E1
// 0.370392
0x2F69
// 0.241100
0x1EDC
// 0.083658
0x0AB5
// 0.374072
0x2FE2
// 0.404107
0x33BA
// 0.832633
0x6A94
// -0.160535
0xEB74
// 0.412075
0x34BF
// -0.428253
0xC92F
// 0.472402
0x3C78
// 0.216703
0x1BBD
// 0.618751
0x4F33
// -0.298854
0xD9BF
// 0.260263
0x2150
// 0.176444
0x1696
// -0.154228
0xEC42
// -0.022852
0xFD13
// -0.344665
0xD3E2
// 0.283971
0x2459
// 0.268429
0x225C
// 0.382684
0x30FC
// 0.342076
0x2BC9
// -0.347722
0xD37E
// 0.322834
0x2953
// 0.681457
0x573A
// 0.203986
0x1A1C
// 0.217287
0x1BD0
// 0.252198
0x2048
// -0.690112
0xA7AA
// -0.356592
0xD25B
// 0.201048
0x19BC
// 0.203178
0x1A02
// -0.029915
0xFC2C
// 0.258341
0x2111
// -0.188735
0xE7D8
// 0.466294
0x3BB0
// 0.200418
0x19A7
// -0.308119
0xD890
// 0.678873
0x56E5
// 0.161014
0x149C
// -0.202410
0xE617
// 0.039699
0x0515
// 0.109943
0x0E13
// 0.340078
0x2B88
// 0.087813
0x0B3D
// 0.392065
0x322F
// 0.278643
0x23AB
// 0.140854
0x1208
// 0.126706
0x1038
// -0.198562
0xE696
// 0.201079
0x19BD
// 0.175416
0x1674
// -0.189916
0xE7B1
// 0.167046
0x1562
// 0.544565
0x45B4
// -0.038924
0xFB05
// -0.104382
0xF2A4
// -0.532592
0xBBD4
// -0.360121
0xD1E8
// -0.512503
0xBE66
// 0.437632
0x3804
// -0.029050
0xFC48
// -0.218655
0xE403
// 0.412365
0x34C8
// 0.187527
0x1801
// -0.263306
0xDE4C
// -0.022234
0xFD27
// 0.211780
0x1B1C
// -0.500142
0xBFFB
// 0.242427
0x1F08
// -0.202170
0xE61F
// 0.175106
0x166A
// 0.277822
0x2390
// 0.101618
0x0D02
// 0.190897
0x186F
// 0.145811
0x12AA
// 0.126509
0x1031
// 0.092442
0x0BD5
// 0.221118
0x1C4E
// 0.615724
0x4ED0
// -0.175028
0xE999
// -0.303911
0xD919
// -0.233420
0xE21F
// 0.247750
0x1FB6
// -0.649169
0xACE8
// -0.468764
0xC400
// -0.191412
0xE780
// 0.130676
0x10BA
// -0.695344
0xA6FF
// 0.060760
0x07C7
// -0.790282
0x9AD8
// 0.831580
0x6A71
// 0.095698
0x0C40
// 0.375652
0x3015
// -0.280013
0xDC29
// -0.502337
0xBFB3
// -0.400098
0xCCCA
// 0.267026
0x222E
// 0.039975
0x051E
// -0.296655
0xDA07
// 0.626386
0x502D
// 0.065611
0x0866
// -0.364186
0xD162
// -0.000828
0xFFE5
// 0.110649
0x0E2A
// -0.059815
0xF858
// 0.192856
0x18B0
// -0.513953
0xBE37
// -0.036303
0xFB5A
// -0.276800
0xDC92
// -0.018899
0xFD95
// 0.429960
0x3709
// 0.175999
0x1687
// -0.387184
0xCE71
// 0.042722
0x0578
// -0.458916
0xC542
// 0.008363
0x0112
// -0.154126
0xEC46

@ -0,0 +1,258 @@
H
128
// 0.173863
0x1641
// 0.647954
0x52F0
// 0.213377
0x1B50
// 0.289261
0x2507
// -0.323197
0xD6A1
// -0.327769
0xD60C
// 0.265384
0x21F8
// 0.399544
0x3324
// -0.137226
0xEE6F
// -0.102856
0xF2D6
// -0.653204
0xAC64
// 0.433687
0x3783
// 0.366834
0x2EF4
// -0.465473
0xC46B
// -0.595378
0xB3CB
// -0.288898
0xDB05
// -0.467503
0xC429
// -0.201259
0xE63D
// -0.074640
0xF672
// 0.296933
0x2602
// -0.168636
0xEA6A
// -0.116839
0xF10B
// -0.301160
0xD974
// -0.407015
0xCBE7
// -0.790804
0x9AC7
// 0.737212
0x5E5D
// 0.052032
0x06A9
// 0.206036
0x1A5F
// 0.405368
0x33E3
// -0.157068
0xEBE5
// -0.165247
0xEAD9
// -0.222769
0xE37C
// -0.292774
0xDA86
// -0.117780
0xF0ED
// 0.235388
0x1E21
// 0.120394
0x0F69
// -0.550015
0xB999
// 0.354241
0x2D58
// 0.302116
0x26AC
// 0.500004
0x4000
// -0.529074
0xBC47
// -0.021321
0xFD45
// 0.394057
0x3270
// -0.408250
0xCBBE
// 0.364144
0x2E9C
// -0.286190
0xDB5E
// -0.050257
0xF991
// -0.589002
0xB49C
// -0.102010
0xF2F1
// -0.073868
0xF68B
// -0.646674
0xAD3A
// 0.614972
0x4EB7
// -0.423393
0xC9CE
// 0.603882
0x4D4C
// -0.017881
0xFDB6
// 0.127179
0x1047
// -0.073630
0xF693
// -0.324798
0xD66D
// 0.224896
0x1CC9
// 0.019078
0x0271
// -0.050052
0xF998
// 0.308029
0x276D
// 0.045211
0x05C9
// 0.014993
0x01EB
// 0.549208
0x464C
// -0.047157
0xF9F7
// -0.079541
0xF5D2
// 0.426127
0x368B
// 0.432058
0x374E
// 0.106592
0x0DA5
// -0.253143
0xDF99
// 0.099369
0x0CB8
// 0.751503
0x6031
// 0.050508
0x0677
// -0.020178
0xFD6B
// -0.558523
0xB882
// -0.106239
0xF267
// -0.315654
0xD799
// -0.140695
0xEDFE
// -1.000000
0x8000
// -0.316392
0xD780
// 0.038841
0x04F9
// 0.614238
0x4E9F
// -0.683931
0xA875
// -0.875490
0x8FF0
// -0.134060
0xEED7
// 0.193715
0x18CC
// 0.213029
0x1B45
// -0.787506
0x9B33
// -0.068458
0xF73D
// 0.101171
0x0CF3
// 0.046856
0x05FF
// 0.343953
0x2C07
// -0.040785
0xFAC8
// -0.287774
0xDB2A
// 0.211245
0x1B0A
// -0.198096
0xE6A5
// -0.079566
0xF5D1
// -0.471014
0xC3B6
// 0.165634
0x1533
// -0.119675
0xF0AF
// -0.256529
0xDF2A
// -0.081860
0xF586
// 0.134447
0x1136
// 0.445008
0x38F6
// -0.124901
0xF003
// 0.429819
0x3704
// 0.219239
0x1C10
// -0.463159
0xC4B7
// 0.072223
0x093F
// -0.683733
0xA87B
// 0.580124
0x4A42
// -0.275695
0xDCB6
// -0.571408
0xB6DC
// -0.327343
0xD61A
// 0.483721
0x3DEB
// 0.067385
0x08A0
// 0.449578
0x398C
// -0.199343
0xE67C
// 0.178930
0x16E7
// 0.108298
0x0DDD
// 0.492537
0x3F0B
// 0.126736
0x1039
// -0.683428
0xA885
// -0.215028
0xE47A
// 0.083242
0x0AA8
// 0.216752
0x1BBF
// -0.424747
0xC9A2

@ -0,0 +1,10 @@
H
4
// 0.945128
0x78FA
// 0.045387
0x05CF
// -0.100856
0xF317
// -0.530013
0xBC29

@ -0,0 +1,10 @@
H
4
// 0.633851
0x5122
// 0.279070
0x23B9
// -0.162435
0xEB35
// -0.271770
0xDD37

@ -0,0 +1,10 @@
H
4
// -0.115057
0xF146
// 0.065666
0x0868
// 0.633851
0x5122
// 0.279070
0x23B9

@ -0,0 +1,258 @@
W
128
// -0.155592
0xEC15936E
// 0.110753
0x0E2D25D4
// 0.251559
0x2033133D
// 0.183003
0x176CA3E9
// -0.039145
0xFAFD4BB9
// 0.804026
0x66EA5713
// -0.023994
0xFCEDC5C9
// 0.536403
0x44A8D7D7
// 0.371044
0x2F7E5E8E
// -0.481211
0xC267AB10
// -0.236577
0xE1B7DA3E
// -0.206247
0xE599AF70
// 0.364838
0x2EB2FFCF
// -0.684697
0xA85BDBB4
// -0.029802
0xFC2F7688
// 0.453316
0x3A0641AB
// 0.349862
0x2CC84AE3
// -0.423876
0xC9BE6C16
// 0.286488
0x24AB9FBF
// -0.496137
0xC07E97FF
// -0.044697
0xFA475E27
// -0.150406
0xECBF7EBF
// -0.542802
0xBA857709
// -0.828577
0x95F130E4
// 0.180797
0x17245A48
// -0.125880
0xEFE3296C
// -0.230351
0xE283D7CA
// -0.154859
0xEC2D9591
// -0.405204
0xCC2246ED
// -0.154939
0xEC2AF6FC
// 0.326954
0x29D99E4F
// 0.174947
0x1664A876
// 0.396169
0x32B5A932
// 0.088877
0x0B6053BD
// -0.107162
0xF2487FD0
// 0.079385
0x0A29459A
// -0.246131
0xE07EC40E
// -0.215658
0xE4655069
// 0.079260
0x0A252ECE
// -0.300009
0xD9995012
// 0.222190
0x1C70BB00
// -0.085637
0xF509D7D3
// -0.260283
0xDEAF07E6
// -0.082407
0xF573AC93
// -0.122735
0xF04A3419
// -0.314849
0xD7B30B14
// 0.206817
0x1A78FD3A
// -0.285448
0xDB76704E
// 0.251155
0x2025DB4B
// -0.373790
0xD027A766
// 0.282787
0x24325C2B
// 0.336421
0x2B0FD6BF
// 0.179124
0x16ED88DE
// 0.033688
0x044FDF73
// 0.297076
0x260692F7
// -0.077427
0xF616E067
// -0.334261
0xD536EFBE
// -0.508940
0xBEDB0F5F
// 0.094078
0x0C0AC094
// 0.771943
0x62CF0863
// 0.396246
0x32B82C70
// 0.693230
0x58BBC019
// 0.025886
0x035037E7
// 0.081675
0x0A745370
// 1.000000
0x7FFFFFFF
// -0.772127
0x9D2AEEFE
// 0.103098
0x0D324DB4
// 0.130798
0x10BDFAD2
// -0.207345
0xE575B856
// 0.199383
0x19855FDD
// -0.167339
0xEA94A3E6
// -0.544247
0xBA561EEE
// 0.210072
0x1AE3A2B2
// 0.005924
0x00C2204D
// -0.460510
0xC50DFE53
// -0.424150
0xC9B575CC
// 0.210181
0x1AE734CD
// -0.576142
0xB640F797
// 0.561856
0x47EAE1B9
// -0.548854
0xB9BF25B0
// -0.114646
0xF1534B69
// -0.160796
0xEB6B0636
// -0.054948
0xF8F774CF
// 0.895387
0x729C0823
// 0.305356
0x2715E6E9
// -0.275317
0xDCC26BCE
// -0.271498
0xDD3F9116
// -0.113467
0xF179E77D
// 0.070176
0x08FB84AE
// 0.595304
0x4C32E7EE
// 0.089138
0x0B68DF53
// -0.473757
0xC35BEFBB
// -0.027433
0xFC7D0F73
// -0.907741
0x8BCF2123
// -0.179374
0xE90A476A
// 0.001461
0x002FDD30
// -0.590769
0xB461AF4F
// 0.524772
0x432BB98E
// -0.232855
0xE231CEBA
// -0.088194
0xF4B60E7F
// -0.162259
0xEB3B194C
// 0.311916
0x27ECDC5B
// -0.148101
0xED0B092F
// 0.111886
0x0E524943
// 0.313541
0x28221F36
// 0.685076
0x57B08E8D
// 0.194908
0x18F2BBDB
// 0.376102
0x30241FBB
// -0.551778
0xB95F584F
// 0.112546
0x0E67EB1F
// -0.099705
0xF33CDF61
// 0.601622
0x4D01F533
// -0.026520
0xFC9AFF70
// 0.186820
0x17E9B556
// 0.018510
0x025E8710
// -0.238359
0xE17D7693
// -0.161305
0xEB5A5B55
// 0.163329
0x14E7F85E
// 0.047376
0x06106BDA
// -0.269964
0xDD71CF43
// 0.213309
0x1B4DB96A
// -0.295400
0xDA305736
// -0.120624
0xF08F6550
// 0.220907
0x1C46B07F
// -0.489692
0xC151C959
// 0.304586
0x26FCAF39
// -0.395886
0xCD53991C
// -0.635176
0xAEB28ACD

@ -0,0 +1,258 @@
W
128
// -0.250598
0xDFEC6B14
// -0.352143
0xD2ECF769
// -0.111480
0xF1BB039F
// -0.127882
0xEFA18D56
// -0.752498
0x9FAE215C
// -0.025350
0xFCC1522B
// -0.153785
0xEC50C539
// 0.299853
0x26619638
// 0.047254
0x060C6D28
// -0.530339
0xBC1DD9A9
// -0.218209
0xE411BC67
// -0.800596
0x9986108D
// -0.590887
0xB45DD13D
// 0.012284
0x019283EA
// 0.564010
0x48317BB6
// 0.295170
0x25C8209C
// 0.028052
0x039734FC
// 0.390765
0x320498C4
// -0.585479
0xB50F0846
// -0.438803
0xC7D54E0B
// -0.166292
0xEAB6EF40
// 0.275969
0x2352F2C5
// 0.256054
0x20C6606B
// -0.141916
0xEDD5B674
// -0.237306
0xE19FF848
// 0.189950
0x185048B2
// -0.183125
0xE88F5BDC
// -0.500037
0xBFFECD65
// 0.067766
0x08AC8CA5
// 0.052210
0x06AED084
// 0.361055
0x2E370EEE
// -0.335105
0xD51B4ABC
// -0.434492
0xC8629150
// -0.430969
0xC8D604FF
// 0.833601
0x6AB36D11
// -0.272168
0xDD299583
// -0.130780
0xEF429B2B
// 0.861928
0x6E53AAFC
// 0.414274
0x3506EED5
// 0.151238
0x135BC064
// -0.143560
0xED9FD2F6
// -0.223787
0xE35AEFB9
// 0.577436
0x49E96A33
// 0.381980
0x30E4BA1F
// -0.198681
0xE6919D5B
// 0.127847
0x105D4683
// 0.588680
0x4B59DC93
// -0.142718
0xEDBB6EC8
// 0.738219
0x5E7DF679
// 0.179032
0x16EA833F
// -0.492611
0xC0F21C4D
// 0.771454
0x62BEFF64
// 0.196475
0x1926163E
// -0.446699
0xC6D29366
// 0.359846
0x2E0F6EE8
// 0.581411
0x4A6BABCB
// 0.291594
0x2552F11D
// -0.610765
0xB1D2709C
// 0.346836
0x2C651B1F
// -0.231126
0xE26A79F2
// -0.358503
0xD21C94DD
// 0.055827
0x07255447
// -0.129489
0xEF6CE6EF
// -0.242769
0xE0ECF096
// -0.062567
0xF7FDCB67
// 0.790446
0x652D5413
// 0.201309
0x19C47FB8
// -0.197875
0xE6AC062C
// -0.119927
0xF0A63B68
// -0.307293
0xD8AAA268
// -0.182043
0xE8B2CD7B
// -0.028679
0xFC5442B5
// -1.000000
0x80000000
// -0.439115
0xC7CB122F
// 0.102469
0x0D1DB535
// 0.273442
0x230027C0
// 0.135993
0x11683B0A
// 0.264510
0x21DB7818
// -0.554179
0xB910A6A7
// 0.043680
0x05974D7C
// -0.025450
0xFCBE0BB0
// 0.507717
0x40FCE252
// -0.376531
0xCFCDD1E3
// -0.254905
0xDF5F4570
// 0.281025
0x23F8A029
// 0.250369
0x200C14EC
// -0.513744
0xBE3DA4E4
// 0.370002
0x2F5C3DB7
// 0.000583
0x0013166A
// 0.237960
0x1E7577D7
// 0.618999
0x4F3B5FB5
// -0.469113
0xC3F41EDB
// -0.499245
0xC018BC72
// 0.111722
0x0E4CE929
// 0.306807
0x27457144
// -0.221075
0xE3B3CF77
// -0.453787
0xC5EA4C35
// 0.492754
0x3F128EE8
// 0.704113
0x5A205CF8
// -0.583898
0xB542D2B9
// 0.059441
0x079BBF8B
// 0.719355
0x5C13D315
// -0.043652
0xFA699B48
// 0.177972
0x16C7CA14
// -0.491761
0xC10DF614
// -0.390797
0xCDFA5E42
// 0.872488
0x6FADB1C9
// 0.175729
0x167E4DD9
// 0.027226
0x037C27BB
// -0.262135
0xDE7259C3
// 0.137981
0x11A95A1B
// 0.596575
0x4C5C954C
// 0.182890
0x1768EF9E
// -0.233825
0xE2120819
// -0.542904
0xBA8221F6
// 0.392796
0x324724A4
// 0.178871
0x16E54205
// 0.372741
0x2FB5FD76
// -0.777145
0x9C867FF9
// 0.082663
0x0A94B3DF
// -0.351708
0xD2FB37A7
// -0.330968
0xD5A2DA0C
// -0.599008
0xB353B3B5
// -0.274806
0xDCD3273F
// -0.681254
0xA8CCACC4
// -0.385400
0xCEAB32AE
// 0.573512
0x4968DB7D
// -0.073772
0xF68EA5E9

@ -0,0 +1,10 @@
W
4
// -0.126894
0xEFC1EEA1
// 0.020242
0x02974715
// -0.319671
0xD71508C8
// -0.470349
0xC3CB9A79

@ -0,0 +1,10 @@
W
4
// -0.556749
0xB8BC7452
// 0.040512
0x052F7BEC
// -0.135385
0xEEABB3FB
// 0.241090
0x1EDC0837

@ -0,0 +1,10 @@
W
4
// -0.292400
0xDA929F9F
// -0.083480
0xF55088CC
// -0.556749
0xB8BC7452
// 0.040512
0x052F7BEC

@ -0,0 +1,258 @@
B
128
// 0.257433
0x21
// -0.035651
0xFB
// -0.354711
0xD3
// 0.538530
0x45
// 0.004928
0x01
// 0.792147
0x65
// -0.137823
0xEE
// -0.225079
0xE3
// -0.091460
0xF4
// 0.139284
0x12
// -0.085514
0xF5
// -0.038723
0xFB
// 0.479174
0x3D
// 0.338631
0x2B
// -0.076604
0xF6
// -0.458771
0xC5
// -0.063325
0xF8
// -0.972985
0x83
// -0.231026
0xE2
// 0.057905
0x07
// 0.439201
0x38
// 0.335806
0x2B
// 0.059707
0x08
// 0.190294
0x18
// -0.128634
0xF0
// 0.386414
0x31
// 0.196409
0x19
// 0.142063
0x12
// 0.090132
0x0C
// -0.221930
0xE4
// -0.237882
0xE2
// 0.121750
0x10
// 0.014821
0x02
// 0.314376
0x28
// 0.027280
0x03
// 0.040193
0x05
// 0.104099
0x0D
// 0.248728
0x20
// 0.204053
0x1A
// 0.382669
0x31
// 0.264616
0x22
// -0.438867
0xC8
// -0.284693
0xDC
// -0.246370
0xE0
// 0.522747
0x43
// -0.256103
0xDF
// -0.165444
0xEB
// -0.036736
0xFB
// 0.241464
0x1F
// 0.310154
0x28
// 0.310687
0x28
// -0.618961
0xB1
// -0.299953
0xDA
// -0.192233
0xE7
// -0.315964
0xD8
// -0.160791
0xEB
// 0.430204
0x37
// -0.130630
0xEF
// -0.073769
0xF7
// -0.232206
0xE2
// 0.527047
0x43
// -0.411148
0xCB
// -0.694745
0xA7
// -0.257116
0xDF
// -0.214755
0xE5
// -0.370717
0xD1
// -0.005605
0xFF
// 0.246141
0x20
// 0.019647
0x03
// 0.087095
0x0B
// -0.011063
0xFF
// -0.171951
0xEA
// 0.676262
0x57
// -0.311770
0xD8
// -0.033461
0xFC
// 0.624148
0x50
// 0.086359
0x0B
// -0.321499
0xD7
// -0.471657
0xC4
// 0.038051
0x05
// -0.223407
0xE3
// -0.366621
0xD1
// -0.638960
0xAE
// 0.200246
0x1A
// -0.942135
0x87
// 0.209486
0x1B
// 0.274298
0x23
// -0.084296
0xF5
// -0.051914
0xF9
// 0.215463
0x1C
// 0.161709
0x15
// -0.122971
0xF0
// -0.257581
0xDF
// -0.041184
0xFB
// 0.186337
0x18
// -0.074696
0xF6
// -0.426336
0xC9
// 0.248932
0x20
// -0.729446
0xA3
// 0.185486
0x18
// 0.243054
0x1F
// -0.044672
0xFA
// 0.442569
0x39
// 0.182908
0x17
// -0.321149
0xD7
// 0.112511
0x0E
// 0.089014
0x0B
// 0.324131
0x29
// -0.029518
0xFC
// -0.292847
0xDB
// 0.258408
0x21
// 0.037975
0x05
// -0.237231
0xE2
// 0.618003
0x4F
// -0.011458
0xFF
// -0.340842
0xD4
// 0.008505
0x01
// -0.382366
0xCF
// 0.465400
0x3C
// 0.199870
0x1A
// 0.443395
0x39
// -0.106473
0xF2
// 0.279812
0x24
// -1.000000
0x80
// -0.110776
0xF2
// 0.457356
0x3B
// 0.162976
0x15
// 0.176599
0x17

@ -0,0 +1,258 @@
B
128
// -0.120413
0xF1
// -0.306430
0xD9
// 0.141012
0x12
// 0.323935
0x29
// 0.052478
0x07
// -0.272927
0xDD
// -0.165201
0xEB
// 0.230525
0x1E
// 0.819415
0x69
// 0.277844
0x24
// -0.423884
0xCA
// -0.818328
0x97
// 0.509073
0x41
// 0.235254
0x1E
// -0.523386
0xBD
// -0.211462
0xE5
// 1.000000
0x7F
// -0.653171
0xAC
// 0.307768
0x27
// -0.244585
0xE1
// -0.227384
0xE3
// -0.201901
0xE6
// -0.279191
0xDC
// 0.197973
0x19
// 0.119393
0x0F
// 0.572417
0x49
// -0.458330
0xC5
// -0.006716
0xFF
// -0.038290
0xFB
// -0.191395
0xE8
// -0.896764
0x8D
// -0.063956
0xF8
// 0.118303
0x0F
// -0.245872
0xE1
// 0.122321
0x10
// -0.572385
0xB7
// 0.326570
0x2A
// -0.143694
0xEE
// 0.482589
0x3E
// 0.100656
0x0D
// -0.284314
0xDC
// 0.558648
0x48
// -0.004551
0xFF
// -0.056277
0xF9
// 0.378721
0x30
// -0.187829
0xE8
// -0.159058
0xEC
// -0.495795
0xC1
// 0.154959
0x14
// 0.624672
0x50
// 0.032606
0x04
// -0.643605
0xAE
// 0.160847
0x15
// 0.090549
0x0C
// -0.161167
0xEB
// -0.552653
0xB9
// 0.569153
0x49
// 0.624736
0x50
// 0.401394
0x33
// 0.210620
0x1B
// 0.072321
0x09
// 0.594290
0x4C
// 0.312069
0x28
// 0.666673
0x55
// -0.179446
0xE9
// -0.222020
0xE4
// 0.069347
0x09
// 0.422672
0x36
// -0.684138
0xA8
// 0.027729
0x04
// 0.018825
0x02
// 0.561730
0x48
// -0.013999
0xFE
// 0.109890
0x0E
// 0.023354
0x03
// -0.317669
0xD7
// -0.235897
0xE2
// 0.039527
0x05
// -0.656842
0xAC
// 0.209298
0x1B
// -0.151906
0xED
// -0.424351
0xCA
// -0.368316
0xD1
// 0.030864
0x04
// -0.079536
0xF6
// -0.355210
0xD3
// -0.304216
0xD9
// 0.221719
0x1C
// 0.013226
0x02
// 0.315435
0x28
// -0.012486
0xFE
// -0.683202
0xA9
// -0.602063
0xB3
// 0.151425
0x13
// -0.431613
0xC9
// 0.021139
0x03
// 0.047762
0x06
// -0.212165
0xE5
// -0.243753
0xE1
// -0.492893
0xC1
// 0.608039
0x4E
// 0.508024
0x41
// -0.424658
0xCA
// -0.520597
0xBD
// -0.251627
0xE0
// 0.119473
0x0F
// 0.348158
0x2D
// 0.175218
0x16
// -0.218841
0xE4
// 0.009711
0x01
// 0.377798
0x30
// -0.342440
0xD4
// -0.197629
0xE7
// 0.011468
0x01
// -0.243645
0xE1
// -0.876433
0x90
// 0.536360
0x45
// 0.123423
0x10
// -0.312682
0xD8
// 0.167694
0x15
// 0.008276
0x01
// 0.114870
0x0F
// -0.468360
0xC4
// 0.248928
0x20
// -0.385862
0xCF
// 0.039064
0x05
// -0.215304
0xE4
// -0.373208
0xD0

@ -0,0 +1,10 @@
B
4
// 0.122213
0x10
// -0.213673
0xE5
// -0.207990
0xE5
// -0.119007
0xF1

@ -0,0 +1,10 @@
B
4
// -0.130510
0xEF
// -0.092868
0xF4
// -0.129728
0xEF
// 0.182610
0x17

@ -0,0 +1,10 @@
B
4
// 0.303604
0x27
// 0.160264
0x15
// -0.130510
0xEF
// -0.092868
0xF4

@ -18,7 +18,7 @@ a double precision computation.
For tests of the error value of the Levinson Durbin algorithm For tests of the error value of the Levinson Durbin algorithm
*/ */
#define SNR_LD_THRESHOLD 57 #define SNR_LD_THRESHOLD 52
#define REL_LD_ERROR (1.0e-3) #define REL_LD_ERROR (1.0e-3)
#define ABS_LD_ERROR (1.0e-3) #define ABS_LD_ERROR (1.0e-3)
@ -74,6 +74,8 @@ For tests of the error value of the Levinson Durbin algorithm
} }
*/ */
void MISCF16::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr) void MISCF16::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
{ {

@ -73,6 +73,33 @@ For tests of the error value of the Levinson Durbin algorithm
} }
// This value must be coherent with the Python script
// generating the test patterns
#define NBPOINTS 4
void MISCF32::test_conv_partial_f32()
{
const float32_t *inpA=inputA.ptr();
const float32_t *inpB=inputB.ptr();
float32_t *outp=output.ptr();
float32_t *tmpp=tmp.ptr();
arm_status status=arm_conv_partial_f32(inpA, inputA.nbSamples(),
inpB, inputB.nbSamples(),
outp,
this->first,
NBPOINTS);
memcpy((void*)tmpp,(void*)&outp[this->first],NBPOINTS*sizeof(float32_t));
ASSERT_TRUE(status==ARM_MATH_SUCCESS);
ASSERT_SNR(ref,tmp,(float32_t)SNR_THRESHOLD);
ASSERT_CLOSE_ERROR(ref,tmp,ABS_ERROR,REL_ERROR);
}
void MISCF32::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr) void MISCF32::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
@ -754,15 +781,51 @@ For tests of the error value of the Levinson Durbin algorithm
} }
break; break;
case MISCF32::TEST_CONV_PARTIAL_F32_84:
{
this->first=3;
this->nba = 6;
this->nbb = 8;
ref.reload(MISCF32::REF84_F32_ID,mgr);
tmp.create(ref.nbSamples(),MISCF32::TMP_F32_ID,mgr);
}
case MISCF32::TEST_CONV_PARTIAL_F32_85:
{
this->first=9;
this->nba = 6;
this->nbb = 8;
ref.reload(MISCF32::REF85_F32_ID,mgr);
tmp.create(ref.nbSamples(),MISCF32::TMP_F32_ID,mgr);
}
case MISCF32::TEST_CONV_PARTIAL_F32_86:
{
this->first=7;
this->nba = 6;
this->nbb = 8;
ref.reload(MISCF32::REF86_F32_ID,mgr);
tmp.create(ref.nbSamples(),MISCF32::TMP_F32_ID,mgr);
}
} }
if (id < TEST_LEVINSON_DURBIN_F32_81) if (id < TEST_LEVINSON_DURBIN_F32_81)
{ {
inputA.reload(MISCF32::INPUTA_F32_ID,mgr,nba); inputA.reload(MISCF32::INPUTA_F32_ID,mgr,nba);
inputB.reload(MISCF32::INPUTB_F32_ID,mgr,nbb); inputB.reload(MISCF32::INPUTB_F32_ID,mgr,nbb);
} }
if (id > TEST_LEVINSON_DURBIN_F32_83)
{
inputA.reload(MISCF32::INPUTA2_F32_ID,mgr,nba);
inputB.reload(MISCF32::INPUTB2_F32_ID,mgr,nbb);
}
output.create(ref.nbSamples(),MISCF32::OUT_F32_ID,mgr); output.create(ref.nbSamples(),MISCF32::OUT_F32_ID,mgr);
} }

@ -14,6 +14,9 @@ a double precision computation.
*/ */
#define ABS_ERROR_Q15 ((q15_t)10) #define ABS_ERROR_Q15 ((q15_t)10)
#define ABS_ERROR_FAST_Q15 ((q15_t)20)
void MISCQ15::test_correlate_q15() void MISCQ15::test_correlate_q15()
{ {
const q15_t *inpA=inputA.ptr(); const q15_t *inpA=inputA.ptr();
@ -44,6 +47,114 @@ a double precision computation.
} }
// This value must be coherent with the Python script
// generating the test patterns
#define NBPOINTS 4
void MISCQ15::test_conv_partial_q15()
{
const q15_t *inpA=inputA.ptr();
const q15_t *inpB=inputB.ptr();
q15_t *outp=output.ptr();
q15_t *tmpp=tmp.ptr();
arm_status status=arm_conv_partial_q15(inpA, inputA.nbSamples(),
inpB, inputB.nbSamples(),
outp,
this->first,
NBPOINTS);
memcpy((void*)tmpp,(void*)&outp[this->first],NBPOINTS*sizeof(q15_t));
ASSERT_TRUE(status==ARM_MATH_SUCCESS);
ASSERT_SNR(ref,tmp,(q15_t)SNR_THRESHOLD);
ASSERT_NEAR_EQ(ref,tmp,ABS_ERROR_Q15);
}
void MISCQ15::test_conv_partial_fast_q15()
{
const q15_t *inpA=inputA.ptr();
const q15_t *inpB=inputB.ptr();
q15_t *outp=output.ptr();
q15_t *tmpp=tmp.ptr();
arm_status status=arm_conv_partial_fast_q15(inpA, inputA.nbSamples(),
inpB, inputB.nbSamples(),
outp,
this->first,
NBPOINTS);
memcpy((void*)tmpp,(void*)&outp[this->first],NBPOINTS*sizeof(q15_t));
ASSERT_TRUE(status==ARM_MATH_SUCCESS);
ASSERT_SNR(ref,tmp,(q15_t)SNR_THRESHOLD);
ASSERT_NEAR_EQ(ref,tmp,ABS_ERROR_FAST_Q15);
}
void MISCQ15::test_conv_partial_opt_q15()
{
const q15_t *inpA=inputA.ptr();
const q15_t *inpB=inputB.ptr();
q15_t *outp=output.ptr();
q15_t *tmpp=tmp.ptr();
q15_t *scratchAp=scratchA.ptr();
q15_t *scratchBp=scratchB.ptr();
arm_status status=arm_conv_partial_opt_q15(inpA, inputA.nbSamples(),
inpB, inputB.nbSamples(),
outp,
this->first,
NBPOINTS,
scratchAp,
scratchBp
);
memcpy((void*)tmpp,(void*)&outp[this->first],NBPOINTS*sizeof(q15_t));
ASSERT_TRUE(status==ARM_MATH_SUCCESS);
ASSERT_SNR(ref,tmp,(q15_t)SNR_THRESHOLD);
ASSERT_NEAR_EQ(ref,tmp,ABS_ERROR_FAST_Q15);
}
void MISCQ15::test_conv_partial_fast_opt_q15()
{
const q15_t *inpA=inputA.ptr();
const q15_t *inpB=inputB.ptr();
q15_t *outp=output.ptr();
q15_t *tmpp=tmp.ptr();
q15_t *scratchAp=scratchA.ptr();
q15_t *scratchBp=scratchB.ptr();
arm_status status=arm_conv_partial_fast_opt_q15(inpA, inputA.nbSamples(),
inpB, inputB.nbSamples(),
outp,
this->first,
NBPOINTS,
scratchAp,
scratchBp);
memcpy((void*)tmpp,(void*)&outp[this->first],NBPOINTS*sizeof(q15_t));
ASSERT_TRUE(status==ARM_MATH_SUCCESS);
ASSERT_SNR(ref,tmp,(q15_t)SNR_THRESHOLD);
ASSERT_NEAR_EQ(ref,tmp,ABS_ERROR_FAST_Q15);
}
void MISCQ15::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr) void MISCQ15::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
@ -452,11 +563,69 @@ a double precision computation.
} }
break; break;
case MISCQ15::TEST_CONV_PARTIAL_Q15_51:
case MISCQ15::TEST_CONV_PARTIAL_FAST_Q15_54:
case MISCQ15::TEST_CONV_PARTIAL_OPT_Q15_57:
case MISCQ15::TEST_CONV_PARTIAL_FAST_OPT_Q15_60:
{
this->first=3;
this->nba = 6;
this->nbb = 8;
ref.reload(MISCQ15::REF54_Q15_ID,mgr);
tmp.create(ref.nbSamples(),MISCQ15::TMP_Q15_ID,mgr);
// Oversized and not used except in opt case
scratchA.create(24,MISCQ15::SCRATCH1_Q15_ID,mgr);
scratchB.create(24,MISCQ15::SCRATCH2_Q15_ID,mgr);
}
case MISCQ15::TEST_CONV_PARTIAL_Q15_52:
case MISCQ15::TEST_CONV_PARTIAL_FAST_Q15_55:
case MISCQ15::TEST_CONV_PARTIAL_OPT_Q15_58:
case MISCQ15::TEST_CONV_PARTIAL_FAST_OPT_Q15_61:
{
this->first=9;
this->nba = 6;
this->nbb = 8;
ref.reload(MISCQ15::REF55_Q15_ID,mgr);
tmp.create(ref.nbSamples(),MISCQ15::TMP_Q15_ID,mgr);
// Oversized and not used except in opt case
scratchA.create(24,MISCQ15::SCRATCH1_Q15_ID,mgr);
scratchB.create(24,MISCQ15::SCRATCH2_Q15_ID,mgr);
}
case MISCQ15::TEST_CONV_PARTIAL_Q15_53:
case MISCQ15::TEST_CONV_PARTIAL_FAST_Q15_56:
case MISCQ15::TEST_CONV_PARTIAL_OPT_Q15_59:
case MISCQ15::TEST_CONV_PARTIAL_FAST_OPT_Q15_62:
{
this->first=7;
this->nba = 6;
this->nbb = 8;
ref.reload(MISCQ15::REF56_Q15_ID,mgr);
tmp.create(ref.nbSamples(),MISCQ15::TMP_Q15_ID,mgr);
// Oversized and not used except in opt case
scratchA.create(24,MISCQ15::SCRATCH1_Q15_ID,mgr);
scratchB.create(24,MISCQ15::SCRATCH2_Q15_ID,mgr);
}
} }
inputA.reload(MISCQ15::INPUTA_Q15_ID,mgr,nba); if (id >= MISCQ15::TEST_CONV_PARTIAL_Q15_51)
inputB.reload(MISCQ15::INPUTB_Q15_ID,mgr,nbb); {
inputA.reload(MISCQ15::INPUTA2_Q15_ID,mgr,nba);
inputB.reload(MISCQ15::INPUTB2_Q15_ID,mgr,nbb);
}
else
{
inputA.reload(MISCQ15::INPUTA_Q15_ID,mgr,nba);
inputB.reload(MISCQ15::INPUTB_Q15_ID,mgr,nbb);
}
output.create(ref.nbSamples(),MISCQ15::OUT_Q15_ID,mgr); output.create(ref.nbSamples(),MISCQ15::OUT_Q15_ID,mgr);

@ -14,6 +14,9 @@ a double precision computation.
*/ */
#define ABS_ERROR_Q31 ((q31_t)2) #define ABS_ERROR_Q31 ((q31_t)2)
#define ABS_ERROR_FAST_Q31 ((q31_t)6)
/* /*
For tests of the error value of the Levinson Durbin algorithm For tests of the error value of the Levinson Durbin algorithm
@ -72,6 +75,56 @@ For tests of the error value of the Levinson Durbin algorithm
} }
// This value must be coherent with the Python script
// generating the test patterns
#define NBPOINTS 4
void MISCQ31::test_conv_partial_q31()
{
const q31_t *inpA=inputA.ptr();
const q31_t *inpB=inputB.ptr();
q31_t *outp=output.ptr();
q31_t *tmpp=tmp.ptr();
arm_status status=arm_conv_partial_q31(inpA, inputA.nbSamples(),
inpB, inputB.nbSamples(),
outp,
this->first,
NBPOINTS);
memcpy((void*)tmpp,(void*)&outp[this->first],NBPOINTS*sizeof(q31_t));
ASSERT_TRUE(status==ARM_MATH_SUCCESS);
ASSERT_SNR(ref,tmp,(q31_t)SNR_THRESHOLD);
ASSERT_NEAR_EQ(ref,tmp,ABS_ERROR_Q31);
}
void MISCQ31::test_conv_partial_fast_q31()
{
const q31_t *inpA=inputA.ptr();
const q31_t *inpB=inputB.ptr();
q31_t *outp=output.ptr();
q31_t *tmpp=tmp.ptr();
arm_status status=arm_conv_partial_fast_q31(inpA, inputA.nbSamples(),
inpB, inputB.nbSamples(),
outp,
this->first,
NBPOINTS);
memcpy((void*)tmpp,(void*)&outp[this->first],NBPOINTS*sizeof(q31_t));
ASSERT_TRUE(status==ARM_MATH_SUCCESS);
ASSERT_SNR(ref,tmp,(q31_t)SNR_THRESHOLD);
ASSERT_NEAR_EQ(ref,tmp,ABS_ERROR_FAST_Q31);
}
void MISCQ31::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr) void MISCQ31::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
@ -754,6 +807,39 @@ For tests of the error value of the Levinson Durbin algorithm
} }
break; break;
case MISCQ31::TEST_CONV_PARTIAL_Q31_84:
case MISCQ31::TEST_CONV_PARTIAL_FAST_Q31_87:
{
this->first=3;
this->nba = 6;
this->nbb = 8;
ref.reload(MISCQ31::REF84_Q31_ID,mgr);
tmp.create(ref.nbSamples(),MISCQ31::TMP_Q31_ID,mgr);
}
case MISCQ31::TEST_CONV_PARTIAL_Q31_85:
case MISCQ31::TEST_CONV_PARTIAL_FAST_Q31_88:
{
this->first=9;
this->nba = 6;
this->nbb = 8;
ref.reload(MISCQ31::REF85_Q31_ID,mgr);
tmp.create(ref.nbSamples(),MISCQ31::TMP_Q31_ID,mgr);
}
case MISCQ31::TEST_CONV_PARTIAL_Q31_86:
case MISCQ31::TEST_CONV_PARTIAL_FAST_Q31_89:
{
this->first=7;
this->nba = 6;
this->nbb = 8;
ref.reload(MISCQ31::REF86_Q31_ID,mgr);
tmp.create(ref.nbSamples(),MISCQ31::TMP_Q31_ID,mgr);
}
} }
if (id < TEST_LEVINSON_DURBIN_Q31_81) if (id < TEST_LEVINSON_DURBIN_Q31_81)
@ -762,6 +848,12 @@ For tests of the error value of the Levinson Durbin algorithm
inputB.reload(MISCQ31::INPUTB_Q31_ID,mgr,nbb); inputB.reload(MISCQ31::INPUTB_Q31_ID,mgr,nbb);
} }
if (id > TEST_LEVINSON_DURBIN_Q31_83)
{
inputA.reload(MISCQ31::INPUTA2_Q31_ID,mgr,nba);
inputB.reload(MISCQ31::INPUTB2_Q31_ID,mgr,nbb);
}
output.create(ref.nbSamples(),MISCQ31::OUT_Q31_ID,mgr); output.create(ref.nbSamples(),MISCQ31::OUT_Q31_ID,mgr);
} }

@ -13,6 +13,7 @@ a double precision computation.
*/ */
#define ABS_ERROR_Q7 ((q7_t)5) #define ABS_ERROR_Q7 ((q7_t)5)
#define ABS_ERROR_FAST_Q7 ((q7_t)5)
void MISCQ7::test_correlate_q7() void MISCQ7::test_correlate_q7()
{ {
@ -44,6 +45,62 @@ a double precision computation.
} }
// This value must be coherent with the Python script
// generating the test patterns
#define NBPOINTS 4
void MISCQ7::test_conv_partial_q7()
{
const q7_t *inpA=inputA.ptr();
const q7_t *inpB=inputB.ptr();
q7_t *outp=output.ptr();
q7_t *tmpp=tmp.ptr();
arm_status status=arm_conv_partial_q7(inpA, inputA.nbSamples(),
inpB, inputB.nbSamples(),
outp,
this->first,
NBPOINTS);
memcpy((void*)tmpp,(void*)&outp[this->first],NBPOINTS*sizeof(q7_t));
ASSERT_TRUE(status==ARM_MATH_SUCCESS);
ASSERT_SNR(ref,tmp,(q7_t)SNR_THRESHOLD);
ASSERT_NEAR_EQ(ref,tmp,ABS_ERROR_Q7);
}
void MISCQ7::test_conv_partial_opt_q7()
{
const q7_t *inpA=inputA.ptr();
const q7_t *inpB=inputB.ptr();
q7_t *outp=output.ptr();
q7_t *tmpp=tmp.ptr();
q15_t *scratchAp=scratchA.ptr();
q15_t *scratchBp=scratchB.ptr();
arm_status status=arm_conv_partial_opt_q7(inpA, inputA.nbSamples(),
inpB, inputB.nbSamples(),
outp,
this->first,
NBPOINTS,
scratchAp,
scratchBp
);
memcpy((void*)tmpp,(void*)&outp[this->first],NBPOINTS*sizeof(q7_t));
ASSERT_TRUE(status==ARM_MATH_SUCCESS);
ASSERT_SNR(ref,tmp,(q7_t)SNR_THRESHOLD);
ASSERT_NEAR_EQ(ref,tmp,ABS_ERROR_FAST_Q7);
}
void MISCQ7::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr) void MISCQ7::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
@ -453,11 +510,63 @@ a double precision computation.
} }
break; break;
case MISCQ7::TEST_CONV_PARTIAL_Q7_51:
case MISCQ7::TEST_CONV_PARTIAL_OPT_Q7_54:
{
this->first=3;
this->nba = 6;
this->nbb = 8;
ref.reload(MISCQ7::REF54_Q7_ID,mgr);
tmp.create(ref.nbSamples(),MISCQ7::TMP_Q7_ID,mgr);
// Oversized and not used except in opt case
scratchA.create(24,MISCQ7::SCRATCH1_Q15_ID,mgr);
scratchB.create(24,MISCQ7::SCRATCH2_Q15_ID,mgr);
}
case MISCQ7::TEST_CONV_PARTIAL_Q7_52:
case MISCQ7::TEST_CONV_PARTIAL_OPT_Q7_55:
{
this->first=9;
this->nba = 6;
this->nbb = 8;
ref.reload(MISCQ7::REF55_Q7_ID,mgr);
tmp.create(ref.nbSamples(),MISCQ7::TMP_Q7_ID,mgr);
// Oversized and not used except in opt case
scratchA.create(24,MISCQ7::SCRATCH1_Q15_ID,mgr);
scratchB.create(24,MISCQ7::SCRATCH2_Q15_ID,mgr);
}
case MISCQ7::TEST_CONV_PARTIAL_Q7_53:
case MISCQ7::TEST_CONV_PARTIAL_OPT_Q7_56:
{
this->first=7;
this->nba = 6;
this->nbb = 8;
ref.reload(MISCQ7::REF56_Q7_ID,mgr);
tmp.create(ref.nbSamples(),MISCQ7::TMP_Q7_ID,mgr);
// Oversized and not used except in opt case
scratchA.create(24,MISCQ7::SCRATCH1_Q15_ID,mgr);
scratchB.create(24,MISCQ7::SCRATCH2_Q15_ID,mgr);
}
} }
inputA.reload(MISCQ7::INPUTA_Q7_ID,mgr,nba); if (id >= MISCQ7::TEST_CONV_PARTIAL_Q7_51)
inputB.reload(MISCQ7::INPUTB_Q7_ID,mgr,nbb); {
inputA.reload(MISCQ7::INPUTA2_Q7_ID,mgr,nba);
inputB.reload(MISCQ7::INPUTB2_Q7_ID,mgr,nbb);
}
else
{
inputA.reload(MISCQ7::INPUTA_Q7_ID,mgr,nba);
inputB.reload(MISCQ7::INPUTB_Q7_ID,mgr,nbb);
}
output.create(ref.nbSamples(),MISCQ7::OUT_Q7_ID,mgr); output.create(ref.nbSamples(),MISCQ7::OUT_Q7_ID,mgr);

@ -1607,6 +1607,9 @@ group Root {
Pattern INPUTA_F32_ID : InputsA1_f32.txt Pattern INPUTA_F32_ID : InputsA1_f32.txt
Pattern INPUTB_F32_ID : InputsB1_f32.txt Pattern INPUTB_F32_ID : InputsB1_f32.txt
Pattern INPUTA2_F32_ID : InputsA2_f32.txt
Pattern INPUTB2_F32_ID : InputsB2_f32.txt
Pattern INPUTPHI_A_F32_ID : InputPhi81_f32.txt Pattern INPUTPHI_A_F32_ID : InputPhi81_f32.txt
Pattern INPUTPHI_B_F32_ID : InputPhi82_f32.txt Pattern INPUTPHI_B_F32_ID : InputPhi82_f32.txt
Pattern INPUTPHI_C_F32_ID : InputPhi83_f32.txt Pattern INPUTPHI_C_F32_ID : InputPhi83_f32.txt
@ -1697,6 +1700,10 @@ group Root {
Pattern REF82_F32_ID : Reference82_f32.txt Pattern REF82_F32_ID : Reference82_f32.txt
Pattern REF83_F32_ID : Reference83_f32.txt Pattern REF83_F32_ID : Reference83_f32.txt
Pattern REF84_F32_ID : Reference84_f32.txt
Pattern REF85_F32_ID : Reference85_f32.txt
Pattern REF86_F32_ID : Reference86_f32.txt
Output OUT_F32_ID : Output Output OUT_F32_ID : Output
Output TMP_F32_ID : Temp Output TMP_F32_ID : Temp
@ -1785,6 +1792,9 @@ group Root {
arm_levinson_durbin_f32 n=3:test_levinson_durbin_f32 arm_levinson_durbin_f32 n=3:test_levinson_durbin_f32
arm_levinson_durbin_f32 n=8:test_levinson_durbin_f32 arm_levinson_durbin_f32 n=8:test_levinson_durbin_f32
arm_levinson_durbin_f32 n=11:test_levinson_durbin_f32 arm_levinson_durbin_f32 n=11:test_levinson_durbin_f32
arm_conv_partial_f32 nba=6 nbb=8 first=3:test_conv_partial_f32
arm_conv_partial_f32 nba=6 nbb=8 first=9:test_conv_partial_f32
arm_conv_partial_f32 nba=6 nbb=8 first=7:test_conv_partial_f32
} }
} }
@ -1796,6 +1806,9 @@ group Root {
Pattern INPUTA_Q31_ID : InputsA1_q31.txt Pattern INPUTA_Q31_ID : InputsA1_q31.txt
Pattern INPUTB_Q31_ID : InputsB1_q31.txt Pattern INPUTB_Q31_ID : InputsB1_q31.txt
Pattern INPUTA2_Q31_ID : InputsA2_q31.txt
Pattern INPUTB2_Q31_ID : InputsB2_q31.txt
Pattern INPUTPHI_A_Q31_ID : InputPhi81_q31.txt Pattern INPUTPHI_A_Q31_ID : InputPhi81_q31.txt
Pattern INPUTPHI_B_Q31_ID : InputPhi82_q31.txt Pattern INPUTPHI_B_Q31_ID : InputPhi82_q31.txt
Pattern INPUTPHI_C_Q31_ID : InputPhi83_q31.txt Pattern INPUTPHI_C_Q31_ID : InputPhi83_q31.txt
@ -1886,8 +1899,13 @@ group Root {
Pattern REF82_Q31_ID : Reference82_q31.txt Pattern REF82_Q31_ID : Reference82_q31.txt
Pattern REF83_Q31_ID : Reference83_q31.txt Pattern REF83_Q31_ID : Reference83_q31.txt
Pattern REF84_Q31_ID : Reference84_q31.txt
Pattern REF85_Q31_ID : Reference85_q31.txt
Pattern REF86_Q31_ID : Reference86_q31.txt
Output OUT_Q31_ID : Output Output OUT_Q31_ID : Output
Output TMP_Q31_ID : Temp
Functions { Functions {
arm_correlate_q31 nba=4 nbb=1:test_correlate_q31 arm_correlate_q31 nba=4 nbb=1:test_correlate_q31
@ -1973,6 +1991,12 @@ group Root {
arm_levinson_durbin_q31 n=3:test_levinson_durbin_q31 arm_levinson_durbin_q31 n=3:test_levinson_durbin_q31
arm_levinson_durbin_q31 n=8:test_levinson_durbin_q31 arm_levinson_durbin_q31 n=8:test_levinson_durbin_q31
arm_levinson_durbin_q31 n=11:test_levinson_durbin_q31 arm_levinson_durbin_q31 n=11:test_levinson_durbin_q31
arm_conv_partial_q31 nba=6 nbb=8 first=3:test_conv_partial_q31
arm_conv_partial_q31 nba=6 nbb=8 first=9:test_conv_partial_q31
arm_conv_partial_q31 nba=6 nbb=8 first=7:test_conv_partial_q31
arm_conv_partial_fast_q31 nba=6 nbb=8 first=3:test_conv_partial_fast_q31
arm_conv_partial_fast_q31 nba=6 nbb=8 first=9:test_conv_partial_fast_q31
arm_conv_partial_fast_q31 nba=6 nbb=8 first=7:test_conv_partial_fast_q31
} }
} }
@ -1984,6 +2008,9 @@ group Root {
Pattern INPUTA_Q15_ID : InputsA1_q15.txt Pattern INPUTA_Q15_ID : InputsA1_q15.txt
Pattern INPUTB_Q15_ID : InputsB1_q15.txt Pattern INPUTB_Q15_ID : InputsB1_q15.txt
Pattern INPUTA2_Q15_ID : InputsA2_q15.txt
Pattern INPUTB2_Q15_ID : InputsB2_q15.txt
Pattern REF1_Q15_ID : Reference1_q15.txt Pattern REF1_Q15_ID : Reference1_q15.txt
Pattern REF2_Q15_ID : Reference2_q15.txt Pattern REF2_Q15_ID : Reference2_q15.txt
Pattern REF3_Q15_ID : Reference3_q15.txt Pattern REF3_Q15_ID : Reference3_q15.txt
@ -2035,8 +2062,15 @@ group Root {
Pattern REF49_Q15_ID : Reference49_q15.txt Pattern REF49_Q15_ID : Reference49_q15.txt
Pattern REF50_Q15_ID : Reference50_q15.txt Pattern REF50_Q15_ID : Reference50_q15.txt
Pattern REF54_Q15_ID : Reference54_q15.txt
Pattern REF55_Q15_ID : Reference55_q15.txt
Pattern REF56_Q15_ID : Reference56_q15.txt
Output OUT_Q15_ID : Output Output OUT_Q15_ID : Output
Output TMP_Q15_ID : Temp
Output SCRATCH1_Q15_ID : Scratch1
Output SCRATCH2_Q15_ID : Scratch2
Functions { Functions {
arm_correlate_q15 nba=14 nbb=15:test_correlate_q15 arm_correlate_q15 nba=14 nbb=15:test_correlate_q15
@ -2089,6 +2123,18 @@ group Root {
arm_conv_q15 nba=32 nbb=17:test_conv_q15 arm_conv_q15 nba=32 nbb=17:test_conv_q15
arm_conv_q15 nba=32 nbb=18:test_conv_q15 arm_conv_q15 nba=32 nbb=18:test_conv_q15
arm_conv_q15 nba=32 nbb=33:test_conv_q15 arm_conv_q15 nba=32 nbb=33:test_conv_q15
arm_conv_partial_q15 nba=6 nbb=8 first=3:test_conv_partial_q15
arm_conv_partial_q15 nba=6 nbb=8 first=9:test_conv_partial_q15
arm_conv_partial_q15 nba=6 nbb=8 first=7:test_conv_partial_q15
arm_conv_partial_fast_q15 nba=6 nbb=8 first=3:test_conv_partial_fast_q15
arm_conv_partial_fast_q15 nba=6 nbb=8 first=9:test_conv_partial_fast_q15
arm_conv_partial_fast_q15 nba=6 nbb=8 first=7:test_conv_partial_fast_q15
arm_conv_partial_opt_q15 nba=6 nbb=8 first=3:test_conv_partial_opt_q15
arm_conv_partial_opt_q15 nba=6 nbb=8 first=9:test_conv_partial_opt_q15
arm_conv_partial_opt_q15 nba=6 nbb=8 first=7:test_conv_partial_opt_q15
arm_conv_partial_fast_opt_q15 nba=6 nbb=8 first=3:test_conv_partial_fast_opt_q15
arm_conv_partial_fast_opt_q15 nba=6 nbb=8 first=9:test_conv_partial_fast_opt_q15
arm_conv_partial_fast_opt_q15 nba=6 nbb=8 first=7:test_conv_partial_fast_opt_q15
} }
} }
@ -2100,6 +2146,9 @@ group Root {
Pattern INPUTA_Q7_ID : InputsA1_q7.txt Pattern INPUTA_Q7_ID : InputsA1_q7.txt
Pattern INPUTB_Q7_ID : InputsB1_q7.txt Pattern INPUTB_Q7_ID : InputsB1_q7.txt
Pattern INPUTA2_Q7_ID : InputsA2_q7.txt
Pattern INPUTB2_Q7_ID : InputsB2_q7.txt
Pattern REF1_Q7_ID : Reference1_q7.txt Pattern REF1_Q7_ID : Reference1_q7.txt
Pattern REF2_Q7_ID : Reference2_q7.txt Pattern REF2_Q7_ID : Reference2_q7.txt
Pattern REF3_Q7_ID : Reference3_q7.txt Pattern REF3_Q7_ID : Reference3_q7.txt
@ -2151,8 +2200,15 @@ group Root {
Pattern REF49_Q7_ID : Reference49_q7.txt Pattern REF49_Q7_ID : Reference49_q7.txt
Pattern REF50_Q7_ID : Reference50_q7.txt Pattern REF50_Q7_ID : Reference50_q7.txt
Pattern REF54_Q7_ID : Reference54_q7.txt
Pattern REF55_Q7_ID : Reference55_q7.txt
Pattern REF56_Q7_ID : Reference56_q7.txt
Output OUT_Q7_ID : Output Output OUT_Q7_ID : Output
Output TMP_Q7_ID : Temp
Output SCRATCH1_Q15_ID : Scratch1
Output SCRATCH2_Q15_ID : Scratch2
Functions { Functions {
arm_correlate_q7 nba=30 nbb=31:test_correlate_q7 arm_correlate_q7 nba=30 nbb=31:test_correlate_q7
@ -2205,6 +2261,12 @@ group Root {
arm_conv_q7 nba=48 nbb=33:test_conv_q7 arm_conv_q7 nba=48 nbb=33:test_conv_q7
arm_conv_q7 nba=48 nbb=34:test_conv_q7 arm_conv_q7 nba=48 nbb=34:test_conv_q7
arm_conv_q7 nba=48 nbb=49:test_conv_q7 arm_conv_q7 nba=48 nbb=49:test_conv_q7
arm_conv_partial_q7 nba=6 nbb=8 first=3:test_conv_partial_q7
arm_conv_partial_q7 nba=6 nbb=8 first=9:test_conv_partial_q7
arm_conv_partial_q7 nba=6 nbb=8 first=7:test_conv_partial_q7
arm_conv_partial_opt_q7 nba=6 nbb=8 first=3:test_conv_partial_opt_q7
arm_conv_partial_opt_q7 nba=6 nbb=8 first=9:test_conv_partial_opt_q7
arm_conv_partial_opt_q7 nba=6 nbb=8 first=7:test_conv_partial_opt_q7
} }
} }

@ -519,6 +519,9 @@ group Root {
Pattern INPUTA_F16_ID : InputsA1_f16.txt Pattern INPUTA_F16_ID : InputsA1_f16.txt
Pattern INPUTB_F16_ID : InputsB1_f16.txt Pattern INPUTB_F16_ID : InputsB1_f16.txt
Pattern INPUTA2_F16_ID : InputsA2_f16.txt
Pattern INPUTB2_F16_ID : InputsB2_f16.txt
Pattern INPUTPHI_A_F16_ID : InputPhi81_f16.txt Pattern INPUTPHI_A_F16_ID : InputPhi81_f16.txt
Pattern INPUTPHI_B_F16_ID : InputPhi82_f16.txt Pattern INPUTPHI_B_F16_ID : InputPhi82_f16.txt
Pattern INPUTPHI_C_F16_ID : InputPhi83_f16.txt Pattern INPUTPHI_C_F16_ID : InputPhi83_f16.txt
@ -609,6 +612,10 @@ group Root {
Pattern REF82_F16_ID : Reference82_f16.txt Pattern REF82_F16_ID : Reference82_f16.txt
Pattern REF83_F16_ID : Reference83_f16.txt Pattern REF83_F16_ID : Reference83_f16.txt
Pattern REF84_F16_ID : Reference84_f16.txt
Pattern REF85_F16_ID : Reference85_f16.txt
Pattern REF86_F16_ID : Reference86_f16.txt
Output OUT_F16_ID : Output Output OUT_F16_ID : Output
Output TMP_F16_ID : Temp Output TMP_F16_ID : Temp

Loading…
Cancel
Save