# Median16s(), Median16u()

Median is a number, in the middle of a row of numbers, sorted by value. Can be used as a Median filter to process Input data (Rank order filter). Voltage readings of an ADC are much more stable using Median because variations are much smaller.

Two types are defined for 16-Bit values. With and without taking the sign into account.

Syntax: word = Median16u( valuesAddr as word, valueCount as byte )
Syntax: integer = Median16s( valuesAddr as word, valueCount as byte ) (Signed value)

The parameter expects a memory address (example an Array), and the number of values. The input values are temporarily pushed on the stack. Take this into account when sizing the stack.

### Example

```const F_CPU=20000000
avr.device = atmega16
avr.clock  = F_CPU
avr.stack = 64

uart.baud = 19200
uart.recv.enable
uart.send.enable

dim i as byte
dim b(4) as word
dim mv as long

print 12;"median example"
print
wait 1

'Input data
b(0) = 55
b(1) = 99
b(2) = 44
b(3) = 22
b(4) = 11

print
print "Median() = ";str(Median16u( b().Addr, b().Ubound+1 ))
print

print "Median manually:"
'Sort input data in ascending order
b().Sort
'Display it
for i=0 to b().Ubound
print "b(";str(i);") = ";str(b(i))
next
print
i = b().Ubound/2 ' the middle element is the Median
mv = b(i)
'There is no middle element when the number of elements is even. The Low- and High-Median will be averaged.
if even(b().Ubound+1) then
mv = (mv + b(i+1)) / 2
end if

print "Median() = ";str(mv)
print