在matlab中生成m序列
實驗環境為matlab2013b
1、首先編寫一個mseq.m檔案,內容為:
function[mseq]=m_sequence(fbconnection) n=length(fbconnection); N=2^n-1; register=[zeros(1,n-1) 1]; %移位暫存器的初始狀態 mseq(1)=register(n); %m序列的第一個輸出碼元 for i=2:N newregister(1)=mod(sum(fbconnection.*register),2); for j=2:n newregister(j)=register(j-1); end; register=newregister; mseq(i)=register(n); end
2、在matlab中開啟這個檔案
3、在matlab的命令列視窗中執行
primpoly(7,'all')
這個命令的目的是得到7階M序列的所有本原多項式,如果想得到其他階的m序列,自行修改數字7即可。
4、得到的結果為
Primitive polynomial(s) = D^7+D^1+1D^7+D^3+1D^7+D^3+D^2+D^1+1D^7+D^4+1D^7+D^4+D^3+D^2+1D^7+D^5+D^2+D^1+1D^7+D^5+D^3+D^1+1D^7+D^5+D^4+D^3+1D^7+D^5+D^4+D^3+D^2+D^1+1D^7+D^6+1D^7+D^6+D^3+D^1+1D^7+D^6+D^4+D^1+1D^7+D^6+D^4+D^2+1D^7+D^6+D^5+D^2+1D^7+D^6+D^5+D^3+D^2+D^1+1D^7+D^6+D^5+D^4+1D^7+D^6+D^5+D^4+D^2+D^1+1D^7+D^6+D^5+D^4+D^3+D^2+1ans = 131 137 143 145 157 167 171 185 191 193 203 211 213 229 239 241 247 253
5、輸入mseq([1 0 0 0 0 0 1])
6、便可得到一個127位的m序列,整理之後為
1000000111111101010100110011101110100101100011011110110101101100100100011100001011111001010111001101000100111100010100001100000
說明,
1 0 0 0 0 0 1這個輸入引數的物理意義為各暫存器的初始狀態,其數學意義是所選用的本原多項式D^7+D^1+1中D^1到D^7的各個係數。讀者可以試試自行選用其他本原多項式,得到不同的m序列。
例如如果選用D^7+D^3+1,則只需呼叫
mseq([0 0 1 0 0 0 1]),得到的m序列為
10000001001001101001111011100001111111000111011000101001011111010101000010110111100111001010110