利用matlab,编写具有菜单页面的m序列生成器,输入移位寄存器阶数和初值,输出多项式系数和m序列,4阶的本原多项式系数为45,5阶的本原多项式系数为103
时间: 2023-09-16 22:15:51 浏览: 78
以下是一个简单的菜单页面的m序列生成器的MATLAB代码:
```matlab
clear all;
clc;
disp('M序列生成器');
disp('=======================');
while true
disp('请选择移位寄存器阶数:');
disp('1. 4阶');
disp('2. 5阶');
choice = input('选择(1-2): ');
if choice == 1
n = 4;
p = 45;
elseif choice == 2
n = 5;
p = 103;
else
disp('错误的选择,请重新输入');
continue;
end
disp(['移位寄存器阶数为', num2str(n)]);
disp(['本原多项式系数为', num2str(p)]);
while true
x0 = input('请输入初值: ');
if x0 >= 0 && x0 < 2^n
break;
else
disp(['初值必须在0和', num2str(2^n - 1), '之间,请重新输入']);
end
end
% 计算本原多项式系数的二进制表示,例如45 (101101) 对应的二进制表示为[1 0 1 1 0 1]
p_bin = fliplr(dec2bin(p, n + 1) - '0');
% 初始化移位寄存器
register = fliplr(dec2bin(x0, n) - '0');
% 生成m序列
m_seq = zeros(1, 2^n - 1);
for i = 1:2^n - 1
m_seq(i) = register(end);
feedback = mod(sum(register(p_bin == 1)), 2);
register(2:end) = register(1:end-1);
register(1) = feedback;
end
% 输出结果
disp('多项式系数:');
disp(p_bin(2:end));
disp('m序列:');
disp(m_seq);
% 询问是否重新开始
while true
choice = input('是否重新开始(Y/N)? ', 's');
if strcmpi(choice, 'Y') || strcmpi(choice, 'N')
break;
else
disp('错误的选择,请重新输入');
end
end
if strcmpi(choice, 'N')
break;
end
end
disp('程序结束');
```
该程序会先让用户选择移位寄存器阶数(4阶或5阶),然后要求用户输入初值。接下来,程序会计算出本原多项式系数的二进制表示,并通过移位寄存器和本原多项式生成m序列,并输出多项式系数和m序列。
注意,在程序中,我们使用了MATLAB内置的`dec2bin`函数将十进制数转换为二进制字符串,然后用`- '0'`将字符数组转换为数值数组。我们还使用了MATLAB内置的`mod`函数计算余数,和`strcmpi`函数比较字符串而不区分大小写。
阅读全文