Tuesday, 4 December 2012

How to compute or validate the network bandwidth when using Speex

This is a quite simple computation or validation of the network bandwidth, but can be tricky if you don't take into account the "quality" parameter used in Speex.
Speex is designed to change bitrate depending on the desired quality, and there are 10 different levels of quality per type (narrowband (8 KHz), wideband (16 KHz), ultra-wideband (32 KHz)).

All you have to do is take the expected encoding bitrate for that quality (e.g. 28 Kbps for wideband at quality 8/10), compute the payload per frame, optionally sum the payload when you have more than 1 frame per packet, add the overhead of IP, UDP and RTP, then recompute the overall bitrate.

Each Speex frame has 20 msec duration.

The payload for Speex wideband at quality 8 (28 kbps) is:

P = (28*10^3 kbps * 20*10^-3 msec/frame) = 70 B/frame

Consider 1 frame per packet and add the overhead from IP, UDP and RTP:

Ptot = 70 B + 40 B = 110 B/packet

Compute the final network bandwidth:

BW = (110 B)*8 / (20 * 10^-3) = 44 Kbps

Monday, 3 December 2012

grep recursively excluding svn (or git) files

It's as easy as:

grep -nr --exclude-dir .svn 'something to grep' path

I personally set an alias:

alias gr='grep -nr --exclude-dir .svn '

so I can just type:

$ gr 'something to grep' path

and avoid any result from svn files.