Hi all,

(message crossposted on codec2 and digitalvoice lists. Follow-up set to 
digitalvoice list)


First of all an announcement. I've started implementing the 2400 bps 
modem in c2gmsk API, the GMSK based modem for codec2.

I have posted it on github on a seperate branch:
https://github.com/on1arf/gmsk/tree/c2gmsk_2400bps

This modem is currently assigned versionid 2400/15, so please 
concidering this still to be development software (modem versionid "15" 
= experimental). Once the code has been thoroughly tested, the modem 
will be renumbered to modem version 2400/0.

Implemented is:
- The 2400 bps GMSK modem itself

- interleaving 2400-to-1400 bps (ordering the bits as such that the most 
important bits are protected by the FEC; but still distributed in the 
frame) (*)
- the golay based FEC (mainly based on the code developed by David and 
Robert Morelos-Zaragoza as used in freeDV).
- scrambling
- transmission interleaving


I have a couple of question for the list on the issue of FEC.


First some information:
- the 2400 bps modem is based on 40 ms frames, so 96 bits each.
- There are two types of frames:
-> frames that include a sync-pattern: 24 bits sync pattern, 56 bits 
codec2 information, 1 * 12 bits golay FEC + 4 bits of spare
-> frames that do not include a sync-pattern: 56 bits codec2 
information, 3 * 12 bits golay FEC + 4 bits of spare
The first frame of a stream must be a "sync" type-frame. After that, 
there can be up to 7 "non-sync" frames.


My question:
1/ The golay FEC as implemented now is a the 12/23 scheme, so 12 bits of 
data + 11 bits of FEC. However, the frame structure actually has place 
for 12 bits of fec information. I did find some information on the net 
about a 12/24 golay scheme (that should be a little better then the 
12/23 scheme) but sofar I have not find any source-code for this.
- Has somebody already implemented fec 12/24 using open-source?
- is the extra work worth the effort? Does golay 12/24 provide a big 
advantage over golay 12/23?


2/ As noted above, every 40 ms frame has 4 bits of unused "spare" 
information. I see two ways these bits can be used:
- use it to provide hamming-code FEC for 3 bits
- reserve it for some other use in the future. (like a very low speed 
data channel).

Any comments, ideas or proposals?


3/ As the current 4800 bps (version 4800/0) has a very basis FEC system 
(1/3 repetition code), I have been thinking about designing a better 
modem for 4800 bps. My idea is to use the format of the 2400 bps modem, 
and apply a 1/2 convolutional code on top of that.

The issue that comes up is this: the gmsk stream contains a sync-pattern 
that is inserted into the stream at certain points. The goal is double
- allow the receiver to detect bitslip
- allow a receiver that is not syncronised to pick up a ongoing 
conversation. For this, the receiver needs to read the stream and look 
for these "sync" patterns to know where to start decoding the stream.

This sync-pattern is 24 bits.


So, concidering this requirements, I see three ways to implement a 4800 
bps version of the 2400 bps modem:
- simply apply a 1/2 FEC ontop of the complete 2400 bps stream, 
including the sync pattern. That way, the sync-pattern will actually 
become 48 bits!

- divide the stream into "windows" of 1 up to 8 frames. Every windows 
starting with one "sync" frame and followed by up to 7 "non-sync" 
frames. The convolution code would then be applied per window. The sync 
pattern would NOT be part of the 1/2 convolution code FEC and would 
-therefor- be 24 bits.
This would mean that per window, we would gain 24 bits of space. 
However, some of it them will have to be used for the "tailbiting" of 
the convolution coding window.

- Apply the 1/2 convolutional code to the stream without any windowing. 
However, do not apply it to the sync-pattern that would -therefor- still 
be 24 bit. Simply take out the sync-pattern from convolutional coding. 
This is a sort of halfway implementation between the first two senarios.




Anybody any comments, ideas or proposals on this?

Who can provide links to open-source libraries to implement a 1/2 
convolutional coding sceme?


(*) The interleaving-matrix for the 1400-to-2400 and 2400-to-1400 
conversion can available on my blog. However, due to discussion between 
myself and my ISP, my blog is currently not accessable. I will move that 
information to github in one of the comming days.




73
kristoff - ON1ARF

------------------------------------------------------------------------------
How ServiceNow helps IT people transform IT departments:
1. A cloud service to automate IT design, transition and operations
2. Dashboards that offer high-level views of enterprise services
3. A single system of record for all IT processes
http://p.sf.net/sfu/servicenow-d2d-j
_______________________________________________
Freetel-codec2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freetel-codec2

Reply via email to