discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] The GSoC project on LDPC codes.


From: Manu T S
Subject: Re: [Discuss-gnuradio] The GSoC project on LDPC codes.
Date: Wed, 6 Nov 2013 19:47:21 +0530

Hi Miklos,

The implementation is quite slow. I don't have any quantitative performance measures, yet.
Nevertheless I have some empirical measures. For example, on testing the implementation (all C++ and no GNU Radio) with a (8000, 4000) code(rate 0.5, regular), in with AWGN of 0.8 added to it (capacity 0.678),
it took about 15-20 minutes[*] on an i7 machine to transmit and decode 100 blocks. With smaller noise, this will be done a bit faster, for the number of decoding iterations required is less.

The major time consuming factor in the implementation is the encoder construction. You may find the encoding method I implemented in the report. It has a complexity of O((NM)^2). Once we have the encoder matrix encoding is done in O(K^2) time. Decoding doesn't take that much time, but the current space requirement is huge. I'm using a M x N matrix(double elements) to hold the messages being passed between check nodes and variable nodes. For the (8000, 4000) code that turns out to be some 244 MB. Since H is sparse, most of the entries in the M x N message matrix is 0 and not used.

So these are the things in my agenda for the near future.
1. Improving the space requirement in the decoder.
2. Find better methods(eg. Sparse LU) to implement encoder.

I will start work with VOLK after the above mentioned improvements.


[*] As I said before encoder construction took huge time. So to test the codes, I generated the encoder matrix and saved it in a separate alist file. This file is not generally sparse. The file size would depend on the structure of the code. For example, for the (8000, 4000) code the size of the alist file for the encoder matrix was about 64MB. The only gain here is that we need not generate the encoder matrix every time we need to use this code. We can load it from the alist file. Had I not done this, the experiment would have taken longer.


On Wed, Nov 6, 2013 at 5:47 PM, Miklos Maroti <address@hidden> wrote:
Hi Manu,

Thanks for the report, it was more informative than the presentation.
Yes, I have seen the BER figure, but that is not very will presented
(e.g. you should use logarithmic scale for BER) and should have better
resolution on the Eb/N0 axes. You write that it does not use VOLK or
SSE2. How fast is it? Do you have any performance number? Do you plan
to work on it in the near future?

Miklos

On Wed, Nov 6, 2013 at 5:38 AM, Manu T S <address@hidden> wrote:
> Hello Mikios
>
> Here is the link to the presentation and report I made for my
> thesis(intermediate evaluation) at IIT Bombay. Last part describes the
> results I have obtained.
> It has a BER plot as well.
>
> https://github.com/manuts/first_stage/blob/master/ppt.pdf
> https://github.com/manuts/first_stage/blob/master/report.pdf
>
> The implementation is generic, in the sense that if you input a code (in
> alist file format), we can construct the encoder and decoder.
> The decoder merely implements sum product algorithm. I have tested it
> against many regular codes, where there was the significant gap between the
> rate and the capacity. I'm yet to test it against an irregular code of large
> block length, mainly because the encoder and decoder becomes really slow.
> (Many optimizations are still in order.)
>
> I wish I could tell you I had a better BER plot, but what's there in the
> report is all I have currently.
> Thanks for checking out.
>
>
> On Tue, Nov 5, 2013 at 11:08 PM, Miklos Maroti <address@hidden>
> wrote:
>>
>> Dear Manu,
>>
>> Do you have any performance numbers on your LDPC decoder? I could not
>> find any info, even in your presentation. Do you have also a BER
>> figure, or even better would be some technical report. I would love to
>> get some sense on the performance of your implementation.
>>
>> Best,
>> Miklos
>>
>> On Tue, Nov 5, 2013 at 6:15 PM, Manu T S <address@hidden> wrote:
>> > Dear Max,
>> >
>> > You are correct. It is a bug. Now I'm wondering why I didn't get any
>> > segmentation faults.
>> >
>> > Probably I didn't get any segmentation faults because, after i = M - 1,
>> > EOF
>> > has reached.
>> >
>> > Thanks for the correction.
>> >
>> >
>> > On Tue, Nov 5, 2013 at 9:14 PM, ikjtel <address@hidden> wrote:
>> >>
>> >> Greetings
>> >>
>> >> I was very interested in this project for possible application to the
>> >> op25
>> >> project, since P25 uses several FEC codes
>> >> including RS and other block codes.  I've brought up the gr-ldpc
>> >> library
>> >> and have a few questions.  Due to the hateful YAhoo mail composer, I'm
>> >> hesitant to post lengthy emails to the general list with no opportunity
>> >> for
>> >> preview prior to hitting SEND, so I'll try breaking up the list of
>> >> questions
>> >> into several posts, one per question...
>> >>
>> >> First question: I was getting lots of errors, seg faults, aborts, and
>> >> other misbehavior from the code, which were traced to an apparent bug
>> >> in
>> >> alist.cc, all of which cleared up when I applied the following patch:
>> >>
>> >> --- ../../repo/gr-ldpc/lib/alist.cc     2013-10-18 10:25:47.508781061
>> >> -0400
>> >> +++ ./alist.cc  2013-11-05 11:21:03.879972116 -0500
>> >> @@ -123,7 +123,7 @@
>> >>      }
>> >>
>> >>      // Parse indices with non zero entries in ith row
>> >> -    for (int row = 0; row < N; row++) {
>> >> +    for (int row = 0; row < M; row++) {
>> >>          std::getline(file, line);
>> >>          ss << line;
>> >>          for (int entry = 0; entry < num_mlist[row]; entry++) {
>> >>
>> >> Can you confirm, is this really a bug?
>> >>
>> >> Thanks and Best
>> >>
>> >> Max
>> >
>> >
>> >
>> >
>> > --
>> > Manu T S
>> >
>> > _______________________________________________
>> > Discuss-gnuradio mailing list
>> > address@hidden
>> > https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>> >
>
>
>
>
> --
> Manu T S



--
Manu T S

reply via email to

[Prev in Thread] Current Thread [Next in Thread]