quiet / libcorrect

C library for Convolutional codes and Reed-Solomon
BSD 3-Clause "New" or "Revised" License
362 stars 95 forks source link

Quickstart usage #27

Open mikeyg123 opened 5 years ago

mikeyg123 commented 5 years ago

I must be really dumb but I find it impossible to understand how to start using this without knowing the details about roots of polynomials etc.

I've searched the issues and the code and found similar questions but nothing that helps

Could you possibly create pair of small example functions and add them to the README:

That would help enormously - I'm lost at sea Thank you

brian-armstrong commented 5 years ago

Hi!

Sorry to hear you're feeling frustrated. I've wanted to create examples but I haven't got around to it yet.

There is something like an example in the tests here but it's not super easy to read. The Reed-solomon create() function is unfortunately somewhat complicated, but if you're not trying to interop with an existing RS setup, you don't need to worry too much about it. You can pick any of the polynomials and use 1 and 1 for FCR and root gap. num_roots is how many parity bytes you get.

What kind of lossiness are you transmitting through? Is it analog at all?

Brian

mikeyg123 commented 5 years ago

Thanks, that helps, hopefully I'll get it working soon. The link is radio and the losses are hugely variable and possibly bursty.
The channel also carries audio data using codecs that degrade reasonably gracefully with increased error rate. So rather than use the theoretical BER from some particular S/N ratio; my plan is to experimentally determine the bit error rate at the point where the other streams become unusable and tune my data channel to that. The other issue is that the frames used by the modem are less than 100 bits and I'd like to make each frame stand alone while using every bit possible. For efficiency and convenience if I need to request re-transmission I'd like to do it for individual frames rather blocks of several frames. This is all early days yet. My first step was to find a FEC library in C with minimal dependencies and a compatible licence - so thanks!