Vectors Library

mikroC PRO for dsPIC30/33 and PIC24 includes a library for working and using vectors. All routines work with fractional Q15 format.

Library Routines

Vector_Set

Prototype

void Vector_Set(unsigned *input, unsigned size, unsigned value);

Description

Sets size elements of input to value, starting from the first element.

Parameters
  • input: pointer to original vector
  • size: number of vector elements
  • value: value written to the elements
Returns

Nothing.

Requires

Nothing.

Example
unsigned vec2[3] = {1,1,1};

Vector_Set(vec2, 3, 0x4000);
Notes
  • size must be > 0
  • Length of input is limited by available RAM

Vector_Power

Prototype

unsigned Vector_Power(unsigned numElems, unsigned *srcV);

Description

Function returns result of power value (powVal) in radix point 1.15

Parameters
  • numElems: number elements in vector(s)
  • srcV: pointer to source vector
Returns

Requires

Nothing.

Example
unsigned vec1[3] = {1,2,3};

Vector_Power(3, vec1);
Notes
  • [W0..W2] used, not restored
  • [W4] used, not restored
  • AccuA used, not restored
  • CORCON saved, used, restored

Vector_Subtract

Prototype

void Vector_Subtract(unsigned *dest, unsigned *v1, unsigned *v2, unsigned numElems);

Description

This function does subtraction of two vectors.

dstV[n] = v1[n] - v2[n], n Î [0, numElems-1]

Parameters
  • dest: result vector
  • v1: first vector
  • v2: second vector
  • numElems: must be less or equal to minimum size of two vectors.
Returns

Nothing.

Requires

Nothing.

Example
unsigned vec1[3] = {1,2,3};
unsigned vec2[3] = {1,1,1};
unsigned vecDest[3];

Vector_Subtract(vecDest, vec1, vec2, 3);
Notes
  • AccuA used, not restored.
  • CORCON saved, used, restored.

Vector_Scale

Prototype

void Vector_Scale(unsigned N, int ScaleValue, unsigned *SrcVector, unsigned *DestVector);

Description

This function does vector scaling with scale value.

dstV[n] = sclVal * srcV[n], n Î [0, numElems-1]

Parameters
  • N: buffer length (number of elements to be scaled)
  • ScaleValue: scale value
  • SrcVector: pointer to original vector
  • DestVector: pointer to scaled vector
Returns

Nothing.

Requires

Nothing.

Example
unsigned vec1[3] = {1,2,3};
unsigned vecDest[3];

Vector_Scale(3, 2, vec1, vecDest);
Notes
  • [W0..W5] used, not restored
  • AccuA used, not restored
  • CORCON saved, used, restored

Vector_Negate

Prototype

void Vector_Negate(unsigned *srcVector, unsigned *DestVector, unsigned numElems);

Description

This function does negation of vector.

dstV[n] = (-1)*srcV1[n] + 0, n Î [0, numElems)

Parameters
  • srcVector: pointer to original vector
  • destVector: pointer to result vector
  • numElems: number of elements in vector(s)
Returns

Nothing.

Requires

Nothing.

Example
unsigned vecDest[3];
unsigned vec1[3] = {1,2,3};

Vector_Negate(vec1, vecDest, 3);
Notes
  • Negate of 0x8000 is 0x7FFF
  • [W0]..[W5] used, not restored
  • AccuA used, not restored
  • CORCON saved, used, restored

Vector_Multiply

Prototype

void Vector_Multiply(unsigned *v1, unsigned *v2, unsigned *dest, unsigned numElems);

Description

This function does multiplication of two vectors.

dstV[n] = srcV1[n] * srcV2[n], n Î [0, numElems-1]

Parameters
  • v1: pointer to first vector
  • v2: pointer to second vector
  • dest: pointer to result vector
  • numElems: number elements in vector(s) (must be less or equal to minimum size of two vectors)
Returns

Nothing.

Requires

Nothing.

Example
unsigned vec1[3] = {1,2,3};
unsigned vec2[3] = {1,1,1};
unsigned vConDest[10];

Vector_Multiply(vec1, vConDest, vec2, 3); 
Notes
  • [W0..W5] used, not restored
  • AccuA used, not restored
  • CORCON saved, used, restored

Vector_Min

Prototype

unsigned Vector_Min(unsigned *Vector, unsigned numElems, unsigned *MinIndex);

Description

This function finds minimal value in vector.

minVal = min (srcV[n]), n Î [0, numElems-1]

If srcV[i] = srcV[j] = minVal, and i < j, then MinIndex = j.

Parameters
  • Vector: pointer to original vector
  • numElems: number of elements in vector
  • MinIndex: pointer to index of minimum value
Returns

Minimum value (minVal).

Requires

Nothing.

Example
unsigned vec1[3] = {1,2,3};
unsigned index;
unsigned rslt;

rslt = Vector_Min(vec1, 3, &index);
Notes [W0..W5] used, not restored

Vector_Max

Prototype

unsigned Vector_Max(unsigned *srcV, unsigned numElems, unsigned *MaxIndex);

Description

This function find maximal value in vector.

maxVal = max (srcV[n]), n Î [0, numElems-1]

If srcV[i] = srcV[j] = maxVal, and i < j, then maxIndex = j.

Parameters
  • srcV: pointer to original vector
  • numElems: number of elements in vector(s)
  • MaxIndex: pointer to index of maximum value
Returns

Maximum value (maxVal).

Requires

Nothing.

Example
unsigned vec1[3] = {1,2,3};
unsigned index;
unsigned rslt;

rslt = Vector_Max(vec1, 3, &index);
Notes [W0..W5] used, not restored

Vector_Dot

Prototype

unsigned Vector_Dot(unsigned *v1, unsigned *v2, unsigned numElems);

Description

Function calculates vector dot product.

Parameters
  • v1: pointer to first vector
  • v2: pointer to second vector
  • numElems: number of elements in vector(s)
Returns

Dot product value :

Requires

Nothing.

Example
unsigned vec2[3] = {1,1,1};
unsigned rslt;

rslt = Vector_Dot(vec2,vec2,3);
Notes
  • [W0..W2] used, not restored
  • [W4..W5] used, not restored
  • AccuA used, not restored
  • CORCON saved, used, restored

Vector_Correlate

Prototype

void Vector_Correlate(unsigned *v1, unsigned *v2, unsigned *dest, unsigned numElemsV1, unsigned numElemsV2);

Description

Function calculates Vector correlation (using convolution).


where:
x[n] defined for n Î [0, N)
y[n] defined for n Î [0, M), M £ N
r[n] defined for n Î [0, N+M-1)

Parameters
  • v1: pointer to first vector
  • v2: pointer to second vector
  • dest: pointer to result vector
  • numElemsV1: number of the first vector elements
  • numElemsV2: number of the second vector elements
Returns

Nothing.

Requires

Nothing.

Example
unsigned vConDest[10];
unsigned vec2[3] = {1,1,1};

Vector_Correlate(vec2,vec2,vConDest,3,3); 
Notes [W0..W7] used, not restored

Vector_Convolve

Prototype

void Vector_Convolve(unsigned *v1, unsigned *v2, unsigned *dest, unsigned numElemsV1, unsigned numElemsV2);

Description

Function calculates Vector using convolution.

, n Î [0, M)
, n Î [M, N)
, n Î [N, N+M-1)

Parameters
  • v1: pointer to first vector
  • v2: pointer to second vector
  • dest: pointer to result vector
  • numElemsV1: number of the first vector elements
  • numElemsV2: number of the second vector elements
Returns

Nothing.

Requires

Nothing.

Example
unsigned vec2[3] = {1,1,1};
unsigned vConDest2[10];

Vector_Convolve(vec2,vec2,vConDest2,3,3); 
Notes
  • [W0..W7] used, not restored
  • [W8..W10] saved, used, restored
  • AccuA used, not restored
  • CORCON saved, used, restored

Vector_Add

Prototype

void Vector_Add(unsigned *dest, unsigned *v1, unsigned *v2, unsigned numElems);

Description

Function calculates vector addition.

dstV[n] = srcV1[n] + srcV2[n], n Î [0, numElems-1]

Parameters
  • dest: pointer to result vector
  • v1: pointer to first vector
  • v2: pointer to second vector
  • numElemsV1: number of vector(s) elements
Returns

Nothing.

Requires

Nothing.

Example
unsigned vec1[3] = {1,2,3};
unsigned vec2[3] = {1,1,1};
unsigned vecDest[3];

Vector_Add(vecDest, vec1, vec2, 3);
Notes
  • [W0..W4] used, not restored
  • AccuA used, not restored
  • CORCON saved, used, restored
Copyright (c) 2002-2018 mikroElektronika. All rights reserved.
What do you think about this topic ? Send us feedback!
Want more examples and libraries? 
Find them on LibStock - A place for the code