Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Coded vs uncoded performance of Reed-Solomon codes

Status
Not open for further replies.

serhannn

Member level 4
Joined
Sep 28, 2010
Messages
69
Helped
2
Reputation
4
Reaction score
2
Trophy points
1,288
Activity points
1,939
I designed a Reed-Solomon decoder in Matlab. Now, I need to make a simulation to compare the performance of coded vs uncoded data sent over an AWGN channel. What would be steps to follow? I think, I first have to create a random sequence of symbols and modulate them. I will use BPSK modulation. Then, how can I create the noise and obtain the symbol errors? Should I turn my Reed-Solomon decoder into a function and use it that way to decode the noisy channel?
Also, for a reliable simulation, how many data points are needed? Can someone give me a general outline of how I should approach the problem?
,
Thanks a lot.
 

Hi,

I would suggest looking at any good Digital communication book e.g., Sklar, Lindsay and MK Simon, Haykin, Proakis all of them detail the exact steps you will need.

Nevertheless, to start you off, you can consider a Random sequence -> Encode-> Modulate -> AWGN (Box mueller) -> receive -> demodulate->Decode (Symbol errors)

Number of data points if your using something like RS, and want a practical implementation. it depends on the SNR but to get the full curve could be difficult, you can look at 10^6 as a good enough.

Have fun
 
kalyanasv, thanks for your explanation, it has become useful for me. There is only one thing I didn't get. About AWGN, what do you mean by "Box mueller"? Is it a method to add AWGN noise? Also, in Matlab's Help manual, it says at least 100 data points are needed for a reliable simulation. Should I use more (10^6, as you say)?
 

Box muller is a direct method to generate gaussian random numbers like the "randn" function in matlab. Using matlab just use randn and generate the gaussian noise.

The precision and the curve you want to generate dictates teh number of simulation points e.g. 100 points means you will get a Symbol Error Rate curve upto 10^-2. If you have 10^6 you will get 10^-6.
It is your choice, to test your code 10^-2 or 10^-3 should be sufficient, to keep simulation time minimal.
 

Thanks, I got the simulation right for sufficient data points. I have another question though. I specified some Eb/No values (1-10 dB) at the start of the simulation and then I convert them to SNR for generating the AWGN. In Matlab's help, it's written that the conversion should be done like this:

snr = EbNo+3+10*log10(K);

where I defined: K = log2(M)*code_rate; M=2 for BPSK modulation.
Can you explain this formula? It seems to work but I did not quite get the logic behind it. Why do I have to add 3 to EbNo first and then sum it up with 10*log10(K)?
 

I certainly do not understand an empirical 3 in that equation:

but If you look up the matlab website: **broken link removed**

you will note that the SNR=Eb/No+10logk-10log(Tsym/Tsamp)

where the last term defines the symbol to sampling period. From which it is clear that having a high sampling rate will obviously improve the SNR. The "3" might be a specific example.

Good luck
 

hi,
looking into your posts suggests you have sufficient knowledge in reed-solomon codes.
I have been working on this code for my project. More specifically , it is RS(15:13) code with code word size 4bits.
I am able to successfully detect and correct 1 nibble error. But, i am unable to detect more than 1 error.
Accordingly, the RS code under consideration will be able to detect (15-13) =1 errors and correct upto (15-13)/2 =1 errors.
I have tried reading several books but im unable to find a logic that can detect the second error in my data.

Pls help me....
 

With RS codes, you should be able to detect (n-k) errors and correct up to (n-k)/2 errors. What kind of algorithm are you using in your code, is it the Berlekamp-Massey algorithm? In Berlekamp-Massey, you construct an error-locator polynomial to detect the location of the errors, then with a seperate error-magnitude polynomial, you find the magnitude of these errors. With this two information you can correct (n-k)/2 errors. Since the detection capability is (n-k), I suppose error-locator polynomial finds (n-k) errors. Probably, you should concentrate on the information provided by this polynomial.

If you are using any other algorithm (Peterson-Gorenstein-Zierler or Euclidean), I suggest you to refer to the books "Error Control Systems for Digital Communication and Storage" by Wicker and "Error Control Coding" by Lin and Costello. These are great sources also for the Berlekamp-Massey algorithm.
 

With RS codes, you should be able to detect (n-k) errors and correct up to (n-k)/2 errors. What kind of algorithm are you using in your code, is it the Berlekamp-Massey algorithm? In Berlekamp-Massey, you construct an error-locator polynomial to detect the location of the errors, then with a seperate error-magnitude polynomial, you find the magnitude of these errors. With this two information you can correct (n-k)/2 errors. Since the detection capability is (n-k), I suppose error-locator polynomial finds (n-k) errors. Probably, you should concentrate on the information provided by this polynomial.

If you are using any other algorithm (Peterson-Gorenstein-Zierler or Euclidean), I suggest you to refer to the books "Error Control Systems for Digital Communication and Storage" by Wicker and "Error Control Coding" by Lin and Costello. These are great sources also for the Berlekamp-Massey algorithm.

Serhann,
I have tried using the Euclidean algorithm. Since RS(15,13) code has only 2 syndromes, my syndrome equation would be S1(x) + S0

Using further equations i finally got an the error locator polynomial which is of degree 1.(From R&D white paper WHP031 , published 2002)
This means i would find only one error location which is the root of the equation.

Can u please try explaining me how to detect the second error

I am yet to design the code completely. Im still working on it.
Presently, I can get an error location with s0 + ~s1
and error value as s0

---------- Post added at 21:32 ---------- Previous post was at 21:27 ----------

https://downloads.bbc.co.uk/rd/pubs/whp/whp-pdf-files/WHP031.pdf
Here is the paper i am currenly referring to.
The paper has an example which i am currenly looking into.
The example is showed for RS(15,11). which means we can detect upto 4 errors and correct 2 errors.
So according to the example, the error locator polynomial is of degree 2 so, the number of error locations he can get is 2.
In order to find 4 error locations, we need a polynomial of degree 4?? is this right??
If yes, how do we get the 4 degree polynomial
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top