Subversion Repositories dashGPS

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #include "ref.h"
  2.  
  3. arm_status ref_mat_mult_f32(
  4.   const arm_matrix_instance_f32 * pSrcA,
  5.   const arm_matrix_instance_f32 * pSrcB,
  6.   arm_matrix_instance_f32 * pDst)
  7. {
  8.         uint32_t r,c,i,outR,outC,innerSize;
  9.         float32_t sum;
  10.        
  11.         outR = pSrcA->numRows;
  12.         outC = pSrcB->numCols;
  13.         innerSize = pSrcA->numCols;
  14.        
  15.         for(r=0;r<outR;r++)
  16.         {
  17.                 for(c=0;c<outC;c++)
  18.                 {
  19.                         sum = 0;
  20.                        
  21.                         for(i=0;i<innerSize;i++)
  22.                         {
  23.                                 sum += pSrcA->pData[r*innerSize + i] * pSrcB->pData[i*outC + c];
  24.                         }
  25.                        
  26.                         pDst->pData[r*outC + c] = sum;
  27.                 }
  28.         }
  29.        
  30.         return ARM_MATH_SUCCESS;
  31. }
  32.  
  33. arm_status ref_mat_mult_q31(
  34.   const arm_matrix_instance_q31 * pSrcA,
  35.   const arm_matrix_instance_q31 * pSrcB,
  36.   arm_matrix_instance_q31 * pDst)
  37. {
  38.         uint32_t r,c,i,outR,outC,innerSize;
  39.         q63_t sum;
  40.        
  41.         outR = pSrcA->numRows;
  42.         outC = pSrcB->numCols;
  43.         innerSize = pSrcA->numCols;
  44.        
  45.         for(r=0;r<outR;r++)
  46.         {
  47.                 for(c=0;c<outC;c++)
  48.                 {
  49.                         sum = 0;
  50.                        
  51.                         for(i=0;i<innerSize;i++)
  52.                         {
  53.                                 sum += (q63_t)(pSrcA->pData[r*innerSize + i]) * pSrcB->pData[i*outC + c];
  54.                         }
  55.                        
  56.                         pDst->pData[r*outC + c] = ref_sat_q31(sum >> 31);
  57.                 }
  58.         }
  59.        
  60.         return ARM_MATH_SUCCESS;
  61. }
  62.  
  63. arm_status ref_mat_mult_q15(
  64.   const arm_matrix_instance_q15 * pSrcA,
  65.   const arm_matrix_instance_q15 * pSrcB,
  66.   arm_matrix_instance_q15 * pDst)
  67. {
  68.         uint32_t r,c,i,outR,outC,innerSize;
  69.         q63_t sum;
  70.        
  71.         outR = pSrcA->numRows;
  72.         outC = pSrcB->numCols;
  73.         innerSize = pSrcA->numCols;
  74.        
  75.         for(r=0;r<outR;r++)
  76.         {
  77.                 for(c=0;c<outC;c++)
  78.                 {
  79.                         sum = 0;
  80.                        
  81.                         for(i=0;i<innerSize;i++)
  82.                         {
  83.                                 sum += (q31_t)(pSrcA->pData[r*innerSize + i]) * pSrcB->pData[i*outC + c];
  84.                         }
  85.                        
  86.                         pDst->pData[r*outC + c] = ref_sat_q15(sum >> 15);
  87.                 }
  88.         }
  89.        
  90.         return ARM_MATH_SUCCESS;
  91. }
  92.