Code covered by the BSD License  

Highlights from
Turbo Code

4.375
4.4 | 9 ratings Rate this file 88 Downloads (last 30 days) File Size: 10.4 KB File ID: #39423
image thumbnail

Turbo Code

by

Yogesh K Soniwal

 

11 Dec 2012 (Updated )

Encoding: RSC, Decoding: BCJR

| Watch this File

File Information
Description

Modulation: BPSK
Channel: AWGN
Encoder: G(D)=[1,(1+D+D^2)/(1+D^2)]

Required Products Communications System Toolbox
MATLAB
MATLAB release MATLAB 8.1 (R2013a)
MATLAB Search Path
/
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (58)
26 Jan 2015 joydeep bhattacharya

joydeep bhattacharya

Hi Yogesh,
Can you let me know how you got to know about how the states are occuring?i.e.how does transition occur between the states?Also,how will it change in case of Qpsk?Thanks in advance

Comment only
11 Jan 2015 Yogesh K Soniwal

Yogesh K Soniwal

Hi popeye,

If you want to write the code for QPSK modulation, you'll have to change it starting from information bit generation. As you have to send two bit streams.

Then you'll have to decode the modulated bits using BCJR decoder. The formula for BER will also change.

Please refer to

http://in.mathworks.com/matlabcentral/fileexchange/39847-qpsk-performance-comparison-for-wireline-and-wireless-channel/content/qpsk.m

Thanks
Yogesh

Comment only
11 Jan 2015 Yogesh K Soniwal

Yogesh K Soniwal

Dear Keyvan,

The alpha and beta values are not wrong. If you read the comment of these functions, it says." Each column is for states 00,10,01 and 11 RESPECTIVELY".

They are NOT in 00, 01, 10 and 11 order.

Thanks
Yogesh

Comment only
07 Jan 2015 popeye

popeye

Hi Yogesh,

Your code is clear for me, but I have questions as follows:
1. I want to use a higher order modulation like QPSK or 16QAM. So, in the receiver, the received signal should be passed through demapper block first. Then, we get the values of LLR_demapper (soft demodulation), which becomes the input for the turbo decoder. My point here is, at the moment, the input of turbo decoder is not the original received signal, some parameters in your code should be changed right ? Like, channel reliability, etc. How we can do it ?

2. Just a comment. I do agree with the guy who ask you about using 1/sqrt(2*1/3*SNR) instead of 1/sqrt(2*SNR) as in your code.

Hope to receive your reply soon,
Cheers

30 Dec 2014 Keyvan Shahin

Keyvan Shahin

Hi Dear Yogesh,
I am trying to generalize your code for a 16 state code, but I have a problem with your alpha and beta functions, I think they are wrong, but the result is right, and I'm confused a little. I would appreciate if you would help me with this:
first as I look at the trellis and the gamma(1:4, 1:2) and I think alpha and beta should be like this:
ALPHA(1,i)=((GAMMA(1,j)*ALPHA(1,i-1))+(GAMMA(3,j)*ALPHA(3,i-1)));
ALPHA(2,i)=((GAMMA(3,j+1)*ALPHA(3,i-1))+(GAMMA(1,j+1)*ALPHA(1,i-1)));
ALPHA(3,i)=((GAMMA(2,j)*ALPHA(2,i-1))+(GAMMA(4,j)*ALPHA(4,i-1)));
ALPHA(4,i)=((GAMMA(4,j+1)*ALPHA(4,i-1))+(GAMMA(2,j+1)*ALPHA(2,i-1)));

BETA(1,i)=(GAMMA(1,j)*BETA(1,i+1))+(GAMMA(1,j+1)*BETA(2,i+1));
BETA(2,i)=(GAMMA(2,j)*BETA(3,i+1))+(GAMMA(2,j+1)*BETA(4,i+1));
BETA(3,i)=(GAMMA(3,j+1)*BETA(2,i+1))+(GAMMA(3,j)*BETA(1,i+1));
BETA(4,i)=(GAMMA(4,j+1)*BETA(4,i+1))+(GAMMA(4,j)*BETA(3,i+1));

if you could help what am I doing wrong.
ty very much. and ty for your simple and well written code.

Comment only
25 Nov 2014 Yogesh K Soniwal

Yogesh K Soniwal

C0 is same as P0, and C1 is same as P1. Maybe the notation is a bit confusing.

Comment only
24 Nov 2014 Gamma

Gamma

thanks a lot..
one small quastion,,in your code of encoder u r calculating in loop C0 and C1 and with this C0 and C1 you are calculating Po ans P1..its clear..but at which stage of Encoder diagram you r calculating co and c1?this is not so clear for me--i mean after feedback value and input or where ?
can u plz clear it..i will be thankful t u.

Comment only
21 Nov 2014 Yogesh K Soniwal

Yogesh K Soniwal

Please refer

http://paginas.fe.up.pt/~sam/textos/From%20BCJR%20to%20turbo.pdf

Comment only
17 Nov 2014 Gamma

Gamma

thanks Yogesh..i habe read this paper..its good..but can u tell me from which BOOK you have used this formula...i mean Reference of Book or any paper..
and how u demodelate your singal,because R0,R1 R2 are demodulated...'?
thanks

Comment only
14 Nov 2014 Yogesh K Soniwal

Yogesh K Soniwal

Hi Muhammad

Please refer to

http://home.iitk.ac.in/~ysoniwal/Term_Paper_Reports/EE624.pdf

for formulae of alpha, beta and gamma

Comment only
11 Nov 2014 Kondakov

Kondakov

 
05 Nov 2014 Gamma

Gamma

Hi,Yogesh

i have seen ur code and also paper,i hava quastion how u demodelate your singal,because R0,R1 R2 are demodulated but which formula are u using?

and the formula for calculating gamma?where did u got this i mean can u share any reference file.thanks in advance.

Comment only
03 Jul 2014 Sanchis

Sanchis

Hi Yogesh,

your code is very well!! But there is a thing that I don't understand and it is: I don't understand as you encode P1 and P0. I have readed the description in page 2 and 3 of your paper, but I don't understand, Could you explain me it? And as you implements it in the code?

Thanks you.

01 May 2014 Yogesh K Soniwal

Yogesh K Soniwal

Hi Long
I have not checked if there is any difference in the performance if we use extrinsic information.
If you want to use extrinsic information, just substract the intrinsic term given on page 4 of
http://home.iitk.ac.in/~ysoniwal/Term_Paper_Reports/EE624.pdf
from aposteriori information.

Comment only
15 Apr 2014 popeye

popeye

Hi Yogesh,

As from your code, the information you exchanged between two decoders is the a-posteriori information not extrinsic information as in theory. Is there any difference in the performance ? If I want to use extrinsic information in this case, how I can ? Thanks.

Comment only
27 Mar 2014 Yogesh K Soniwal

Yogesh K Soniwal

Hi Tongyang
In BCJR decoder we exclude the intrinsic information and pass the aposteriori probability from one decoder to another for subsequent detection

Comment only
13 Mar 2014 tongyang

tongyang

from your PDF report, you mentioned that only extrinsic information is exchanged between two BCJR decoders. However, in your MATLAB code, I think the exchanged information is the a-posteriori information. Is it correct? Thanks.

Comment only
12 Mar 2014 Yogesh K Soniwal

Yogesh K Soniwal

yes

Comment only
05 Mar 2014 mary

mary

hi.. is the used interleaver a random permutation interleaver?

Comment only
17 Feb 2014 Filip

Filip

Yogesh, you should divide the SNR by 3 because the SNR is defined with respect to the energy per information bit (Eb), and not per coded bit (Es). This code has a rate of 1/3, right? Therefore, you need to consider the code rate when you corrupt the signal by noise.
Eb/No=(1/rate)*Es/No = (1/rate)*(mu^2)/(2*sigma^2)

Comment only
15 Feb 2014 Yogesh K Soniwal

Yogesh K Soniwal

Hi Filip
I don't think there is any problem in scaling. Why would you divide the SNR in all 3 bits?

Comment only
13 Feb 2014 Filip

Filip

One little correction ,should be 2*1/3*SNR, I forgot the factor 2.

Comment only
13 Feb 2014 Filip

Filip

Hey Yogesh. Are you sure the SNR scaling is correct in the turbo.m file? You assume a certain SNR, but you apply the same value to R0, R1 and R2, which is incorrect because you have not considered the code rate. The correct thing would be the following: instead

R0=sqrt(SNR(k))*mod_code_bit0+randn(1,N);

you should have written

R0=sqrt(1/3*SNR(k))*mod_code_bit0+randn(1,N);

because your code rate is 1/3.
By doing as you did the corruption is very less and your output BER is smaller.

Comment only
26 Jan 2014 devina etwara

devina etwara

Hi Yogesh.. i have an something to ask. actually whenever i'm increasing the snr gap, that is i'm changing it to 0.2 interval.. i am getting peaks .. like the graphs is shooting up and then coming down.. i wanted to know that is normal behaviour of turbo codes... i am getting little confused and even getting stressed as i am using your code as my base start for my dissertation .. please do lemme know about it.. please i am hope to hear from you soon

Comment only
06 Jan 2014 wang jack

wang jack

 
05 Dec 2013 mary

mary

hi yogesh,
let's suppose that i have value "A"
I want to multiply the encoded data by it and than add noise then dividing the result by the same value then decode the resulting data:
suppose my data is X , and nose is N;
I want to do the following

s=X.*A
then add noise ss=s+N
then the data that will be decoded=ss./A

can you do that to your code??

Comment only
11 Nov 2013 Yogesh K Soniwal

Yogesh K Soniwal

Hi Jang,
Please refer to page No. 5 for alpha and page No. 9 for (j+2) in this link
http://home.iitk.ac.in/~ysoniwal/Term_Paper_Reports/EE624.pdf

Comment only
11 Nov 2013 jang

jang

I do not know how the alpha is defined.
Also, j +2, why are you used?

24 Oct 2013 Yogesh K Soniwal

Yogesh K Soniwal

Sravya,
Download all the codes in one directory then run turbo.m

Comment only
24 Oct 2013 sravya

sravya

Error in turbo (line 43)
dlg = ProgressDialog();
i got this error when i simulated it please help me in this.. thanq...

Comment only
18 Sep 2013 ANAND

ANAND

hello sir...
am doing project in increasing energy efficiency using turbo code.... i calculated Eb value for BPSK modulation... have to substitute the Eb value in turbo code.... how can i do it....
plz give me your ans to my mail id:
edalanand@gmail.com

Comment only
17 Sep 2013 Yogesh K Soniwal

Yogesh K Soniwal

The interleaver used in this code is random (line no. 4 of turbo.m) .. replace your designed interleaver with this one.

Comment only
17 Sep 2013 mustafa

mustafa

HELLO SIR
your work is really perfect and i am concerned with the interleaver how can i replace the existing interleaver by my designed interleaver?

31 Jul 2013 vahid

vahid

hi tank u for ur code.the decoder depends on the snr but in reallity we dont know the snr how can we implement this code ?

Comment only
03 Jul 2013 triet ho

triet ho

why only has 3rd iteration? i saw picture has 4th iteration? can you update iteration higher? tks so much. can you send your updated code to my email: hobaominhtriet@gmail.com. tks you.

Comment only
28 Jun 2013 Yogesh K Soniwal

Yogesh K Soniwal

You can refer to code provided on this link for 16-QAM
http://www.dsplog.com/2007/12/09/symbol-error-rate-for-16-qam/

Comment only
25 Jun 2013 DUJIN KWON

DUJIN KWON

If I want to modify your program by using 16qam modulation instead of BPSK can you help me with that?

13 Jun 2013 Yogesh K Soniwal

Yogesh K Soniwal

no..performance for QPSK and BPSK will be different

Comment only
12 Jun 2013 mary

mary

will the performance be better when using QPSK modulation?? or it will be the same as when using BPSK?

Comment only
12 Jun 2013 mary

mary

Do you have a matlab code of it ? Can you do it for me please?

Comment only
12 Jun 2013 Yogesh K Soniwal

Yogesh K Soniwal

You have to transmit 2 bits for each symbol. And decode each of them individually. Refer to the QPSK simulation code.

Comment only
11 Jun 2013 mary

mary

If I want to modify your program by using QPSK modulation instead of BPSK can you help me with that?

Comment only
11 Jun 2013 Yogesh K Soniwal

Yogesh K Soniwal

Yes, the modulation used is BPSK.

Comment only
10 Jun 2013 mary

mary

another question i have >> the modulating you are using is BPSK right???

Comment only
10 Jun 2013 mary

mary

 
10 Jun 2013 mary

mary

i mean can we make the first RSC encoder of rate 2/3 ?? so according to this the second encoder will also be of rate 2/3

Comment only
09 Jun 2013 Yogesh K Soniwal

Yogesh K Soniwal

no..we are using the same bits permuted for the second RSC encoder, so we can't make this code rate 2/3.

Comment only
09 Jun 2013 mary

mary

So it means that to make it of rate 2/3 we should use two bits as an input to RSC encoders right? Is it possible with BCJR decoding?

Comment only
09 Jun 2013 Yogesh K Soniwal

Yogesh K Soniwal

There are two encoders. Information bits are coded using convolution code for the first encoder and their permutation is coded using convolution code for the second encoder, but only one bit is used for second encoder. So RSC encoder is rate 1/3.

Comment only
08 Jun 2013 mary

mary

okay and what about the bit rate of the RSC encoders??

Comment only
05 Jun 2013 mary

mary

okay thank you

Comment only
15 May 2013 Yogesh K Soniwal

Yogesh K Soniwal

Hi mary,
this is rate 1/3 code..

Comment only
15 May 2013 mary

mary

what is the bit rate of this encoder please??

05 May 2013 saikiran

saikiran

Hi, In the code when we increase block length the performance of the code should be increased in ber wise. But it is not the case happening?

Comment only
29 Apr 2013 mary

mary

or it is of 8 states?

Comment only
29 Apr 2013 mary

mary

okay it ran thank you

well this code is of 4 states trellis could you make it of 8 states ??

Comment only
28 Apr 2013 Yogesh K Soniwal

Yogesh K Soniwal

You have not downloaded 'parity_bit' function which is used by turbo.m . That's why this error is coming. Download all the other functions (alpha_1, beta_1,gamma_1, parity_bit, lappr) and then run turbo.m

Comment only
28 Apr 2013 mary

mary

hello
when i ran it using matlab 2012 an error occured
"Undefined function 'parity_bit' for input arguments of type
'double'." what do i do?

Comment only
Updates
30 Jul 2013

Iterations increased for better performance

17 Oct 2013

Encoding not done iteratively, used convolution for encoding

22 Oct 2013

Fixed Error in UI

31 Oct 2014

Submitted as a toolbox

Contact us