天天看點

matlab m序列擴頻,Matlab生成循環移位M序列,并計算M序列的自相關

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 m序列擴頻,Matlab生成循環移位M序列,并計算M序列的自相關

這種方法自己還是感覺有些麻煩,不知道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);

matlab m序列擴頻,Matlab生成循環移位M序列,并計算M序列的自相關

*部落格内容為網友個人釋出,僅代表部落客個人觀點,如有侵權請聯系從業人員删除。