Turbo码中需要实现s-random随机交织器,
简单来说,就是要生成一个长度为n的随机序列,使得每一个数与前面s个数的距离(差值)都大于s. 用穷举的方法一个个测试显然非常得慢。
希腊学者07年底写的一篇<Generating Turbo code s-random interleavers with
application of the bubble search sorting method>基于冒泡的思想实现复杂度较低的s-random交织序列生成。
int interleaver(int n, int s, int *randseq)
{
int imed,p,si,k;
int cnt = 0; //迭代次数
int remain = n;
int *temparr = (int*)malloc(n*sizeof(int));
imed = p = 1;
//开始迭代
while(imed < n && cnt < MAX_ITERATE_CNT )
{
//test criteria
for(si=1; si<=s; si++)
{
if(imed < si || randseq[p] - randseq[imed-si] > s || randseq[imed-si] - randseq[p] > s) {
continue;
}
else {
break;
}
}
if(si <= s) { //不符合
p++