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文件的内容:
这种方法自己还是感觉有些麻烦,不知道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);
文章评论(0条评论)
登录后参与讨论