COMPGROUPS.NET | Search | Post Question | Groups | Stream | About | Register

### LDPC code

• Email
• Follow

Hello Everybody

Recently I simulated a regular rate 1/2 LDPC code over AGWN and I got the
expected BER plot.

Then I thought to simulate the same code over frequency selective channel.
I am using linear MMSE equalizer and then LDPC decoding. So basically it is
one time equalization and decoding.

However, I am not getting any coding gain over uncoded system even after
100 LDPC iterations. As a test case, when I remove noise, I can recover the
codeword. So the system is working. I am assuming perfect channel knowledge
at the RX.

However, when I use convolution code for the same setup, I get tremendous
coding gain.

Does anybody has idea what could be wrong????

Many thanks.

Chintan Shah

 0

See related articles to this posting

On 2/15/2010 2:07 PM, cpshah99 wrote:
> Hello Everybody
>
> Recently I simulated a regular rate 1/2 LDPC code over AGWN and I got the
> expected BER plot.
>
> Then I thought to simulate the same code over frequency selective channel.
> I am using linear MMSE equalizer and then LDPC decoding. So basically it is
> one time equalization and decoding.
>
> However, I am not getting any coding gain over uncoded system even after
> 100 LDPC iterations. As a test case, when I remove noise, I can recover the
> codeword. So the system is working. I am assuming perfect channel knowledge
> at the RX.
>
> However, when I use convolution code for the same setup, I get tremendous
> coding gain.
>
> Does anybody has idea what could be wrong????
>
> Many thanks.
>
> Chintan Shah

How big are the codewords, and do you have any interleaving prior to the
codewords or do you send a single codeword at a time?

For small blocks, e.g., around 50-60 bytes, most LDPCs don't have an

--
Eric Jacobsen
Minister of Algorithms
Abineau Communications
http://www.abineau.com

 0

>How big are the codewords, and do you have any interleaving prior to the
>codewords or do you send a single codeword at a time?
>
>For small blocks, e.g., around 50-60 bytes, most LDPCs don't have an
>

Hi Eric

The codeword is 2000 bits long. I do not understand what you mean by prior
to the codewords. It will be great if you can explain.

What I am doing is that encode the information bits using given generator
matrix and use interleaving prior to symbol mapping. And the usual stuff at
the receiver i.e. linear equalizer, LLR calculation, deinterleave and LDPC
decoding.

Thanks again.

Chintan

 0


cpshah99 wrote:

> Hello Everybody
>
> Recently I simulated a regular rate 1/2 LDPC code over AGWN and I got the
> expected BER plot.
>
> Then I thought to simulate the same code over frequency selective channel.
> I am using linear MMSE equalizer and then LDPC decoding. So basically it is
> one time equalization and decoding.
>
> However, I am not getting any coding gain over uncoded system even after
> 100 LDPC iterations. As a test case, when I remove noise, I can recover the
> codeword. So the system is working. I am assuming perfect channel knowledge
> at the RX.
>
> However, when I use convolution code for the same setup, I get tremendous
> coding gain.
>
> Does anybody has idea what could be wrong????

Looks like a trivial mistake somewhere. Are you sure the LDPC word is
not getting shifted by one bit or so? The convolutional decoder will
self synchronize, the LDPC won't.

DSP and Mixed Signal Design Consultant
http://www.abvolt.com

 0

On 2/15/2010 4:44 PM, cpshah99 wrote:
>> How big are the codewords, and do you have any interleaving prior to the
>> codewords or do you send a single codeword at a time?
>>
>> For small blocks, e.g., around 50-60 bytes, most LDPCs don't have an
>>
>
> Hi Eric
>
>
> The codeword is 2000 bits long. I do not understand what you mean by prior
> to the codewords. It will be great if you can explain.
>
> What I am doing is that encode the information bits using given generator
> matrix and use interleaving prior to symbol mapping. And the usual stuff at
> the receiver i.e. linear equalizer, LLR calculation, deinterleave and LDPC
> decoding.
>
> Thanks again.
>
> Chintan

I wasn't clear; I meant a channel interleaver, i.e., an
interleaver/deinterleaver between the encoder and decoder (i.e., before
the decoder).   Sounds like you're doing that, and you have codewords
that are long enough to maintain gain compared to the convolutional code.

So I don't know what's wrong, but there's nothing fundamental preventing
the LDPC from outperforming the Convolutional Code for the conditions
you describe.

--
Eric Jacobsen
Minister of Algorithms
Abineau Communications
http://www.abineau.com

 0

>
>Looks like a trivial mistake somewhere. Are you sure the LDPC word is
>not getting shifted by one bit or so? The convolutional decoder will
>self synchronize, the LDPC won't.
>

I do not think so because if that was the case, I would not get 0 BER in
the absence of noise.

Thanks.

Chintan Shah

 0
Reply cpshah99 (335) 2/16/2010 8:46:11 AM

HI Guys

I still have the same problem as stated above. However, I tried to change
my channel.

My system is as below:

info -> LDPC -> Interleaver -> BPSK -> y=channel+noise

y -> MMSE Equalizer -> 2/sigma^2*\hat{x} -> Deinterleave -> LDPC decode
(feedforward only)

In above \hat{x} is the soft o/p from equalizer.

For Channel A of Proakis, which is not severe, I am getting good
performance after 50 iterations of LDPC code.

Now, when I change the channel to Proakis channel B, the BER after the
first iteration is worse than the uncoded BER. Additionally, as the
iteration increases, the BER does not improve.

The reason for this I found is that at high SNR, which is the case for such
channels, the Horizontal step of the LDPC decoding gives values {+14.5
-14.5} and the vertical step gives values in the range of \pm 1000s which
is not quite large.

So I think that at high SNR, *something* causes problem for LDPC decoder.

Any idea????

Chintan

 0
Reply cpshah99 (335) 2/18/2010 1:58:17 PM

On 2/18/2010 6:58 AM, cpshah99 wrote:
> HI Guys
>
> I still have the same problem as stated above. However, I tried to change
> my channel.
>
> My system is as below:
>
> info ->  LDPC ->  Interleaver ->  BPSK ->  y=channel+noise
>
> y ->  MMSE Equalizer ->  2/sigma^2*\hat{x} ->  Deinterleave ->  LDPC decode
>     (feedforward only)
>
> In above \hat{x} is the soft o/p from equalizer.
>
> For Channel A of Proakis, which is not severe, I am getting good
> performance after 50 iterations of LDPC code.
>
> Now, when I change the channel to Proakis channel B, the BER after the
> first iteration is worse than the uncoded BER. Additionally, as the
> iteration increases, the BER does not improve.
>
> The reason for this I found is that at high SNR, which is the case for such
> channels, the Horizontal step of the LDPC decoding gives values {+14.5
> -14.5} and the vertical step gives values in the range of \pm 1000s which
> is not quite large.

Not quite sure what you mean here by horizontal and vertical steps in
the LDPC, or  what \pm 1000s means.  Is this relevant for how your soft
decision works?

> So I think that at high SNR, *something* causes problem for LDPC decoder.
>
> Any idea????
>
> Chintan

Is the bottom line that errored bits are getting high-confidence scores
in the soft decision process?   You could try AWGN with hard-decision
and see if the decoder still converges.

A couple thoughts I was having before you mentioned the
horizontal/vertical stuff:

1.  Have you looked at the input error distributions and how they may be
affecting the problem?   It could be that the channel interleaver isn't
spreading the bits around enough, although this shouldn't make much
difference with an LDPC that looks reasonably random.  If the LDPC has a
lot of structure it may be more sensitive to input error distribution.

2.  Is Proakis B a single channel instance or a statistical description?
My question is whether the problem is with just one particular
channel instance or an entire family of channels in a model?   If it's
just one channel instance, it's entirely possible that you just found a
pathological case that breaks the decoder.  Those happen.

3.  Have you tried different scheduling algorithms in the LDPC?  It
could be that something is amiss there.

--
Eric Jacobsen
Minister of Algorithms
Abineau Communications
http://www.abineau.com

 0
Reply eric.jacobsen (2636) 2/18/2010 10:33:56 PM

>
>Not quite sure what you mean here by horizontal and vertical steps in
>the LDPC, or  what \pm 1000s means.  Is this relevant for how your soft
>decision works?
>

By horizontal and vertical I mean the way the bit and check nodes are
uypdated.

>1.  Have you looked at the input error distributions and how they may be
>affecting the problem?   It could be that the channel interleaver isn't
>spreading the bits around enough, although this shouldn't make much
>difference with an LDPC that looks reasonably random.  If the LDPC has a
>lot of structure it may be more sensitive to input error distribution.
>

The performance is same regardless of if we use interleaver or not. Which
is true as you said because LDPC code is random.

>2.  Is Proakis B a single channel instance or a statistical description?
>   My question is whether the problem is with just one particular
>channel instance or an entire family of channels in a model?   If it's
>just one channel instance, it's entirely possible that you just found a
>pathological case that breaks the decoder.  Those happen.
>

In proakis comms book, there are total 3 channels (chap 10, 4th ed). I am
getting gain only for channel A but channels B and C, there is no gain.

>3.  Have you tried different scheduling algorithms in the LDPC?  It
>could be that something is amiss there.
>

I do not know what you mean by this scheduling algorithms as I have just
started to work with LDPC. It will be great if you can expalin a little
bit.

Thanks.

Chintan Shah

 0
Reply cpshah99 (335) 2/19/2010 11:37:20 AM

On 2/19/2010 4:37 AM, cpshah99 wrote:
>> Not quite sure what you mean here by horizontal and vertical steps in
>> the LDPC, or  what \pm 1000s means.  Is this relevant for how your soft
>> decision works?
>>
>
> By horizontal and vertical I mean the way the bit and check nodes are
> uypdated.
>
>> 1.  Have you looked at the input error distributions and how they may be
>> affecting the problem?   It could be that the channel interleaver isn't
>> spreading the bits around enough, although this shouldn't make much
>> difference with an LDPC that looks reasonably random.  If the LDPC has a
>> lot of structure it may be more sensitive to input error distribution.
>>
>
> The performance is same regardless of if we use interleaver or not. Which
> is true as you said because LDPC code is random.
>
>> 2.  Is Proakis B a single channel instance or a statistical description?
>>    My question is whether the problem is with just one particular
>> channel instance or an entire family of channels in a model?   If it's
>> just one channel instance, it's entirely possible that you just found a
>> pathological case that breaks the decoder.  Those happen.
>>
>
> In proakis comms book, there are total 3 channels (chap 10, 4th ed). I am
> getting gain only for channel A but channels B and C, there is no gain.
>
>> 3.  Have you tried different scheduling algorithms in the LDPC?  It
>> could be that something is amiss there.
>>
>
> I do not know what you mean by this scheduling algorithms as I have just
> started to work with LDPC. It will be great if you can expalin a little
> bit.
>
> Thanks.
>
> Chintan Shah

The scheduling algorithm refers to the method used in the decoder to
update the metrics.  e.g., Flooding refers to updating all check nodes
before updating any variable nodes.  Other schedules allow successive
variable nodes to update as new check node information is available.
There are a number of scheduling schemes, and naturally each performs a
little differently.   I suspect that sensitivity to error distributions
may change with scheduling as well.

Don't know whether it will make a difference in your case, but it might
be worth looking into.

--
Eric Jacobsen
Minister of Algorithms
Abineau Communications
http://www.abineau.com

 0
Reply eric.jacobsen (2636) 2/20/2010 1:32:57 AM

>The scheduling algorithm refers to the method used in the decoder to
>update the metrics.  e.g., Flooding refers to updating all check nodes
>before updating any variable nodes.  Other schedules allow successive
>variable nodes to update as new check node information is available.
>There are a number of scheduling schemes, and naturally each performs a
>little differently.   I suspect that sensitivity to error distributions
>may change with scheduling as well.
>

Sounds interesting.

Thanks very much.

Chintan Shah

 0
Reply cpshah99 (335) 2/20/2010 12:50:45 PM

10 Replies
400 Views

Similar Articles

12/8/2013 12:20:48 AM
[PageSpeed]

Similar Artilces:

The Code One
http://www.thecodeone.com/vb/index.htm

newbie code
I don't understand why this code is doing what its doing can someone explain? I would think that every 1 second the word child gets printed to the screen.... but what happens is all 10 get printed at once!!!??? why does it do this? thanks #include <iostream> #include <stdlib.h> #include <unistd.h> using namespace std; int main() { pid_t mypid; mypid=fork(); if(mypid==0) { for(int i=0;i<10;i++) { cout<<"child"; sleep(1); } return 1; } //cout<<"Parent"; return 0; } "Robert Smith" <none@none.com> writes: > I don't understand why this code is doing what its doing can someone > explain? I would think that every 1 second the word child gets printed to > the screen.... but what happens is all 10 get printed at once!!!??? why does > it do this? > thanks Please indent your code. [...] > cout<<"child"; cout is line buffered, meaning that whatever you write there is buffered until you write a newline, or close the stream. In your case, you write the string "child" 10 times to the buffer. When the program exits the buffer is flushed and you see all 10

code problem
Dear all I have some problem in this code, I need to find the integration of (f) such that f dependent on s but unfortunately i can not because I ca not to defined x,y,z dependent on s to find f. so anybody can help me to solve this problem please. x0=0.1;y0=0.3;z0=0.2;eta0=1;p=1;j=1; L = sqrt(abs(4*p^2-8*p+4-j^2*p^2-2*j^2*p-j^2)); z = z0*exp(-2*s); x = x0*exp(s).*cos(L*s/(2*p+2))-(y0*j*p+y0*j +2*x0*p-2*x0).*exp(s).*sin(L*s/(2*p+2))/L; y = -x0*exp(s).*(-L*sin(L*s/(2*p+2))+cos(L*s/(2*p+2))*(2*p-2))/(j*(p +1))+(y0*j*p+y0*j+2*x0*p-2*x0).*exp(s).*(sin(L*s/(2*p +2))*(2*p-2)+cos(L*s/(2*p+2))*L)/(L*j*(p+1)); B =[p*x/(p+1)-(1/2)*j*y, 2*p*y/(p+1)+(1/2)*j*x, -2*z]; JdotB = -2*j*z; R=sqrt(x.^2+y.^2); eta = eta0.*(exp(-R.^2).*exp(-z.^2)); f = -eta.*JdotB; len = quad('f',0,1) alimathmatics_76@yahoo.com wrote in message <8a519d24-f8e6-4dd4-b523-96cb28251d62@c11g2000vbe.googlegroups.com>... > Dear all > I have some problem in this code, I need to find the integration of > (f) such that f dependent on s but unfortunately i can not because I > ca not to defined x,y,z dependent on s to find f. so anybody can help > me to solve this problem

crc code
I do not have the communications toolbox and I am need of code that is able to perform CRC calculations. Can anybody point me in the right direction? Thank you. Ben wrote: > > > I do not have the communications toolbox and I am need of code that > is able to perform CRC calculations. Can anybody point me in the > right direction? Thank you. ---------------------------------------------------------------------- ----- I also need help with matlab codes that can perform a 16 bit CRC when a string in inserted into a matlab programme.(Specifically, for test, inserting a string of commands from serial port terminal programme into Matlab, and the checksum being calculated in matlab and inserted before this string is passed to an equipment). I have found a few related CRC blocks in Simulink but i cant find any further documentations and examples on implementing them in matlab. the only sample code i found with some regards to crc calculation in matlab is as follow: ------------------------------------------------------------- % Generate a CRC by using the gfdeconv function. Represent the data and the % generator polynomial in descending powers. Note that any data passed

Code Performance
Hi all, Can anyone give me some pointers as to how to speed up the following code? The support guys are too slow and I need to get this done. It's a basic implementation of a genetic algorithm to define the characteristics of a population of robots moving randomly in a grid containing various resources (and make them last as long as possible). The majority of the code and the class operations are very quick, it's just the simulation of each generation in the environment that is slow (and keeps getting slower as the GA works to prolong the life of the robots). See the '%Run.... Apart from that, I see that you are using a lot of if/else statements inside double for loops. Vectorizing your code should give you speedups, but I can't say for sure without running the profiler. What would be the total runtime for the script? If it takes too much time to run, then it would suit us better if you posted a profile report, if you already have one. When doing that, it would be nice to show the JIT accelerated lines (an undocumented feature, see the following link). http://undocumentedmatlab.com/blog/undocumented-profiler-options/ You're right, I've seen

code #3
please, Is there any codes for simulation for CMA algorithm,LSCMA algorithm and OCMA algorithm for the adaptive antenna system.

Problem With Code
Hello All, I am a noob with programming and just starting to learn. My teacher wants us to make a program that will keep asking the user if they want to quit. Below is my code so far. My problem is the loop will repeat with any valuse given. If anyone could help it would be greatly appreciated. Thank you #include <iostream> using namespace std; char main() { char ans; do { cout << "Would you like to quit? (y/n)" << endl; cin >> ans; } while ((ans = 'n')&&(ans = 'N')); return 0; } colo.avs96@gmail.com wrote: > Hello All, > > I am a noob with programming and just starting to learn. My teacher > wants us to make a program that will keep asking the user if they want > to quit. Below is my code so far. My problem is the loop will repeat > with any valuse given. If anyone could help it would be greatly > appreciated. Thank you > > > #include <iostream> > > using namespace std; > > char main() > { > char ans; > do > { > cout << "Would you like to quit? (y/n)" << endl; > cin >> ans; > } > while ((ans

PDG code
HI All, Can somebody please give a piece of C# code which generates PDF doc from word document. Waiting for code snipper dude. Thanks in advance -raj .... without any external tools? A "piece" of code is not sufficient. You need a "bit" more than few lines of code.... But if you need to drive external tools, like MS Word, Ghostscript, etc. there are many examples on internet (see http://www.fhtino.it/code/code002.html). Fabrizio Raj wrote: > HI All, > > Can somebody please give a piece of C# code which generates PDF doc > from word document. > > Waiting for code snipper dude. > > Thanks in advance > -raj

code #4
hi ! what does the following code do :- keep= zeros(149*228); wts = data(:,:,9); WTS = NaN*zeros(size(wts,1),size(wts,2)); WTS(keep)=wts(keep); also can you explain what does- (:,:,9) mean .the help menu says it is the 9th page of the 3D array , can you be more explicit. thanks ritika: > what does the following code do :- <SNIP several fundamental ML coding/language problems... lucky you! it's all here: <http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/matlab_prog.html> us

p code ???
I had my code in.m format and I wanted to convert that to .exe or a p file....As I didn't had matlab compiler I used the p code....But the problem is when I generate the p file..and then drag into Matlab for its execution..error comes i.e " Error using ==> open Can't edit p file "..I am not trying to edit that just trying to execute it...Also is there any other way to make the code inaccesible ? "ishjun " <email.ishjun@gmail.com> wrote in message <iqtrm6$on0$1@newscl01ah.mathworks.com>... > I had my code in.m format and I wanted to convert that to .exe or a p file....As I didn't had matlab compiler I used the p code....But the problem is when I generate the p file..and then drag into Matlab for its execution..error comes i.e " Error using ==> open Can't edit p file "..I am not trying to edit that just trying to execute it...Also is there any other way to make the code inaccesible ? Hi, Why are you trying to "drag it" into MATLAB? You should be able to just use the pcoded file. Wayne Thanks man...I guess I was doing that wrong 'by dragging'...It just works as a function just as .m "ishjun