Hi all,
One of the elements needed for implementation of the the 2400 bps modem is something called "interleaving". As this element is just "bit-processing" which does not really need knowledge of FEC, DSP, voice-encoding or the other "low-level" stuff; this might be an interesting project to develop by itself. If somebody is interested in this, do let me know; either via the list of offlist. If you always wanted to get your name in the official documentation as cool as an open source voice codec; this is your chance. :-) What is this about: * Interleaving is a simple but genious trick used to beat burst-errors. Burst-errors is a senario where interference of a radio-signal takes that long it modfies not one bit, but multiple bits after other. This is an issue for two reasons: - some FEC systems operate on a relative small group of bits or a number of bits located after eachother. - certain bits in a voice stream are more important then others. The audiable effect of having certain bits modified is much larger then having some other bits changed. It is therefor important that not all "important" bits are wiped out by one single bursterror. * Interleaving is as simple as effective: it simply changes the order of the bits transmitted so that bits that are important or "related" are not transmitted after eachother. To do this, - the bits order it changed before transmitting - the stream is transmitted - on the receiving end, the order of the bits is corrected again. So, this is the senario; as taking from the 2400 c2_gmsk spec: > > 2/ for the 1400 bps voice codec: (...) > 2b/ For a timeslot WITH sync/type-of-frame pattern: > - 24 bits sync/type-of-frame > - 56 bits codec2 voice > - 16 bits FEC > > In this senario, > - once golay(24,12,8) is applied, with the ability to protect 12 bits > - in addition, one hamming(8,4,4) is applied, with the ability to > protect 4 bits. > > Firstly, the golay(24,12,8) is applied to the following bits: > - all 4 voiced bits > - the 8 energy/wo bits that apply to the first two codec2 frames of > the (4 frame) codec2 timeslot > > For the 4 remaing FEC bits (the hamming(8,4,4) block), I would like to > propose this: > The hamming(8,4,4) is applied NOT 4 of the other eight energy+wo bits > (for the 3th and 4th frame), but 4 of the MSBs of the LSPs. Also important to know: > * A codec2 frame is based on a 40 ms timeslot, containing information about four 10 ms frames. It has the following structure: >1/ For the 1400 bps voice codec > - 1 "voiced" bit for frame 0 > - 1 "voiced" bit for frame 1 > - 8 "energy or WoE" bits for frames 0 and 1 > - 1 "voiced" bit for frame 2 > - 1 "voiced" bit for frame 3 > - 8 "energy or WoE" bits for frames 2 and 3 > - 36 "LSP" bits for frames 0 up to 3 > Total: 56 bits > The 36 LSP bits represent 10 values, using between 2 and 4 bits for every values. And: > Not all information in the codec2 voice frame is equaly important. Corrupting certain bits produces more audiable error then other bits. The importance of the different > groups of bits is as follows (in descending order): > - voicing bits > - energy+Wo bits > - MSB part of the LSPs > - remaining part of the LSPs What is needed: A interleaving matrix which modifies the order of the bits as stored in the 72 bits of the to-be transmitted frame, into an order less vulnerable for burst errors: The rules are as follows: - bits with a high importance (like the voice-bits and energy+wo bits) should NOT be located close other bits with a high priority. - bits that are related should also not be located close to eachother. "related" bits are all bits that are part of the same FEC block: both the databits and the error-correction bits of the FEC block. In this case, there are two FEC blocks: . one 24 bit "golay(12,24)" block: containting the 4 voice bits, the 8 "energy.wo" bits of the first frame + the 12 error-correction bits for that block . one 8 "hamming(4;8)" block: containing 4 of the MSBbits of the LSPs + 4 error-correction bit for that block Who takes up the challence to give this a try. One way to do this is write an application that compaires possible interleaving-matrices giving them all a score how well they based on the requirement (it they end up with some of the important bits located next to eachother, it should have a bad score). This would allow us to compair different matrices. Anybody interested? Feel free to reply via the list or offlist. 73 Kristoff - ON1ARF ------------------------------------------------------------------------------ Everyone hates slow websites. So do we. Make your web apps faster with AppDynamics Download AppDynamics Lite for free today: http://p.sf.net/sfu/appdyn_sfd2d_oct _______________________________________________ Freetel-codec2 mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/freetel-codec2
