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
