Hi Kristoff, I had a look at the mod and demod demo programs and the design looks fine. Unlike the current HF protocol you have three states (e.g. pre/post amble and voice data), so you need a way to handle start up/shut down of the stream.
As an aside: having a defined "end" to a HF stream might be useful - we could tell the demod to lose sync and squelch. We can work this into FreeDV OK. I have some ideas where the START/VOICE/STOP code would go. We would need to change the FreeDV design a little to handle protocols with state, one example is to ensure the "MOD END" data gets transmitted before PTT is de-asserted. Has the modem been performance tested. e.g. BER versus Eb/No, sync time at a given Eb/No (SNR) or other channel artefacts like timing offsets? I am not sure how to do this on a GMSK modem without simulating the FM part. Cheers, David On Tue, 2013-03-12 at 22:03 +0100, Kristoff Bonne wrote: > Hi all, > > > I have just uploaded the first release of the C2GMSK modem API to github: > > https://github.com/on1arf/gmsk > > The goal is to make the VHF/UHF modem more accessable and allow it to be > used inside other applications. Possible targets for this are FreeDV, > the standalone gmskmodem for embedded linux devices or TheLinkBox. > > Appart of the basic "API" call, the package also includes some support > functions, trying to make live a little bit more easy for the > programmer. They mainly deal with creating/initialising certain > structures needed by the API and processing the return-messages received > from the API. > > Appart from the modem itself, two test/demo-applications have been > added: testapi_modulate and testapi_demodulate. > > > This is the first time I've written an API, so any comments from > developer side are more then welcome. There is currently no seperation > between the "visible" API-calls and the functions used internally in the > package. If you know how to help out on this part, please let me know. > > > > The API works like this: > * first, create/initialise a "parameter" structure and a > "c2gmsk_session". All data related to this particular session is > attached to this structure. > > * For the "modulation" chain, there are 4 API calls: > - c2gmsk_mod_start: GMSK stream start (startsync + versionid info) > - c2gmsk_mod_voice1400: GMSK frame: 40 ms of codec2 running at 1400 bps > - c2gmsk_mod_voice1400_end: 3 GMSK frames of 40 ms indicating the end of > a GMSK stream > - c2gmsk_mod_flushaudio: flush any audio that might still be in the queue > > * For the "demodulator" chain, there is only one 1 API call: > c2gmsk_demodulate > > > > The API calls return two data-elements: > - a return value ("OK" or an error indication) > - a message-queue containing a number of "messages". > > Possible types of messages in the queue can be: > - data (a 40 ms audio-fragment of encoded audio, a 56 bit 40 ms codec2 > frame). > - a notification (change of state, average audio-level, c2gmsk stream > versionid, FEC statistics, ...) > - a stream indications / error message: (end of stream, to many > sync-misses received, unsupported versionid stream received, ...) > - debug information (a textual streamdump of the raw bitstream as > received by the demodulator) > > > > In short, an application would look like this: > - create and initialisate "parameters" structure + fill it in > - create a session, based on these parameters > > while (more data to process) { > call "modulate" or "demodulate" APIcalls, feed data, retrieve > message chain > repeat { > call function to extract information from the message-chain you > are interested in > process that information (write to file, write to audio-device, > ...) > } until msgchain is empty. > } > > I would appriciate if somebody with coding-experience would have a look > at it and give some comments. > > > From the development side, the next steps to use the are: > > - create wrapper-code around the API to create an API for FreeDV and get > c2gmsk into freeDV > > - finish the toolkit for the gmskmodem on the raspberry pi (using a > modem based on this API), to create a embedded-system based c2gmsk modem > > - incorperate the 2400 bps modem into the API > > > > 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_d2d_mar > _______________________________________________ > Freetel-codec2 mailing list > Freetel-codec2@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/freetel-codec2 ------------------------------------------------------------------------------ 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_d2d_mar _______________________________________________ Freetel-codec2 mailing list Freetel-codec2@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freetel-codec2