| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416 |
- #include "DistanceTestsF32.h"
- #include <stdio.h>
- #include "Error.h"
- #include "Test.h"
- void DistanceTestsF32::test_dtw_distance_f32()
- {
- const float32_t *inpA = inputA.ptr();
- const float32_t *inpB = inputB.ptr();
- arm_matrix_instance_f32 distances;
- arm_matrix_instance_f32 costs;
- arm_matrix_instance_q7 window;
- distances.numRows=this->queryLength;
- distances.numCols=this->templateLength;
- distances.pData = tmpA.ptr();
- costs.numRows=this->queryLength;
- costs.numCols=this->templateLength;
- costs.pData = tmpB.ptr();
- window.numRows=this->queryLength;
- window.numCols=this->templateLength;
- window.pData = tmpC.ptr();
- float32_t *outp = output.ptr();
- int16_t *outPathp = outPath.ptr();
- uint32_t pathLength;
-
- for(int i=0; i < this->nbPatterns ; i ++)
- {
- float32_t *c = distances.pData;
- for(int q=0; q < this->queryLength; q++)
- {
- for(int t=0; t < this->templateLength; t++)
- {
- *c = fabs(inpA[q] - inpB[t]);
- c++;
- }
- }
-
- arm_status status = arm_dtw_distance_f32(&distances, NULL,&costs,outp);
- outp++;
- ASSERT_TRUE(status == ARM_MATH_SUCCESS);
- arm_dtw_path_f32(&costs,outPathp,&pathLength);
- /* ARM_DTW_SAKOE_CHIBA_WINDOW 5*/
- status = arm_dtw_init_window_q7(ARM_DTW_SAKOE_CHIBA_WINDOW,5,&window);
- ASSERT_TRUE(status == ARM_MATH_SUCCESS);
- c = distances.pData;
- for(int q=0; q < this->queryLength; q++)
- {
- for(int t=0; t < this->templateLength; t++)
- {
- /* Distance does not have
- to be computed outside of
- the window */
- if (window.pData[q*this->templateLength+t])
- {
- *c = fabs(inpA[q] - inpB[t]);
- }
- c++;
- }
- }
- status = arm_dtw_distance_f32(&distances, &window,&costs,outp);
- ASSERT_TRUE(status == ARM_MATH_SUCCESS);
- outp++;
- /* ARM_DTW_SAKOE_CHIBA_WINDOW 3 */
- status = arm_dtw_init_window_q7(ARM_DTW_SAKOE_CHIBA_WINDOW,3,&window);
- ASSERT_TRUE(status == ARM_MATH_SUCCESS);
- status = arm_dtw_distance_f32(&distances, &window,&costs,outp);
- ASSERT_TRUE(status == ARM_MATH_ARGUMENT_ERROR);
- /* ARM_DTW_SLANTED_BAND_WINDOW 1*/
- status = arm_dtw_init_window_q7(ARM_DTW_SLANTED_BAND_WINDOW,1,&window);
- ASSERT_TRUE(status == ARM_MATH_SUCCESS);
- /* Here again we could compute the distance matrix
- only on a subset */
- status = arm_dtw_distance_f32(&distances, &window,&costs,outp);
- ASSERT_TRUE(status == ARM_MATH_SUCCESS);
- outp++;
-
- inpA += this->queryLength;
- inpB += this->templateLength;
- outPathp += 2*pathLength;
- }
- ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
- ASSERT_EQ_PARTIAL(2*pathLength,outPath,refPath);
- }
- void DistanceTestsF32::test_braycurtis_distance_f32()
- {
- const float32_t *inpA = inputA.ptr();
- const float32_t *inpB = inputB.ptr();
- float32_t *outp = output.ptr();
-
- for(int i=0; i < this->nbPatterns ; i ++)
- {
- *outp = arm_braycurtis_distance_f32(inpA, inpB, this->vecDim);
-
- inpA += this->vecDim;
- inpB += this->vecDim;
- outp ++;
- }
- ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
- }
-
- void DistanceTestsF32::test_canberra_distance_f32()
- {
- const float32_t *inpA = inputA.ptr();
- const float32_t *inpB = inputB.ptr();
- float32_t *outp = output.ptr();
-
- for(int i=0; i < this->nbPatterns ; i ++)
- {
- *outp = arm_canberra_distance_f32(inpA, inpB, this->vecDim);
-
- inpA += this->vecDim;
- inpB += this->vecDim;
- outp ++;
- }
- ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
- }
- void DistanceTestsF32::test_chebyshev_distance_f32()
- {
- const float32_t *inpA = inputA.ptr();
- const float32_t *inpB = inputB.ptr();
- float32_t *outp = output.ptr();
-
- for(int i=0; i < this->nbPatterns ; i ++)
- {
- *outp = arm_chebyshev_distance_f32(inpA, inpB, this->vecDim);
-
- inpA += this->vecDim;
- inpB += this->vecDim;
- outp ++;
- }
- ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
- }
- void DistanceTestsF32::test_cityblock_distance_f32()
- {
- const float32_t *inpA = inputA.ptr();
- const float32_t *inpB = inputB.ptr();
- float32_t *outp = output.ptr();
-
- for(int i=0; i < this->nbPatterns ; i ++)
- {
- *outp = arm_cityblock_distance_f32(inpA, inpB, this->vecDim);
-
- inpA += this->vecDim;
- inpB += this->vecDim;
- outp ++;
- }
- ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
- }
- void DistanceTestsF32::test_correlation_distance_f32()
- {
- const float32_t *inpA = inputA.ptr();
- const float32_t *inpB = inputB.ptr();
- float32_t *tmpap = tmpA.ptr();
- float32_t *tmpbp = tmpB.ptr();
- float32_t *outp = output.ptr();
-
- for(int i=0; i < this->nbPatterns ; i ++)
- {
- memcpy(tmpap, inpA, sizeof(float32_t) * this->vecDim);
- memcpy(tmpbp, inpB, sizeof(float32_t) * this->vecDim);
-
- *outp = arm_correlation_distance_f32(tmpap, tmpbp, this->vecDim);
-
- inpA += this->vecDim;
- inpB += this->vecDim;
- outp ++;
- }
- ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
- }
- void DistanceTestsF32::test_cosine_distance_f32()
- {
- const float32_t *inpA = inputA.ptr();
- const float32_t *inpB = inputB.ptr();
- float32_t *outp = output.ptr();
-
- for(int i=0; i < this->nbPatterns ; i ++)
- {
- *outp = arm_cosine_distance_f32(inpA, inpB, this->vecDim);
-
- inpA += this->vecDim;
- inpB += this->vecDim;
- outp ++;
- }
- ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
- }
- void DistanceTestsF32::test_euclidean_distance_f32()
- {
- const float32_t *inpA = inputA.ptr();
- const float32_t *inpB = inputB.ptr();
- float32_t *outp = output.ptr();
-
- for(int i=0; i < this->nbPatterns ; i ++)
- {
- *outp = arm_euclidean_distance_f32(inpA, inpB, this->vecDim);
-
- inpA += this->vecDim;
- inpB += this->vecDim;
- outp ++;
- }
- ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
- }
- void DistanceTestsF32::test_jensenshannon_distance_f32()
- {
- const float32_t *inpA = inputA.ptr();
- const float32_t *inpB = inputB.ptr();
- float32_t *outp = output.ptr();
-
-
- for(int i=0; i < this->nbPatterns ; i ++)
- {
- *outp = arm_jensenshannon_distance_f32(inpA, inpB, this->vecDim);
-
- inpA += this->vecDim;
- inpB += this->vecDim;
- outp ++;
- }
- ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
- }
- void DistanceTestsF32::test_minkowski_distance_f32()
- {
- const float32_t *inpA = inputA.ptr();
- const float32_t *inpB = inputB.ptr();
- const int16_t *dimsp= dims.ptr();
- dimsp += 2;
- float32_t *outp = output.ptr();
-
- for(int i=0; i < this->nbPatterns ; i ++)
- {
- *outp = arm_minkowski_distance_f32(inpA, inpB, *dimsp,this->vecDim);
-
- inpA += this->vecDim;
- inpB += this->vecDim;
- outp ++;
- dimsp ++;
- }
- ASSERT_NEAR_EQ(output,ref,(float32_t)1e-3);
- }
-
-
- void DistanceTestsF32::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
- {
- (void)paramsArgs;
- if ((id != DistanceTestsF32::TEST_MINKOWSKI_DISTANCE_F32_9) && (id != DistanceTestsF32::TEST_JENSENSHANNON_DISTANCE_F32_8))
- {
- inputA.reload(DistanceTestsF32::INPUTA_F32_ID,mgr);
- inputB.reload(DistanceTestsF32::INPUTB_F32_ID,mgr);
- dims.reload(DistanceTestsF32::DIMS_S16_ID,mgr);
-
- const int16_t *dimsp = dims.ptr();
-
- this->nbPatterns=dimsp[0];
- this->vecDim=dimsp[1];
- output.create(this->nbPatterns,DistanceTestsF32::OUT_F32_ID,mgr);
- }
- switch(id)
- {
- case DistanceTestsF32::TEST_BRAYCURTIS_DISTANCE_F32_1:
- {
- ref.reload(DistanceTestsF32::REF1_F32_ID,mgr);
- }
- break;
- case DistanceTestsF32::TEST_CANBERRA_DISTANCE_F32_2:
- {
- ref.reload(DistanceTestsF32::REF2_F32_ID,mgr);
- }
- break;
- case DistanceTestsF32::TEST_CHEBYSHEV_DISTANCE_F32_3:
- {
- ref.reload(DistanceTestsF32::REF3_F32_ID,mgr);
- }
- break;
- case DistanceTestsF32::TEST_CITYBLOCK_DISTANCE_F32_4:
- {
- ref.reload(DistanceTestsF32::REF4_F32_ID,mgr);
- }
- break;
- case DistanceTestsF32::TEST_CORRELATION_DISTANCE_F32_5:
- {
- ref.reload(DistanceTestsF32::REF5_F32_ID,mgr);
- tmpA.create(this->vecDim,DistanceTestsF32::TMPA_F32_ID,mgr);
- tmpB.create(this->vecDim,DistanceTestsF32::TMPB_F32_ID,mgr);
- }
- break;
- case DistanceTestsF32::TEST_COSINE_DISTANCE_F32_6:
- {
- ref.reload(DistanceTestsF32::REF6_F32_ID,mgr);
- }
- break;
- case DistanceTestsF32::TEST_EUCLIDEAN_DISTANCE_F32_7:
- {
- ref.reload(DistanceTestsF32::REF7_F32_ID,mgr);
- }
- break;
- case DistanceTestsF32::TEST_JENSENSHANNON_DISTANCE_F32_8:
- {
- inputA.reload(DistanceTestsF32::INPUTA_JEN_F32_ID,mgr);
- inputB.reload(DistanceTestsF32::INPUTB_JEN_F32_ID,mgr);
- dims.reload(DistanceTestsF32::DIMS_S16_ID,mgr);
-
- const int16_t *dimsp = dims.ptr();
-
- this->nbPatterns=dimsp[0];
- this->vecDim=dimsp[1];
- output.create(this->nbPatterns,DistanceTestsF32::OUT_F32_ID,mgr);
- ref.reload(DistanceTestsF32::REF8_F32_ID,mgr);
- }
- break;
- case DistanceTestsF32::TEST_MINKOWSKI_DISTANCE_F32_9:
- {
- inputA.reload(DistanceTestsF32::INPUTA_F32_ID,mgr);
- inputB.reload(DistanceTestsF32::INPUTB_F32_ID,mgr);
- dims.reload(DistanceTestsF32::DIMS_MINKOWSKI_S16_ID,mgr);
-
- const int16_t *dimsp = dims.ptr();
-
- this->nbPatterns=dimsp[0];
- this->vecDim=dimsp[1];
- output.create(this->nbPatterns,DistanceTestsF32::OUT_F32_ID,mgr);
- ref.reload(DistanceTestsF32::REF9_F32_ID,mgr);
- }
- break;
- case DistanceTestsF32::TEST_DTW_DISTANCE_F32_10:
- {
- inputA.reload(DistanceTestsF32::INPUT_QUERY_F32_ID,mgr);
- inputB.reload(DistanceTestsF32::INPUT_TEMPLATE_F32_ID,mgr);
-
-
- this->nbPatterns=1;
- this->queryLength=inputA.nbSamples();
- this->templateLength=inputB.nbSamples();
- output.create(3*this->nbPatterns,DistanceTestsF32::OUT_F32_ID,mgr);
- tmpA.create(this->queryLength*this->templateLength,DistanceTestsF32::TMPA_F32_ID,mgr);
- tmpB.create(this->queryLength*this->templateLength,DistanceTestsF32::TMPB_F32_ID,mgr);
- tmpC.create(this->queryLength*this->templateLength,DistanceTestsF32::TMPC_Q7_ID,mgr);
- outPath.create(2*(this->queryLength+this->templateLength),DistanceTestsF32::OUTA_S16_ID,mgr);
- ref.reload(DistanceTestsF32::REF10_F32_ID,mgr);
- refPath.reload(DistanceTestsF32::REF10_S16_PATH_ID,mgr);
- }
- break;
- }
-
-
- }
- void DistanceTestsF32::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
- {
- (void)id;
- output.dump(mgr);
- }
|