原创 Matlab生成循环移位M序列,并计算M序列的自相关

2010-2-27 16:13 8482 11 11 分类: 通信

1、产生循环移位M序列   


    最近做一个扩频通信方面的东西,需要产生一组扩频码,最简单的就是用一个M序列,循环移位产生过。在用Matlab产生的时候发现Matlab有两个移位命令:


(1)、矩阵循环移位:circshift


    例如:b = circshift(a,[x,y]) 其中a为待移位的矩阵,x表示上下移位位数(正数表示向下移位),y表示左右移位位数(正数表示向右移位)


>> x = [1,2,3;4,5,6;7,8,9]

x =

     1     2     3
     4     5     6
     7     8     9

>> y = circshift(x,[1,-1])

y =

     8     9     7
     2     3     1
     5     6     4

(2)、比特移位:bitshift(不能做循环移位)

    例如:b = bitshift(a,k,n) 其中a是待移位数据,k是移位的位数(正数表示左移),n为移位后保留的位数(当左移,超出的位数将被舍弃)

>> x = 131;
>> x_bit = dec2bin(x)

x_bit =

10000011

>> y = dec2bin(bitshift(x,2,8))

y =

1100

    要想完成bit的循环移位,可以采用这样的方法:

    例如,待移位的数据为x = 3139384450,它是一个32bit的M序列,现在需要产生x依此循环左移一位所产生的共32个数据,可以采用以下程序完成,将产生的32个数据写入一个.mif文件:

x = 3139384450;
y = dec2bin(x);     //将10进制变为2进制,这时二进制数据的0,1其实是用字符表示的,这样就形成了一个1x32的行向量

z(1) = x;
for i = 2 : 32
    y = circshift(y,[0,-1]);    //对与每一行的数据进行左移
    z(i) = bin2dec(y);          //将移位后的数据再次变为十进制
end

miffile('dsss_code.mif',z,32,32);   //调用miffile函数,将数据写入.mif文件

一下是mif文件的内容:

image

    这种方法自己还是感觉有些麻烦,不知道Matlab还有没有更好的函数可以实现bit的循环移位。

2、计算M序列的自相关

    计算相关可以利用xcorr函数,计算自相关y = xcorr(x)

a = bitget(3139384450, 32:-1:1);    //3139384450是一个32bit的M序列对应的10进制数,所以先变成32个0,1数据。
b = xcorr(a);
plot(b);

image

文章评论0条评论)

登录后参与讨论
我要评论
0
11
关闭 站长推荐上一条 /2 下一条