NMSIS-NN  Version 1.2.0 NMSIS NN Software Library
Basic Math Functions for Neural Network Computation

Basic Math Functions for Neural Network Computation. More...

## Functions

void riscv_nn_accumulate_q7_to_q15 (q15_t *pDst, const q7_t *pSrc, uint32_t length)
Converts the elements from a q7 vector and accumulate to a q15 vector. More...

void riscv_nn_add_q7 (const q7_t *input, q31_t *output, uint32_t block_size)
Non-saturating addition of elements of a q7 vector. More...

void riscv_nn_mult_q15 (q15_t *pSrcA, q15_t *pSrcB, q15_t *pDst, const uint16_t out_shift, uint32_t blockSize)
Q7 vector multiplication with variable output shifts. More...

void riscv_nn_mult_q7 (q7_t *pSrcA, q7_t *pSrcB, q7_t *pDst, const uint16_t out_shift, uint32_t blockSize)
Q7 vector multiplication with variable output shifts. More...

## Detailed Description

Basic Math Functions for Neural Network Computation.

## ◆ riscv_nn_accumulate_q7_to_q15()

 void riscv_nn_accumulate_q7_to_q15 ( q15_t * dst, const q7_t * src, uint32_t block_size )

Converts the elements from a q7 vector and accumulate to a q15 vector.

Parameters
 [in] *src points to the q7 input vector [out] *dst points to the q15 output vector [in] block_size length of the input vector
Description:

The equation used for the conversion process is:

``` dst[n] += (q15_t) src[n] ;   0 <= n < block_size.
```

 void riscv_nn_add_q7 ( const q7_t * input, q31_t * output, uint32_t block_size )

Non-saturating addition of elements of a q7 vector.

Parameters
 [in] *input Pointer to the q7 input vector [out] *output Pointer to the q31 output variable. [in] block_size length of the input vector
Description:

2^24 samples can be added without saturating the result.

The equation used for the conversion process is:

``` sum = input[0] + input[1] + .. + input[block_size -1]
```

## ◆ riscv_nn_mult_q15()

 void riscv_nn_mult_q15 ( q15_t * pSrcA, q15_t * pSrcB, q15_t * pDst, const uint16_t out_shift, uint32_t blockSize )

Q7 vector multiplication with variable output shifts.

q7 vector multiplication with variable output shifts

Parameters
 [in] *pSrcA pointer to the first input vector [in] *pSrcB pointer to the second input vector [out] *pDst pointer to the output vector [in] out_shift amount of right-shift for output [in] blockSize number of samples in each vector

Scaling and Overflow Behavior:

The function uses saturating arithmetic. Results outside of the allowable Q15 range [0x8000 0x7FFF] will be saturated.

## ◆ riscv_nn_mult_q7()

 void riscv_nn_mult_q7 ( q7_t * pSrcA, q7_t * pSrcB, q7_t * pDst, const uint16_t out_shift, uint32_t blockSize )

Q7 vector multiplication with variable output shifts.

q7 vector multiplication with variable output shifts

Parameters
 [in] *pSrcA pointer to the first input vector [in] *pSrcB pointer to the second input vector [out] *pDst pointer to the output vector [in] out_shift amount of right-shift for output [in] blockSize number of samples in each vector

Scaling and Overflow Behavior:

The function uses saturating arithmetic. Results outside of the allowable Q7 range [0x80 0x7F] will be saturated.