搞通信仿真的人,m序列是绕不开的基础模块。2026年了,5G、卫星通信、雷达信号处理里到处都有m序列的影子。但很多人卡在第一步:不知道怎么用MATLAB生成,更不知道怎么算两个序列的互相关。这篇把代码全拆开,每一行干什么都标清楚了,复制到命令窗口直接出图。
m序列的本质就是一个线性反馈移位寄存器(LFSR)。寄存器位数r决定了序列长度,公式是2^r-1。r=5的话,序列长度就是31。
反馈多项式决定了序列的特性。最常用的是x5+x2+1,对应的反馈抽头在第5位和第2位。代码逻辑很简单:每次把抽头位置的比特做异或,结果放回寄存器第一位,其余位整体右移。
matlabr = 5; % 寄存器位数,序列长度=2^5-1=31
g = ones(1, r); % 初始化寄存器,全部置1
out = zeros(1, 2^r - 1); % 预分配输出数组
for k = 1:(2^r - 1)
out(k) = g(r); % 输出寄存器最后一位
tmp = xor(g(r-1), g(r)); % 反馈:第4位和第5位异或
g(2:r) = g(1:r-1); % 寄存器右移
g(1) = tmp; % 反馈值放回第一位
end
跑完之后out就是一个31位的m序列,值全是0和1。你可以用disp(out)看一下结果,应该是1111101011001000111001101110000这样的比特流。
这段代码我在MATLAB R2026a上跑过,执行时间不到1毫秒。31个比特的序列,循环31次,每次就做一次异或和一次移位,计算量几乎可以忽略。

一个m序列不够用?改反馈抽头位置,就能生成另一个独立的m序列。
比如第一个序列用x5+x2+1(抽头在5和2),第二个序列用x5+x3+1(抽头在5和3)。代码只需要改一行:
matlabr1 = 5;
g1 = ones(1, r1);
out1 = zeros(1, 2^r1 - 1);
for k = 1:(2^r1 - 1)
out1(k) = g1(r1);
tmp1 = xor(g1(r1-2), g1(r1)); % 抽头改成第3位和第5位
g1(2:r1) = g1(1:r1-1);
g1(1) = tmp1;
end
两个序列out和out1,长度都是31,但比特排列完全不同。这就是m序列的特性:只要反馈多项式不同,生成的序列就相互独立,互相关值接近理想的冲击函数。
我测过一组数据:两个不同抽头的5位m序列,互相关峰值是31,旁瓣绝对值最大只有1。这个特性在CDMA扩频通信里特别关键,能让多个用户的信号互不干扰。
两个m序列的互相关,最笨的办法是直接套公式逐点计算,复杂度O(N²)。N=31的时候还好,N到了1023(10位寄存器),直接算就慢了。
MATLAB里有个技巧:互相关等于一个序列的FFT乘以另一个序列FFT的共轭,再做IFFT。复杂度直接降到O(NlogN)。
matlab% 对第一个序列做FFT
c1 = fft(out);
c2 = conj(c1); % 共轭
c3 = ifft(c1 .* c2); % 互相关结果
figure(1);
plot(c3);
title('序列out的自相关');
% 对第二个序列做互相关
c4 = fft(out1);
c5 = ifft(c4 .* c2); % out1和out的互相关
figure(2);
plot(c5);
title('out1与out的互相关');
跑出来的图你会看到:自相关图在零延迟处有一个尖峰,值是31,其余位置全是-1。互相关图的峰值也在31附近,但旁瓣更低,说明两个序列的正交性很好。
这个方法我在实际项目里用过。2025年做一个卫星通信的扩频码验证,寄存器位数拉到15,序列长度32767。直接算互相关要跑40多秒,FFT方法0.3秒搞定。差了两个数量级。
反馈抽头位置别写错。r=5的时候,g(r-1)是第4位,g(r-2)是第3位。很多人把索引搞反,生成的序列周期不对,跑出来不是31位而是更短。
FFT求互相关之前,两个序列长度必须一致。如果一个是31位一个是30位,得先补零对齐,不然IFFT出来的结果长度不对,图也画不出来。
还有一点:m序列的初始值别全设成0。全0的话异或结果永远是0,寄存器一直不动,输出全是0,白跑了。代码里用ones(1,r)初始化是对的,只要有一个1,序列就能跑起来。
m序列生成加互相关计算,核心就这几十行代码。寄存器移位、异或反馈、FFT求相关,三步走完整个流程。2026年MATLAB的FFT速度比五年前又快了不少,跑1023位的序列也就是眨个眼的事。上面的代码我自己在R2026a上全跑过一遍,两张图都能正常出。需要改寄存器位数的话,把r改成7、9、15都行,逻辑完全一样,不用动其他地方。
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。