#### Abstract

The problem of reconstruction of a channel code consists of finding out its design parameters solely based on its output. This paper investigates the problem of reconstruction of parallel turbo codes. Reconstruction of a turbo code has been addressed in the literature assuming that some of the parameters of the turbo encoder, such as the number of input and output bits of the constituent encoders and puncturing pattern, are known. However in practical noncooperative situations, these parameters are unknown and should be estimated before applying reconstruction process. Considering such practical situations, this paper proposes a novel method to estimate the above-mentioned code parameters. The proposed algorithm increases the efficiency of the reconstruction process significantly by judiciously reducing the size of search space based on an analysis of the observed channel code output. Moreover, simulation results show that the proposed algorithm is highly robust against channel errors when it is fed with noisy observations.

#### 1. Introduction

Channel code reconstruction problem is usually considered in noncooperative communication scenarios, where finding the structure and parameters of the channel code is a major goal of the receiver [1–14]. Since turbo codes are introduced in many standards and applications [15–22], blind reconstruction of turbo codes in practical noncooperative situations is a well motivated problem. This problem has been investigated in [1–4, 8, 11], where some of the code parameters are assumed to be known to the receiver, such as the number of input and output bits of each constituent convolutional code and the structure of puncturing matrix. Having the above parameters, the receiver becomes capable of separating the received coded stream into three sets [3]: systematic bits, parity bits of the first convolutional encoder, and parity bits of the second convolutional encoder. Now the turbo code reconstruction problem converts into three simpler reconstruction problems: two convolutional code reconstruction problems and one interleaver reconstruction problem.

However, in most practical noncooperative situations, the parameters of turbo code are unknown and thus should be estimated before applying reconstruction process or to test each possible set of parameters which is highly time consuming. To the best of the authors’ knowledge, no algorithm has yet been proposed for estimating these parameters, and this paper is the first to propose a novel method to estimate above-mentioned parameters before applying the turbo code reconstruction process. The proposed method reduces the search space of the reconstruction process significantly compared to [3] and makes the reconstruction process faster and more efficient. The proposed method is first formulated for noiseless streams and then it is adjusted for noisy observations.

The rest of the paper is organised as follows. In Section 2, system model is described. The method for estimating the turbo code parameters is proposed in Section 3 and experimental results are presented in Section 4. Finally, the paper is concluded in Section 5.

#### 2. System Model

We consider the system model of turbo code reconstruction as shown in Figure 1. In this model, input bits and their interleaved version are fed to the first and second convolutional encoders, respectively. The first encoder is an () convolutional code, where is the number of output bits, is the number of input bits, and is the memory length of the longest shift register of the encoder. Since convolutional codes used for parallel turbo codes are systematic [15], bits out of output bits are systematic bits, and the remaining bits are parity bits. With such configuration, the value of any parity bits is a function of recent systematic output bits and at most values of shift registers content. In the system model of Figure 1, the second convolutional code is also assumed to be an (, , ) convolutional code, but unlike the first convolutional encoder, its systematic bits are removed and only the remaining parity bits are used.

Since parallel turbo codes have the same number of input bits per constituent convolutional code [15], we assume and are equal and denote both by . Assume the length of input frames is ; then is a multiple of . Using this assumption, at each time step, bits out of input bits and bits out of the interleaver are fed to the first and second convolutional encoders, respectively. These input bits result in output bits; thus we can say that sets of input bits form an output frame with length .

As shown in Figure 1, a puncturing pattern can also be applied to the output frames to form smaller frame lengths and higher code rates. We use an matrix to represent puncturing pattern where is the puncturing period. Every row of** P** corresponds to one output bit; that is, the first row corresponds to the first systematic bit, the second row corresponds to the second systematic bit (or the first parity bit of the first convolutional encoder), and so on. Note that , where 0 implies that the corresponding bit is punctured. If elements out of ( of** P** take the value of 1, then the output frame length is . Note that we have implicitly assumed that is a multiple of , since the input frame needs to be a multiple of the puncturing period. Since the turbo codes employed in many applications such as CDMA 2000 [16] and WCDMA [17] are systematic parallel turbo codes, in this paper we consider systematic parallel turbo codes. The term “systematic” is used for a turbo code when none of its systematic bits are punctured. In systematic turbo codes all the elements of the first rows of** P** take the value of 1. Other elements of** P** can be either 0 or 1; however, it should be noted that none of the rows can be an all zeros vector.

All the previous works that address the turbo code reconstruction problem implicitly assume that the received coded stream is partitioned into three sets: systematic bits, parity bits of the first convolutional encoder, and parity bits of the second convolutional encoder. However, it should be noted that in order to do such partitioning we need to know the number of output bits of both encoders (i.e., and ) and the puncturing pattern (i.e.,** P**). But, in most practical noncooperative situations, these parameters are unknown and thus should be estimated before applying reconstruction process or to test each possible set of parameters which is highly time consuming. In this paper, a novel method is proposed to estimate the above-mentioned parameters before applying the turbo code reconstruction process. The proposed method reduces the search space of the reconstruction process significantly and makes the reconstruction process faster and more efficient.

#### 3. Proposed Method

Assume that the number of elements with the value of 1 in puncturing matrix is equal to . Using the same arguments as those detailed in [5], if the input data to the turbo encoder behaves as random data, we can say that the number of linearly independent blocks of received coded stream with length , assuming to be a positive integer, is at most equal to , where nonnegative integer takes at most the value of . This can be easily seen by noting that each block, out of blocks with length , is generated by linear combination of information bits and initial memory bits. When the Hamming weight in the last rows of** P** is smaller than , the value of the second should be interchanged with this Hamming weight. Let us denote the minimum value between and the Hamming weight in the last rows of** P** by . Thus, we can say that the number of linearly independent blocks of received coded stream with length is at most equal to . When we can say that parity bits of the second convolutional encoder in each puncturing period act like random independent data, so it can be concluded that in this case can take at most the value of . Since only the values of that results in are acceptable, we have
where and denotes the largest integer less than or equal to .

Starting from the first bit we partition the received bit stream into blocks with length and consider these blocks as the rows of a matrix named with size . Choosing the value of is arbitrary, but it should be selected in order to be much bigger than . Now, if we define function for the received bit stream in the domain of positive integer as follows: where denotes the rank of matrix , according to the aforementioned discussion in the beginning of this section, it is obvious that this function should have local minimum points at , where is given by (1). Moreover, the function values at these local minimum points are given as follows: By obtaining local minimum points and function values at these points for function it is possible to estimate the values of , , and parameters of turbo code, which can facilitate the turbo code reconstruction process.

If in the construction process of (whilst ) we eliminate the first * α* bits of bit stream (), the obtained matrix denoted by can help us to estimate the puncturing matrix. In fact, if the value of

*is chosen such that the first considered bit in construction of is a systematic bit in the first row of*

*α***P**, it is obvious that . On the other hand, if the value of

*is chosen such that the first considered bit in construction of is a systematic bit in other rows of*

*α***P**or a parity bit of the first convolutional code, we expect that . As a matter of fact, in such situations degree of freedom is increased which results in larger rank values. Finally, if the value of

*is chosen such that the first considered bit in construction of is a parity bit of the second convolutional code, we expect that in (at most) positions the equality holds, whereas, in the remaining positions, if any, the inequality holds.*

*α*Thus, we can define puncturing signature as a vector with length in the following way. For any , if the corresponding element in puncturing signature is set to 1; otherwise it is set to 0. Note that, by knowing the values of , , , and , construction of puncturing matrix** P** from puncturing signature is not unique, but definitely, the search space size for puncturing matrix is intensely reduced. Numerical results for implying this fact will be provided in the following section.

According to the above analysis, we are ready to present the proposed method for estimation of the number of input and output bits of both encoders (i.e., , , and ) and the puncturing pattern (i.e.,** P**).(1)Plot versus for , ( and are two arbitrary integers). Denote the set of the points at which the local minimums occur by and the set of the function local minimum values by , where . Define the set of such that for any .(2)Estimate the value of as follows: , where denotes the most frequent value in set .(3)Estimate the value of as follows: .(4)Estimate the value of as follows: .(5)Plot function versus * α* for , and then obtain the puncturing signature as stated before.(6)Using the estimated values of , , and puncturing signature we can consider feasible values of , , and to construct all possible puncturing matrices. Then, since the construction process of the turbo code can be called with any sets of these possible parameters, somewhere we expect that one of these calls successfully results in a turbo code structure. Estimated value of can as well help to make the size of the search space for constituent convolutional codes smaller.

Note that, compared to the current methods which should blindly pass any possible set of parameters to the turbo code construction process, the proposed method here tries to reduce the size of such large search space. Numerical results for comparison reasons are provided in the following section.

In formulation of the proposed method for estimation of turbo code parameters it is assumed that the observed turbo coded stream is noiseless. In such situation, the rows of matrix form a linear space denoted by . Similarly, the rows of matrix form a linear space denoted by . So, if the received data is noisy it is obvious that we can use the proposed algorithm on noiseless rows of and , and yet the same turbo code parameters as the noiseless case will be obtained. However, we should choose the number of the rows of and large enough in order that the number of the noiseless rows of these matrices becomes much bigger than .

In order to find the noiseless rows of , first we apply Valembois’ algorithm [7] on (noisy) rows of to find some words in the dual space of . Now, any rows of that is orthogonal to all obtained words in the dual space of can be considered as a noiseless row. A similar method can be used to find noiseless rows of .

Numerical and simulation results provided in the next section show that this algorithm is quite efficient in space search size reduction, and moreover it is also robust when it is fed with noisy and erroneous input.

#### 4. Experimental Results

For obtaining experimental results we consider three different turbo code structures. The characteristics of these codes are given in Table 1. The first code is the code applied in WCDMA standard and the two others are introduced in CDMA 2000 standard. In this table,** G**_{1}(*D*) and** G**_{2}(*D*) denote polynomial representation of generator matrix of the first and the second convolutional codes, respectively.

For comparison reasons, we set the first dimension of matrix to and set the value of and to 21 and 60, respectively. In Figure 2, function for turbo code* B* is plotted. For this code the set of the points at which the local minimums occur is . According to this set and as we expected, the distance between the consecutive points at which the local minimums occur is equal to . For some turbo codes, more than one set of local minimums can be observed. For example, function for turbo code* C* is shown in Figure 3. As it is apparent from this figure, two distinguishable sets of local minimum points are and . In such cases, the set with smallest local minimum values should be used to estimate turbo code parameters. The other local minimum set(s) in this case are formed due to the special structure of the constituent convolutional encoders and the puncturing pattern. For example, for code* C*, when the values of are selected from the set , , , linearly independent blocks of received coded stream would be less than ; however, the relative number of these linearly independent blocks, that is, , is higher compared to the situation in which the values of are selected from the right set which is , , , .

In Table 2, estimated parameters of turbo codes defined in Table 1 for the case of noiseless coded stream are given. As we can see, the given values for parameters , , and match the expected value. The last column of Table 2 represents the number of the potential sets of which can be considered according to the estimated values for and . For turbo codes* A* and* B*, the only potential sets of are those given in Table 1. But for turbo code* C* the number of the potential sets of is equal to 56. Note that this value is much smaller compared to the number of the potential sets in blind reconstruction. For example, if the reconstruction process operates blindly in the case in which the values of , , , and are assumed to be at most equal to 2, 3, 3, and 5, respectively, all possible puncturing matrices having these properties should be considered and the only constraint is that the number of 1 s in the examined puncturing matrices should be a factor of the output frames length which is assumed to be equal to 1200 in this case. It can be seen that in this case the search space size is equal to 461794 which is much larger than 56.

To evaluate the capability of the proposed method against channel noise, we consider that the turbo coded stream is first modulated by a binary phase shift keying (BPSK) modulator and then passed through an additive white Gaussian noise (AWGN) channel. Also, we define as the ratio of energy per transmitted bit () to the spectral noise density (). In Table 3, success probability for turbo code parameter estimation is given under the assumption of different values, considering the turbo codes defined in Table 1. The number of tests for each turbo code and SNR pair is set to 1000. As it is apparent from this table, when the value of is more than 5 dB, the probability of success is near 1, but for values around 3 dB the probability of success reaches 0.

Since turbo codes are supposed to perform in noisy channels, the low noise assumption for code reconstruction may seem too optimistic. However, it should be noted that in practical noncooperative situations, recognition of a communication system is usually done in higher values of signal to noise ratio compared to cooperative situations. In fact, in order to achieve such signal quality, we have no choice other than using ultra low noise receivers. Finally, it should be noted that the channel code reconstruction process is done once based on many observations of the channel code outputs and decision on which of the estimated code parameters to be picked as the true code parameters can be easily made based on the multiplicity and inferred confidence of the estimated sets.

#### 5. Conclusion

A novel method is proposed in this paper to estimate the parameters of turbo codes. These parameters are the number of input and output bits of both constituent convolutional encoders and the puncturing pattern while assuming that the target turbo code is systematic. It is assumed that receiver is only aware of the turbo coded bit stream. Numerical results confirm that the proposed method significantly reduces the size of the search space for reconstruction process of the turbo code. Moreover, simulation results indicate that when the proposed algorithm is fed with erroneous channel observations, the outcome is highly reliable as long as the value is more than 5 dB, demonstrating robustness of the proposed algorithm.

#### Conflict of Interests

The authors declare that there is no conflict of interests regarding the publication of this paper.

#### Acknowledgment

The authors would like to thank the anonymous reviewers for their helpful comments.