首页 > 编程知识 正文

matlab中的除法,matlab对多项式降幂排列

时间:2023-05-04 05:49:35 阅读:228498 作者:2458

二进制多项式除法研究

1、伽罗华域二进制除法

matlab演示过程:

>> a = gf([1 0 1

1],1)

a

= GF(2) array.

Array

elements =

1

0

1

1

>> b = gf([1 1

0],1)

b = GF(2)

array.

Array

elements =

1

1

0

>> c = deconv(a,b)

c = GF(2)

array.

Array

elements =

1

1

>> [c,d] =

deconv(a,b)

c = GF(2)

array.

Array

elements =

1

1

d = GF(2)

array.

Array

elements =

0

0

0

1

>>

CRC-32计算举例:

>> a = gf([0 0 0 0 0 0 0 1 0

0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0

0 0 1 1 0],1);

>> b = gf([1 0 0 0 0 0 1 0 0

1 1 0 0 0 0 0 1 0 0 0 1 1 1 0 1 1 0 1 1 0 1 1 1],1)

>> [c,d] =

deconv(a,b)

c = GF(2)

array.

Array

elements =

0

0

0

0

0

0

0

1

0

0

0

0

0

1

1

0

d = GF(2)

array.

Array

elements =

Columns 1 through 18

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

Columns 19 through 36

0

1

1

0

0

0

1

0

0

1

1

1

1

1

1

1

1

1

Columns 37 through 48

1

1

1

1

1

0

1

1

0

1

0

0

>>

2、LFS二进制除法

3、用MATLAB实现上面两种方法

%二进制多项式除法研究

clear

clc

%输入区域

LFS_L =

4;%LFS长度

g = [1 0 1

1];%线性反馈一位寄存器系数,g=[1 0 1 1]对应g(x)=x^4 + (x^3 + x + 1),最高位默认为1

A1 = [1 0

1 1 1];%输入序列,A1 = [1 0 1 1 1]对应x^4 + x^2 + x + 1

%下面的代码实现除法:(A1*x^LFS_L)/g

%举例:

� = [1 0 1

1 1]对应x^4 + x^2 + x + 1

%g=[1 0 1

1]对应g(x)=x^4 + (x^3 + x + 1),最高位默认为1

%LFS_L =

4

%则:(A1*x^LFS_L)/g = [(x^4 + x^2 + x + 1)*x^4]/[x^4 +

(x^3 + x + 1)]

%除法结果应该为:x^4 + x^3 + 1,二进制格式:[1 1 0 0 1]

%余数结果应该为:x + 1,二进制格式:[0 0 1 1]

%初始化

D =

zeros(1,LFS_L);%寄存器当前状态

D_next =

zeros(1,LFS_L);%寄存器下一个状态

A2 =

zeros(1,LFS_L);%填充序列,添加到输入序列末尾

A =

[A1,A2];%相当于A1*x^LFS_L

LFS_out =

zeros(1,length(A));%线性反馈移位寄存器的输出,相当于除法结果

k =

0;

m =

0;

%1、伽罗华域方法

A_gf =

gf(A,1);

g_gf =

gf([1,g],1);

disp('%%%用伽罗华域方法实现二进制多项式除法%%%')

[div_rst_gf,div_remainder_gf] =

deconv(A_gf,g_gf)

%2、线性反馈移位寄存器方法

g =

g(end:-1:1);

for k =

1:length(A)

D_next(1) = xor(A(k),D(LFS_L));

for m = 2:LFS_L

if(g(m)==1)

D_next(m) = xor(D(m-1),D(LFS_L));

else

D_next(m) = D(m-1);

end

end

LFS_out(k) = D_next(LFS_L);

D = D_next;

end

disp('%%%用LFS实现二进制多项式除法%%%')

disp('线性反馈移位寄存器结构:')

disp('*************************************************************************')

disp('

_____________________________________________________________');

disp('

|g0

|g1

|g2

|g3

...

|gm');

disp('

v

v

v

v

...

|');

disp('输入序列--> + -->[D0]-- +

-->[D1]-- + -->[D2]-- +

-->[D3]--...

-->[Dm-1]--');

disp('*************************************************************************')

disp('线性反馈移位寄存器系数(高->低,不包含最高位gm,最高位默认为1):'),g

disp('输入序列+填充序列(高->低,填充序列长度为LFS寄存器个数):'),A

disp('A/g除法结果(高->低):'),div_rst =

LFS_out(LFS_L:length(LFS_out)-1)%除法结果

disp('A/g余数(高->低):'),div_remainder = D(end:-1:1)%余数

4、MATLAB运行结果

%%%用伽罗华域方法实现二进制多项式除法%%%

div_rst_gf

= GF(2) array.

Array

elements =

1

1

0

0

1

div_remainder_gf = GF(2) array.

Array

elements =

0

0

0

0

0

0

0

1

1

%%%用LFS实现二进制多项式除法%%%

线性反馈移位寄存器结构:

*************************************************************************

_____________________________________________________________

|g0

|g1

|g2

|g3

...

|gm

v

v

v

v

...

|

输入序列--> +

-->[D0]-- + -->[D1]-- +

-->[D2]-- + -->[D3]--...

-->[Dm-1]--

*************************************************************************

线性反馈移位寄存器系数(高->低,不包含最高位gm,最高位默认为1):

g

=

1

1

0

1

输入序列+填充序列(高->低,填充序列长度为LFS寄存器个数):

A

=

1

0

1

1

1

0

0

0

0

A/g除法结果(高->低):

div_rst

=

1

1

0

0

1

A/g余数(高->低):

div_remainder =

0

0

1

1

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。