Matlab生成循環移位M序列,并計算M序列的自相關
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);
*部落格内容為網友個人釋出,僅代表部落客個人觀點,如有侵權請聯系從業人員删除。