为什么说本原多项式与本原多项式相伴
时间: 2024-05-28 10:15:26 浏览: 139
本原多项式与本原多项式相伴是因为它们有相同的根和相同的次数。具体来说,如果一个本原多项式 $f(x)$ 在 $\mathbb{Z}_p[x]$ 上是不可约的,那么另一个本原多项式 $g(x)$ 也是在 $\mathbb{Z}_p[x]$ 上不可约的,并且它们有相同的次数和根的集合。此外,它们还满足以下关系:$f(x) \equiv \lambda g(x) \pmod{p}$,其中 $\lambda$ 是一个整数,同时 $\gcd(\lambda,p)=1$。因此,我们可以说 $f(x)$ 和 $g(x)$ 是相伴的。
相关问题
利用matlab,编写具有菜单页面的m序列生成器,输入移位寄存器初值和寄存器的阶数,根据输入的阶数查表得到本原多项式系数后,输出多项式系数和m序列,其中,2阶的本原多项式系数为7,3阶的本原多项式系数为11,4阶的本原多项式系数为19,5阶的本原多项式系数为37,6阶的本原多项式系数为67,7阶的本原多项式系数为137,8阶的本原多项式系数为285,9阶的本原多项式系数为529,10阶的本原多项式系数为1033,11阶的本原多项式系数为2093,12阶的本原多项式系数为4179,13阶的本原多项式系数为8219,14阶的本原多项式系数为17475,15阶的本原多项式系数为32771,16阶的本原多项式系数为69643,17阶的本原多项式系数为131081,18阶的本原多项式系数为262273,19阶的本原多项式系数为524327,20阶的本原多项式系数为1048585
以下是利用MATLAB编写的具有菜单页面的m序列生成器代码:
```matlab
function m_sequence_generator()
% M序列生成器
while true
% 显示菜单
disp('--------------------');
disp('M序列生成器');
disp('1. 生成m序列');
disp('2. 退出');
disp('--------------------');
% 获取用户输入
choice = input('请输入您的选择:');
if choice == 1
% 获取移位寄存器初值和阶数
init_value = input('请输入移位寄存器的初值:', 's');
order = input('请输入移位寄存器的阶数:');
% 根据阶数查找本原多项式系数表
switch order
case 2
coefficient = 7;
case 3
coefficient = 11;
case 4
coefficient = 19;
case 5
coefficient = 37;
case 6
coefficient = 67;
case 7
coefficient = 137;
case 8
coefficient = 285;
case 9
coefficient = 529;
case 10
coefficient = 1033;
case 11
coefficient = 2093;
case 12
coefficient = 4179;
case 13
coefficient = 8219;
case 14
coefficient = 17475;
case 15
coefficient = 32771;
case 16
coefficient = 69643;
case 17
coefficient = 131081;
case 18
coefficient = 262273;
case 19
coefficient = 524327;
case 20
coefficient = 1048585;
otherwise
disp('阶数无效,请重新输入!');
continue;
end
% 生成m序列
m_sequence = generate_m_sequence(init_value, order, coefficient);
% 显示多项式系数和m序列
disp('多项式系数:');
disp(coefficient);
disp('m序列:');
disp(m_sequence);
elseif choice == 2
% 退出程序
break;
else
disp('选择无效,请重新输入!');
end
end
end
function m_sequence = generate_m_sequence(init_value, order, coefficient)
% 生成m序列
% 初始化移位寄存器
shift_register = zeros(1, order);
for i = 1:order
shift_register(i) = str2double(init_value(i));
end
% 计算m序列
m_sequence = zeros(1, 2^order - 1);
for i = 1:length(m_sequence)
m_sequence(i) = shift_register(end);
feedback = mod(sum(shift_register .* coefficient), 2);
shift_register = [feedback shift_register(1:end-1)];
end
end
```
在运行程序后,用户可以选择生成m序列或退出程序。如果选择生成m序列,则需要输入移位寄存器初值和阶数。程序会根据输入的阶数查找本原多项式系数表,并计算出对应的m序列。最后,程序会输出多项式系数和m序列。
注意:在输入移位寄存器初值时,需要输入一个长度为阶数的二进制字符串,例如,当阶数为3时,移位寄存器初值可以为'101'。
利用matlab,编写具有菜单页面的m序列生成器,输入移位寄存器阶数和寄存器的初值,根据输入的阶数查表得到本原多项式系数后,输出多项式系数和m序列,其中,1阶的本原多项式系数为7,2阶的本原多项式系数为13,3阶的本原多项式系数为23,4阶的本原多项式系数为45,5阶的本原多项式系数为103,6阶的本原多项式系数为103,7阶的本原多项式系数为211,8阶的本原多项式系数为435,9阶的本原多项式系数为1021,10阶的本原多项式系数为2011,以上本原多项式系数均为八进制
以下是利用 MATLAB 编写的具有菜单页面的 m 序列生成器代码,可以根据输入的移位寄存器阶数和寄存器的初值生成相应的 m 序列:
```matlab
% m序列生成器
clear all;
while 1 % 无限循环,直到选择退出
% 菜单页面
fprintf('请选择移位寄存器阶数:\n');
fprintf('1. 1阶\n');
fprintf('2. 2阶\n');
fprintf('3. 3阶\n');
fprintf('4. 4阶\n');
fprintf('5. 5阶\n');
fprintf('6. 6阶\n');
fprintf('7. 7阶\n');
fprintf('8. 8阶\n');
fprintf('9. 9阶\n');
fprintf('10. 10阶\n');
fprintf('0. 退出\n\n');
% 接收用户输入
n = input('请输入选项序号:');
if n == 0
break; % 选择退出,跳出循环
elseif n < 1 || n > 10
fprintf('输入错误,请重新选择!\n\n');
continue; % 输入错误,重新进入循环
end
% 根据移位寄存器阶数查表得到本原多项式系数
switch n
case 1
p = oct2poly('7'); % 1阶的本原多项式系数为7
case 2
p = oct2poly('15'); % 2阶的本原多项式系数为13
case 3
p = oct2poly('43'); % 3阶的本原多项式系数为23
case 4
p = oct2poly('105'); % 4阶的本原多项式系数为45
case 5
p = oct2poly('207'); % 5阶的本原多项式系数为103
case 6
p = oct2poly('413'); % 6阶的本原多项式系数为203
case 7
p = oct2poly('1005'); % 7阶的本原多项式系数为421
case 8
p = oct2poly('2107'); % 8阶的本原多项式系数为1053
case 9
p = oct2poly('4005'); % 9阶的本原多项式系数为2057
case 10
p = oct2poly('10123'); % 10阶的本原多项式系数为5103
end
% 接收用户输入
x = input('请输入移位寄存器的初值(二进制形式):','s');
l = length(x);
% 初始化寄存器
register = zeros(1, n);
for i = 1:n
register(i) = str2num(x(l-i+1));
end
% 生成m序列
m = zeros(1, 2^n-1);
for i = 1:2^n-1
m(i) = register(n);
feedback = mod(sum(register.*p), 2); % 计算反馈
register(2:n) = register(1:n-1); % 移位
register(1) = feedback; % 更新最低位
end
% 输出多项式系数和m序列
fprintf('多项式系数为:');
disp(p);
fprintf('m序列为:');
disp(m);
fprintf('\n');
end
```
上述代码中,我们利用了 MATLAB 自带的 `input` 函数接收用户输入,利用 `switch` 语句根据输入的移位寄存器阶数查表得到本原多项式系数,利用 `oct2poly` 函数将八进制转换成多项式系数,然后利用循环生成 m 序列。最后,我们输出多项式系数和 m 序列,然后重新进入循环,等待下一次输入。当用户选择退出时,我们利用 `break` 语句跳出循环,程序结束。
阅读全文