当前位置:文档之家› 奇偶校验的Matlab实现

奇偶校验的Matlab实现

奇偶校验的Matlab实现
奇偶校验的Matlab实现

奇偶校验的matlab实现代码

奇偶校验:

最常用的检错码是就校验码,他在原编码基础上增加一位奇偶校验位,使得整个编码的“码重”固定为奇数(奇校验)或偶数(偶校验)。其中“码重”即编码中“1”的个数。

奇偶校验能发现奇数个错,而在计算机中发生一个差错的概率远大于两个差错,绝大多数是出现一个差错,这就使得奇偶校验具有很高的实用性;而因为奇校验不能产生全零的代码,故常用的为“偶校验”。

奇偶校验matlab实现:

下面有两个奇偶校验的MATLAB实现代码,其功能基本一致,第一个是可以选择奇校验或偶校验,第二个则是直接分别输出奇校验和偶校验,其中源码的行列自由输入,随机生成0-1矩阵即为源码,校验码则为附加的最后一列。

%奇偶校验1的源代码

clc;clear;

m=input('请输入行:');

n=input('请输入列:');

A=randint(m,n);

A

for k=1:2

sum=zeros(1,m);

l=input('请选择奇偶校验(0、偶校验1、奇校验):');

for i=1:m

for j=1:n

sum(i)=sum(i)+A(i,j);

z=sum(i);

end

if rem(z,2)==l

A(i,n+1)=0;

else

A(i,n+1)=1;

end

end

A

end

%奇偶校验2的源代码

clc;clear;

m=input('请输入行:');

n=input('请输入列:');

A=randint(m,n);

A

for k=1:2

sum=zeros(1,m);

for i=1:m

for j=1:n

sum(i)=sum(i)+A(i,j);

z=sum(i);

end

if rem(z,2)==k-1

A(i,n+1)=0;

else

A(i,n+1)=1;

end

end

if k==1

fprintf('偶校验:')

else

fprintf('奇校验:')

end

A

end

三次样条插值---matlab实现

计算方法实验—三次样条插值 机电学院075094-19 苏建加 20091002764 题目:求压紧三次样条曲线,经过点(-3,2),(-2,0),(1,3),(4,1),而且一阶导 数边界条件S'(-3)=-1;S'(4)=1。 解:首先计算下面的值: 记 1--=j j j x x h ; 1++=j j j j h h h u ;1=+j j u λ ; ?? ????????---+=-++++-j j j j j j j j j j j h y y h y y h h x x x f 1111 111],,[ ;M j =)(''j x s ;],,[611+-=j j j j x x x f d ; h1=-2-(-3)=1;h2=1-(-2)=3;h3=4-1=3; u1=1/4;u2=3/6; d1=6/4*(3/3-(-2)/1)=4.5;d2=6/6*(-2/3-3/3)=-5/3; 由于边界条件S'(-3)=-1;S'(4)=1,得到如下 式子: d0=6/1*(-2/1-(-1))=-6; d3=6/3*(1-(-2)/3)=10/3; 所以得到4个含参数m0~m3 的线性代数方程组为: 2.0000 1.0000 0 0 m0 0.2500 2.0000 0.7500 0 m1 0 0.5000 2.0000 0.5000 m2 0 0 1.0000 2.0000 m3 利用matlab 求解方程得: m = -4.9032 3.8065 -2.5161 2.9247 所以 S1(x)=-0.8172*(-2-x)^3+ 0.6344*(x+3)^3+2.8172*(-2-x)-0.6344*(x+3) x ∈[-3,-2] S2(x)=0.2115*(1-x)^3 -0.1398*(x+2)^3- 1.9032*(1-x)+ 2.2581*(x+2) x ∈[-2,1] S3(x)=-0.1398*(4-x)^3+0.1625(x-1)^3+ 2.2581*(4-x)-1.1290*(x-1) x ∈[1,4] 化简后得:S1(x)=1.4516*x^3 + 10.6128*x^2 + 23.4836*x + 16.1288 x ∈[-3,-2] S2(x)=-0.3513x^3-0.2043x^2+1.8492x+1.7061 x ∈[-2,1] S3(x)=0.3023x^3-2.1651x^2+3.8108x+1.0517 x ∈[1,4] 画图验证:

奇偶校验

为了系统的可靠性,对于位数较少,电路较简单的应用,可以采用奇偶校验的方法。奇校验是通过增加一位校验位的逻辑取值,在源端将原数据代码中为1的位数形成奇数,然后在宿端使用该代码时,连同校验位一起检查为1的位数是否是奇数,做出进一步操作的决定。奇偶校验只能检查一位错误,且没有纠错的能力。偶校验道理与奇校验相同,只是将校验位连同原数据代码中为1的位数形成偶数。奇偶校验器多设计成九位二进制数,以适应一个字节,一个ASCII代码的应用要求。奇偶校验是一种荣誉编码校验,在存储器中是按存储单元为单位进行的,是依靠硬件实现的,因而适时性强,但这种校验方法只能发现奇数个错,如果数据发生偶数位个错,由于不影响码子的奇偶性质,因而不能发现。 奇偶校验是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。 与一段信息关联的冗余信息。在WindowsNTServer中,带奇偶校验的带区集意味着每行有一个附加的奇偶校验带区。因此,必须使用至少三个(而不是两个)磁盘才能考虑该附加的奇偶校验信息。奇偶校验带区包含该带区内数据的XOR(称为排它性“或”的布尔操作)。重新生成失败的磁盘时,WindowsNTServer将使用这些带区中与完好磁盘上数据关联的奇偶校验信 息重新在失败盘上创建数据。请参阅容错;带区集;带奇偶校验的带区集奇偶校验能够检测出信息传输过程中的部分误码(1位误码能检出,2位及2位以上误码不能检出),同时,它不能纠错。在发现错误后,只能要求重发。但由于其实现简单,仍得到了广泛使用。 为了能检测和纠正内存软错误,首先出现的是内存“奇偶校验”。内存中最小的单位是比特,也称为“位”,位只有两种状态分别以1和0来标示,每8个连续的比特叫做一个字节(byte)。不带奇偶校验的内存每个字节只有8位,如果其某一位存储了错误的值,就会导致其存储的相应数据发生变化,进而导致应用程序发生错误。而奇偶校验就是在每一字节(8位)之外又增加了一位作为错误检测位。在某字节中存储数据之后,在其8个位上存储的数据是固定的,因为位只能有两种状态1或0,假设存储的数据用位标示为1、1、1、0、0、1、0、1,那么把每个位相加(1+1+1+0+0+1+0+1=5),结果是奇数。对于偶校验,校验位就定义为1,反之则为0;对于奇校验,则相反。当CPU读取存储的数据时,它会再次把前8位中存储的数据相加,计算结果是否与校验位相一致。从而一定程度上能检测出内存错误,奇偶校验只能检测出错误而无法对其进行修正,同时虽然双位同时发生错误的概率相当低,但奇偶校验却无法检测出双位错误。

常用的检错码 - 奇偶校验码

3.2差错控制 3.2.2常用的检错码- 奇偶校验码 奇偶校验码是一种简单的检错码,奇偶校验码分为奇校验码和偶校验码,两者原理相同。它通过增加冗余位来使得码字中“1”的个数保持奇数或偶数。 ?无论是奇校验码还是偶校验码,其监督位只有一位; ?假设信息为为I1, I2, …, I n,对于偶校验码,校验位R可以表示为: R =I 1 ⊕I 2 ⊕Λ⊕I n ?假设信息为为I1, I2, …, I n,对于奇校验码,校验位R可以表示为: R =I 1 ⊕I 2 ⊕Λ⊕I n ⊕1 ?无论是奇校验码还是偶校验码,都只能检测出奇数个错码,而 不能检测偶数个错码。 4 4

讨论: 从检错能力、编码效率和代价等方面来评价垂直奇偶校验、水平奇偶校验和水平垂直奇偶校验 3.2 差错控制 3.2.2 常用的检错码 - 奇偶校验码 奇偶校验在实际使用时又可分为垂直奇偶校验、水平奇偶校验和水平垂直奇偶校验等几种。 5

3.2.2常用的检错码–定比码 所谓定比码,即每个码字中“1”的个数与“0”的个数之比保持恒定, 故又名等比码或恒比码。 ?当码字长一定,每个码字所含“1”的数目都相同,“0”的数目也 都相同。 ?由于若n位码字中“1”的个数恒定为m,还可称为“n中取m”码 定比码(n中取m)的编码效率为: log C m R = ?2 n n 定比码能检测出全部奇数位错以及部分偶数位错。实际上,除了码 字中“1”变成“0”和“0”变成“1”成对出现的差错外,所有其它差 错都能被检测出来 6 4

代码“1011011”对应的多项式为x 6 + x 4 + x 3 +1 多项式“x 5 + x 4 + x 2 + x”所对应的代码为“110110” 3.2.2 常用的检错码 – 循环冗余检验 循环冗余码(Cyclic Redundancy Code ,简称CRC )是无线通信中用得最广泛的检错码,又被称为多项式码。 二进制序列多项式:任何一个由m 个二进制位组成的代码序列都可以和一个只含有0和1两个系数的m-1阶多项式建立一一对应的关系。 CRC 有关的多项式: ? 信息位多项式、冗余位多项式、码字多项式、和生成多项式 信息位1010001:K (x ) = x 6 + x 4 + 1 冗余位1101:R (x ) = x 3 + x 2 + 1; 码字10100011101: T (x ) = x 10 + x 8 + x 4 + x 3 + x 2 + 1 7

运用matlab建立三次样条插值函数

(1)编写三条样条插值函数程序如下: x=[1 4 9 16 25 36 49 64 81]; y=[1 2 3 4 5 6 7 8 9]; n=length(x); lamda(1)=1; miu(n)=1; h=diff(x); df=diff(y)./diff(x); d(1)=6*(df(1)-1/2)/h(1); d(n)=6*(0.5*81^-0.5-df(n-1))/h(n-1); for j=2:n-1 lamda(j)=h(j)/(h(j-1)+h(j)); miu(j)=h(j-1)/(h(j-1)+h(j)); d(j)=6*(df(j)-df(j-1))/(h(j-1)+h(j)); end miu=miu(2:end); u=diag(miu,-1);r=diag(lamda,1);a=diag(2*ones(1,n)); A=u+r+a; %求出矩阵形式的线性方程组 M=inv(A)*d'; %求出M值 syms g for j=1:n-1 s(j)=M(j)*(x(j+1)-g)^3/(6*h(j))+M(j+1)*((g-x(j))^3/(6*h(j)))+(y(j)-M( j)*h(j)^2/6)*(x(j+1)-g)/h(j)+(y(j+1)-M(j+1)*h(j)^2/6)*(g-x(j))/h(j); end format rat for j=1:n-1 S(j,:)=sym2poly(s(j)); %三条样条插值函数 end %生成三次样条插值函数图象 for j=1:n-1 x1=x(j):0.01:x(j+1); y1=polyval(S(j,:),x1); plot(x1,y1,x,y,'o'); title('spline 三次样条插值函数图象'); xlabel('x'); ylabel('y'); grid on; hold on; end

MATLAB三次样条插值之三弯矩法

MATLAB三次样条插值之三弯矩法 首先说这个程序并不完善,为了实现通用(1,2,…,n)格式解题,以及为调用追赶法程序,没有针对节点数在三个以下的情况进行分类讨论。希望能有朋友给出更好的方法。 首先,通过函数 sanwanj得到方程的系数矩阵,即追赶法方程的四个向量参数,接下来调用 追赶法(在intersanwj函数中),得到三次样条分段函数系数因子,然后进行多项式合并得 到分段函数的解析式,程序最后部分通过判断输入值的区间自动选择对应的分段函数并计算改 点的值。附:追赶法程序 chase %%%%%%%%%%%%%% function [newv,w,newu,newd]=sanwj(x,y,x0,y0,y1a,y1b) % 三弯矩样条插值 % 将插值点分两次输入,x0 y0 单独输入 % 边值条件a的二阶导数 y1a 和b的二阶导数 y1b,这里建议将y1a和y1b换成y2a和 y2b,以便于和三转角代码相区别 n=length(x);m=length(y); if m~=n error('x or y 输入有误,再来'); end v=ones(n-1,1);u=ones(n-1,1);d=zeros(n-1,1); w=2*ones(n+1); h0=x(1)-x0; h=zeros(n-1,1); for k=1:n-1 h(k)=x(k+1)-x(k); end v(1)=h0/(h0+h(1)); u(1)=1-v(1); d(1)=6*((y(2)-y(1))/h(1)-(y(1)-y0)/h0)/(h0+h(1)); % for k=2:n-1 v(k)=h(k-1)/(h(k-1)+h(k)); u(k)=1-v(k); d(k)=6*((y(k+1)-y(k))/h(k)-(y(k)-y(k-1))/h(k-1))/(h(k-1)+h(k)); end newv=[v;1]; newu=[1;u]; d0=6*((y(1)-y0)/h0-y1a)/h0;

计算方法_全主元消去法_matlab程序

%求四阶线性方程组的MA TLAB程序 clear Ab=[0.001 2 1 5 1; 3 - 4 0.1 -2 2; 2 -1 2 0.01 3; 1.1 6 2.3 9 4];%增广矩阵 num=[1 2 3 4];%未知量x的对应序号 for i=1:3 A=abs(Ab(i:4,i:4));%系数矩阵取绝对值 [r,c]=find(A==max(A(:))); r=r+i-1;%最大值对应行号 c=c+i-1;%最大值对应列号 q=Ab(r,:),Ab(r,:)=Ab(i,:),Ab(i,:)=q;%行变换 w=Ab(:,c),Ab(:,c)=Ab(:,i),Ab(:,i)=w;%列变换 n=num(i),num(i)=num(c),num(c)=n;%列变换引起未知量x次序变化for j=i:3 Ab(j+1,:)=-Ab(j+1,i)*Ab(i,:)/Ab(i,i)+Ab(j+1,:);%消去过程 end end %最后得到系数矩阵为上三角矩阵 %回代算法求解上三角形方程组 x(4)=Ab(4,5)/Ab(4,4); x(3)=(Ab(3,5)-Ab(3,4)*x(4))/Ab(3,3); x(2)=(Ab(2,5)-Ab(2,3)*x(3)-Ab(2,4)*x(4))/Ab(2,2); x(1)=(Ab(1,5)-Ab(1,2)*x(2)-Ab(1,3)*x(3)-Ab(1,4)*x(4))/Ab(1,1); for s=1:4 fprintf('未知量x%g =%g\n',num(s),x(s)) end %验证如下 %A=[0.001 2 1 5 1; 3 -4 0.1 -2 2;2 -1 2 0.01 3; 1.1 6 2.3 9 4]; %b=[1 2 3 4]'; %x=A\b; %x1= 1.0308 %x2= 0.3144 %x3= 0.6267 %x4= -0.0513

奇偶校验通信原理课程设计

西南科技大学通信原理设计报告 课程名称:通信原理课程设计 设计名称:奇偶校验编码仿真 姓名:王雷 学号: 班级:通信1004 指导教师:秦明伟 起止日期:2013年7月5日星期五 西南科技大学信息工程学院制

方向设计任务书 学生班级:通信1004 学生姓名:王雷学号:20105615 设计名称:奇偶校验编码仿真 起止日期:2013年7月5日星期五指导教师:秦明伟 方向设计学生日志

奇偶校验编码仿真 一、摘要(150-250字) 奇偶校验是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。 二、设计目的和意义 认识matlab软件,学习掌握matlab的基本操作方法,熟悉M文件和simulink的具体实现方法,了解数据奇偶校验的原理和在matlab中的基本仿真,通过对简单的通信实验设计,提高了动手能力和对matlab操作,巩固了课程知识。 三、设计原理 在数据传输前附加一位奇校验位,用来表示传输的数据中"1"的个数是奇数还是偶数,为奇数时,校验位置为"0",否则置为"1",用以保持数据的奇偶性不变。例如,需要传输"11001110",数据中含5个"1",所以其奇校验位为"0",同时把"110011100"传输给接收方,接收方收到数据后再一次计算奇偶性,"110011100"中仍然含有5个"1",所以接收方计算出的奇校验位还是"0",与发送方一致,表示在此次传输过程中未发生错误。奇偶校验就是接收方用来验证发送方在传输过程中所传数据是否由于某些原因造成破坏。 奇偶校验原理是基于异或的逻辑功能。奇偶校验的编码方法是在原信号码组后面添加以为监督码元,奇偶校验分为奇校验和偶校验,奇校验是原信息码元加上监督码元后,使整个组成的数码组中,1的个数为奇数个。偶校验的工作原理则正好与奇校验相反。 对于n位二进码a1a2a3a4……a n奇校验有如下表示: a1⊕a2⊕a3⊕a4……⊕a n⊕C=1 偶校验的表达式为: a1⊕a2⊕a3⊕a4……⊕a n⊕C =1 其中,C为监督码元,在本设计中n为8,可以推出C的表达式为: C =a1⊕a2⊕a3⊕a4……⊕a8 在发送端让其监督码和信息码一起发送,在信息接收端,计算校验因子的表达式为: 、 S=a1⊕a2⊕a3⊕a4……⊕a n⊕C

三次样条插值的MATLAB实现

MATLAB 程序设计期中考查 在许多问题中,通常根据实验、观测或经验得到的函数表或离散点上的信息,去研究分析函数的有关特性。其中插值法是一种最基本的方法,以下给出最基本的插值问题——三次样条插值的基本提法: 对插值区间[]b a ,进行划分:b x x x a n ≤

三次样条插值的Matlab实现(自然边界和第一边界条件)

(第一边界条件)源代码:function y=yt1(x0,y0,f_0,f_n,x)_____________(1) %第一类边界条件下三次样条插值; %xi所求点; %yi所求点函数值; %x已知插值点; %y已知插值点函数值; %f_0左端点一次导数值; %f_n右端点一次导数值; n = length(x0); z = length(y0); h = zeros(n-1,1); k=zeros(n-2,1); l=zeros(n-2,1); S=2*eye(n); fori=1:n-1 h(i)= x0(i+1)-x0(i); end fori=1:n-2 k(i)= h(i+1)/(h(i+1)+h(i)); l(i)= 1-k(i);

end %对于第一种边界条件: k = [1;k];_______________________(2) l = [l;1];_______________________(3) %构建系数矩阵S: fori = 1:n-1 S(i,i+1) = k(i); S(i+1,i) = l(i); end %建立均差表: F=zeros(n-1,2); fori = 1:n-1 F(i,1) = (y0(i+1)-y0(i))/(x0(i+1)-x0(i)); end D = zeros(n-2,1); fori = 1:n-2 F(i,2) = (F(i+1,1)-F(i,1))/(x0(i+2)-x0(i)); D(i,1) = 6 * F(i,2); end %构建函数D: d0 = 6*(F(1,2)-f_0)/h(1);___________(4)

奇偶校验

奇偶校验 在数据传输前在数据位后附加一位奇偶校验位,用来表示传输的数据中"1"的个数是奇数还是偶数,以此判断数据传输正确性的一种校验方法。 奇偶校验的产生: 为奇数时,校验位置为"0",否则置为"1",用以保持数据的奇偶性不变。例如,需要传输"11001110",数据中含5个"1",所以其奇校验位为"0",同时把"110011100"传输给接收方,接收方收到数据后再一次计算奇偶性,"110011100"中仍然含有5个"1",所以接收方计算出的奇校验位还是"0",与发送方一致,表示在此次传输过程中未发生错误。奇偶校验就是接收方用来验证发送方在传输过程中所传数据是否由于某些原因造成破坏。 具体方法如下: 奇校验: 就是让原有数据序列中(包括你要加上的一位)1的个数为奇数 1000110(0)你必须添0这样原来有3个1已经是奇数了所以你添上0之后1的个数还是奇数个。 偶校验: 就是让原有数据序列中(包括你要加上的一位)1的个数为偶数 1000110(1)你就必须加1了这样原来有3个1要想1的个数为偶数就只能添1了。 按校验的数据量和生成校验码的方式分为三类: 1.垂直奇偶校验码:以一个字符作为校验单位纵向生成校验码位;

例如使用ASCII编码的一个字符由8bit组成,其中低7bit为信息位,最高1bit作为校验位,假设某一字符的标准ASCII编码为0011000,根据奇偶校验规则,如果采用奇校验,则校验位应为1(这样字符中1的个数才能为奇数),即00110001;如果采用偶校验,校验位应为0,即00110000垂直奇偶校验码的特点:校验处理过程简单,但如果字符中发生偶数位的错误就检测不出来,也检测不到错误发生在哪一位。 2.水平奇偶校验码:以多个字符作为校验单位横向生成校验码位; 生成方法:以若干个字符作为一个校验单位。每个字符各自生成一个垂直奇偶校验码,再为每个字符的相同位及其垂直奇偶校验码生成水平奇偶校验码,这些校验码形成一个校验字符,附加在被校验字符的后面一并传输到接收方,该校验字符即称为方阵校验码。 校验特点:一次能校验更多的数据,效率较高,系统实现也比较简单,检测可靠性有所提高,但仍然不能检测出所有的错误。 3.水平垂直冗余校验码(方阵校验码):以多个字符作为校验单位水平垂直两个方向共同生成校验字符。

MATLAB三次样条插值之三转角法

非常类似前面的三弯矩法,这里的sanzhj函数和intersanzhj作用相当于前面的sanwanj和intersanwj,追赶法程序通用,代码如下。 %%%%%%%%%%%%%%%%%%% function [newu,w,newv,d]=sanzhj(x,y,x0,y0,y1a,y1b) % 三转角样条插值 % 将插值点分两次输入,x0 y0 单独输入 % 边值条件a的一阶导数 y1a 和b的一阶导数 y1b n=length(x);m=length(y); if m~=n error('x or y 输入有误,再来'); end v=ones(n-1,1); u=ones(n-1,1); d=zeros(n-1,1); w=2*ones(n-1,1); h0=x(1)-x0; h=zeros(n-1,1); for k=1:n-1 h(k)=x(k+1)-x(k); end v(1)=h0/(h0+h(1)); u(1)=1-v(1); d(1)=3*(v(1)*(y(2)-y(1))/h(1)+u(1)*((y(1)-y0))/h0); % for k=2:n-1 v(k)=h(k-1)/(h(k-1)+h(k)); u(k)=1-v(k); d(k)=3*(v(k)*(y(k+1)-y(k))/h(k)+u(k)*(y(k)-y(k-1))/h(k-1)); end d(1)=d(1)-u(1)*y1a; d(n-1)=d(n-1)-v(n-1)*y1b; newv=v(1:n-2,:); newu=u(2:n-1,:); %%%%%%%%%%%% function intersanzhj(x,y,x0,y0,y1a,y1b) % 三转角样条插值

奇偶校验_校验和实验

实验5-1纠错与检错 1.实验内容 读程序,在所有红色的“#”后面添加解释,说明程序的作用 2.实验题目 (1)奇偶校验码 在原始模式上增加一个附加比特位,即奇偶校验位,使最后整个模式中1的个数为奇数(奇校验)或偶数(偶校验)。 本程序用到列表、字符串合并、取模等概念。 code=input("Please input a 7-bit-binary code:") a=0 # for 循环作用是什么 for i in range(0,6,1): if code[i]=='1': a=a+1 print("After odd parity checking the code is:") if a%2==0: print(code+'1') # 这句做了什么 else: print(code) # 这句做了什么 print("After even parity checking the code is:") # 下面 if .. else …作用是什么 if a%2==0: print(code) else: print(code+'1') (2) 垂直水平奇偶校验 如下图所示,14个字符纵向排列形成一个数据块,每个字符占据一列,低位比特在上,高位比特在下,用b8(第8位)作为垂直奇偶校验位,各字符的同一比特位形成一行,每一行的最右边一位作为水平奇偶校验位,这里在垂直和水平方向均采用偶校验。

# 下面的函数做了什么 def oddeven(l): a=0 for i in range(0,len(l),1): if l[i]=='1': a=a+1 if a%2==0: return '0' else: return '1' block=[['0']*15,['0']*15,['0']*15,['0']*15,['0']*15,['0']*15,['0']*15,[' 0']*15] for i in range(0,14,1): vcode=input("Please input a 7-bit-binary code:") for j in range(0,7,1): block[j][i]=vcode[j] block[7][i]=oddeven(vcode) # 这句做了什么 hcode=['0']*14 for j in range(0,8,1): for i in range(0,14,1): hcode[i]=block[j][i] block[j][14]=oddeven(hcode) # 这句做了什么 print(block) (3)循环冗余校验 任何一个二进制位串都可以用一个多项式来表示,多项式的系数只有0和1,n 位长度的码C 可以用下述n -1次多项式表示: ()n 1n 210C x C x C x C x C --=++++L n-1n-21 例如位串1010001可以表示为x 6+x 4 +1。 数据后面附加上冗余码的操作可以用多项式的算术运算来表示。例如,一个k 位的信息码后面附加上r 位的冗余码,组成长度为n=k+r 的码,它对应一个(n -1)次的多项式C(x),信息码对应一个(k -1)次的多项式K(x),冗余码对应一个(r -1)次的多项式R(x),C(x)与K(x)和R(x)之间的关系满足: ()()()r C x x K x R x =+ 由信息码生成冗余码的过程,即由已知的K(x)求R(x)的过程,也是用多项式的算术运 算来实现。其方法是:通过用一个特定的r 次多项式G(x)去除x r K(x),即: () () r x K x G x 得到的r 位余数作为冗余码R(x)。其中G(x)称为生成多项式(generator polynomial ),是由通信的双方预先约定的。除法中使用模2减法(无借位减,相当于作异或运算)。要进行的多项式除法,只要用其相对应的系数进行除法运算即可。 本例中,10位二进制信息位串对应K(x)=x 9+x 8+ x 6+x 4+ x 3 + x+1;CRC_4对应的G(x)=

巧用单片机的奇偶校验位

巧用8051单片机的奇偶校验位 () 南京东南大学电子工程系 210096 孙洪军 () 南京理工大学化工学院 210094孙秀云周学铁 摘根连线即可达到 3要: 一种微机间的串行通信方法, 只需用 R XD、T XD 和GN D 115200bp s 的传输速率。 中断关键词: 串行通信语言 8250 IN S C 送出去。IN S 8250接收由 R XD 来的数据后, 经过串?在工程设计中, 经常会遇到近距离的微机间数据交换问题, 通常的解决方法是利用微机的异步串行通并信适配器, 通过把2台微机的串行通信口相连来实现转换后, 放在中供读取。RBR C PU 表1 IN S 8250中可访问的寄存器据交换。在程序的设计上往往利用或数 B IO S DO S 的功 1 2 能调用来实现对适配器的初始化、状态检测、数COM COM 方向寄存器名称口地址口地址据的发 3828输出发送器保持寄存器() F H F H T HR 送和接收等。这种方法实现的串行通信程序, 设计起来 3828输入接收器缓冲寄存器() F H F H RBR 相对简单, 但是在连线上要复杂一些, 除了通信线外, 3828输出除数寄存器( 低位) () F H F H D R 还需要握手信号线, 通信速率最高只可达到9600。 bp s3929输出除数寄存器( 高位) () F H F H D R 而在实践中, 人们往往更希望采用3线通信形式, 只采 3929输出中断允许寄存器( ) F H F H IER 用、、根线, 通信速率也希望能达到更 3R XDT XDGN D 32输入中断识别寄存器( ) FA H FA H IIR 高水平。通过对微机的异步串行通信适配器的研究发 32输出线路控制寄存器() 现, 完全可以避开对或的功能调用, 通过 FBH FBH L CR B IO S DO S 调制解调器控制寄存器直接访问其寄存器来实现对适配器的初始化、状态检 3FCH 2FCH 输出 ()M CR 测、数据的发送和接收等功能, 可以达到115200的 bp s 32输入线路状态寄存器()FD H FD H L SR 传输速率, 再通过对中断控制器8259的编程, 采用中 A 调制解调器状态寄存器 3F EH 2F EH 输入断方式接收数据, 可以可靠地实现高速3线串行通信。 ()M SR 1 异步串行通信适配器的工作原理 微机上通常有2个异步串行通信适配器, 分别为D R 中存放的数据用来决定数据传输时的波特主适配器和辅适配器, 适配器和外部的通信连接通过率, 其计算公

(整理)matlab16常用计算方法.

常用计算方法 1.超越方程的求解 一超越方程为 x (2ln x – 3) -100 = 0 求超越方程的解。 [算法]方法一:用迭代算法。将方程改为 01002ln()3 x x =- 其中x 0是一个初始值,由此计算终值x 。取最大误差为e = 10-4,当| x - x 0| > e 时,就用x 的值换成x 0的值,重新进行计算;否则| x - x 0| < e 为止。 [程序]P1_1abs.m 如下。 %超越方程的迭代算法 clear %清除变量 x0=30; %初始值 xx=[]; %空向量 while 1 %无限循环 x=100/(2*log(x0)-3); %迭代运算 xx=[xx,x]; %连接结果 if length(xx)>1000,break ,end %如果项数太多则退出循环(暗示发散) if abs(x0-x)<1e-4,break ,end %当精度足够高时退出循环 x0=x; %替换初值 end %结束循环 figure %创建图形窗口 plot(xx,'.-','LineWidth',2,'MarkerSize',12)%画迭代线'.-'表示每个点用.来表示,再用线连接 grid on %加网格 fs=16; %字体大小 title('超越方程的迭代折线','fontsize',fs)%标题 xlabel('\itn','fontsize',fs) %x 标签 ylabel('\itx','fontsize',fs) %y 标签 text(length(xx),xx(end),num2str(xx(end)),'fontsize',fs)%显示结果 [图示]用下标作为自变量画迭代的折线。如P0_20_1图所示,当最大误差为10-4时,需要迭代19次才能达到精度,超越方程的解为27.539。 [算法]方法二:用求零函数和求解函数。将方程改为函数 100()2ln()3f x x x =-- MATLAB 求零函数为fzero ,fzero 函数的格式之一是 x = fzero(f,x0) 其中,f 表示求解的函数文件,x0是估计值。fzero 函数的格式之二是 x = fzero(f,[x1,x2])

奇偶码

校验码辅导讲座 二进制数据经过传送、存取等环节,会发生误码(1变成0或0变成1),这就有如何发现及纠正误码的问题。所有解决此类问题的方法就是在原始数据(数码位)基础上增加几位校验(冗余)位。 一、码距 一个编码系统中任意两个合法编码(码字)之间不同的二进数位(bit )数叫这两个码字的码距,而整个编码系统中任意两个码字的的最小距离就是该编码系统的码距。 如图1所示的一个编码系统,用三个bit 来表示八个不同信息中。在这个系统中,两个码字之间不同的bit 数从1到3不等,但最小值为1,故这个系统的码距为1。如果任何码字中一位或多位被颠倒了,结果这个码字就不能与其它有效信息区分开。例如,如果传送信息001,而被误收为011,因011仍是表中的合法码字,接收机仍将认为011是正确的信息。 然而,如果用四个二进数字来编8个码字,那么在码字间的最小距离可以增加到2,如图2的表中所示。 图 1 图 2 注意,图8-2的8个码字相互间最少有两bit 的差异。因此,如果任何信息的一个数位被颠倒,就成为一个不用的码字,接收机能检查出来。例如信息是1001,误收为1011,接收机知道发生了一个差错,因为1011不是一个码字(表中没有)。然而,差错不能被纠正。假定只有一个数位是错的,正确码字可以是1001,1111,0011或1010。接收者不能确定原来到底是这4个码字中的那一个。也可看到, 在这个系统中,偶数个(2或4)差错也无法发现。 为了使一个系统能检查和纠正一个差错,码间最小距离必须至少是“3”。最小距离为3时,或能纠正一个错,或能检二个错,但不能同时纠一个错和检二个错。编码信息纠错和检错能力的进一步提高需要进一步增加码字间的最小距离。 图8-3的表概括了最小距离为1至7的码的纠错和检错能力。 图3 码距越大,纠错能力越强,但数据冗余也越大,即编码效率低了。所以,选择码距要取决于特定系统的参数。数字系统的设计者必须考虑信息发生差错的概率和该系统能容许的最小差错率等因素。要有专门的研究来解决这些问题。 二、奇偶校验

三次样条插值的Matlab实现(自然边界和第一边界条件)(精)

(第一边界条件源代码: function y=yt1(x0,y0,f_0,f_n,x _____________(1 %第一类边界条件下三次样条插值; %xi 所求点; %yi所求点函数值; %x 已知插值点; %y 已知插值点函数值; %f_0左端点一次导数值; %f_n右端点一次导数值; n = length(x0; z = length(y0; h = zeros(n-1,1; k=zeros(n-2,1; l=zeros(n-2,1; S=2*eye(n; fori=1:n-1 h(i= x0(i+1-x0(i; end fori=1:n-2

k(i= h(i+1/(h(i+1+h(i; l(i= 1-k(i; end %对于第一种边界条件: k = [1;k]; _______________________(2 l = [l;1]; _______________________(3 %构建系数矩阵 S : fori = 1:n-1 S(i,i+1 = k(i; S(i+1,i = l(i; end %建立均差表: F=zeros(n-1,2; fori = 1:n-1 F(i,1 = (y0(i+1-y0(i/(x0(i+1-x0(i; end D = zeros(n-2,1; fori = 1:n-2 F(i,2 = (F(i+1,1-F(i,1/(x0(i+2-x0(i; D(i,1 = 6 * F(i,2;

end %构建函数 D : d0 = 6*(F(1,2-f_0/h(1; ___________(4 dn = 6*(f_n-F(n-1,2/h(n-1; ___________(5 D = [d0;D;dn]; ______________(6 m= S\D; %寻找 x 所在位置,并求出对应插值: fori = 1:length(x for j = 1:n-1 if (x(i<=x0(j+1&(x(i>=x0(j y(i =( m(j*(x0(j+1-x(i^3/(6*h(j+... (m(j+1*(x(i-x0(j^3/(6*h(j+... (y0(j-(m(j*h(j^2/6*(x0(j+1-x(i/h(j+... (y0(j+1-(m(j+1*h(j^2/6*(x(i-x0(j/h(j ; break; else continue; end end end (2 (自然边界条件源代码: 仅仅需要对上面部分标注的位置做如下修改 :

matlab用于计算方法的源程序

1、Newdon迭代法求解非线性方程 function [x k t]=NewdonToEquation(f,df,x0,eps) %牛顿迭代法解线性方程 %[x k t]=NewdonToEquation(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:原函数,定义为内联函数 ?:函数的倒数,定义为内联函数 %x0:初始值 %eps:误差限 % %应用举例: %f=inline('x^3+4*x^2-10'); ?=inline('3*x^2+8*x'); %x=NewdonToEquation(f,df,1,0.5e-6) %[x k]=NewdonToEquation(f,df,1,0.5e-6) %[x k t]=NewdonToEquation(f,df,1,0.5e-6) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquation(f,df,1) if nargin==3 eps="0".5e-6; end tic; k=0; while 1 x="x0-f"(x0)./df(x0); k="k"+1; if abs(x-x0) < eps || k >30 break; end x0=x; end t=toc; if k >= 30 disp('迭代次数太多。'); x="0"; t="0"; end

2、Newdon迭代法求解非线性方程组 function y="NewdonF"(x) %牛顿迭代法解非线性方程组的测试函数 %定义是必须定义为列向量 y(1,1)=x(1).^2-10*x(1)+x(2).^2+8; y(2,1)=x(1).*x(2).^2+x(1)-10*x(2)+8; return; function y="NewdonDF"(x) %牛顿迭代法解非线性方程组的测试函数的导数 y(1,1)=2*x(1)-10; y(1,2)=2*x(2); y(2,1)=x(2).^+1; y(2,2)=2*x(1).*x(2)-10; return; 以上两个函数仅供下面程序的测试 function [x k t]=NewdonToEquations(f,df,x0,eps) %牛顿迭代法解非线性方程组 %[x k t]=NewdonToEquations(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:方程组(事先定义) ?:方程组的导数(事先定义) %x0:初始值 %eps:误差限 % %说明:由于虚参f和df的类型都是函数,使用前需要事先在当前目录下采用函数M文件定义% 另外在使用此函数求解非线性方程组时,需要在函数名前加符号“@”,如下所示 % %应用举例: %x0=[0,0];eps=0.5e-6; %x=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps)

matlab_牛顿插值法_三次样条插值法

(){} 2 1 ()(11),5,10,20: 1252 1()1,(0,1,2,,)()2,(0,1,2,,)() ()2 35,20:1100 (i i i i n n k k k Newton f x x n x f x x i i n f x n x y i n Newton N x S x n x k y f x = -≤≤=+=-+====-+ = 题目:插值多项式和三次样条插值多项式。已知对作、计算函数在点处的值;、求插值数据点 的插值多项式和三次样条插值多项式;、对计算和相应的函数值),()() (1,2,,99)4:()max ()()max ()n k n k n k n k n k n k k k N x S x k E N y N x E S y S x ==-=- 和; 、计算,; 解释你所得到的结果。 算法组织: 本题在算法上需要解决的问题主要是:求出第二问中的Newton 插值多项式 )(x N n 和三次样条插值多项式()n S x 。如此,则第三、四问则迎刃而解。计算两 种插值多项式的算法如下: 一、求Newton 插值多项式)(x N n ,算法组织如下: Newton 插值多项式的表达式如下: )())(()()(110010--???--+???+-+=n n n x x x x x x c x x c c x N 其中每一项的系数c i 的表达式如下: 1102110) ,,,(),,,(),,,(x x x x x f x x x f x x x f c i i i i i -???-???= ???=- 根据i c 以上公式,计算的步骤如下: ?? ??? ?? ?????+??????? ???????????----) ,,,,(1) ,,,(),,,,(),(,),,(2)(,),(),(11101111011010n n n n n n n n x x x x f n x x x f x x x f n x x f x x f x f x f x f 、计算、计算、计算、计算 二、求三次样条插值多项式)(x S n ,算法组织如下:

相关主题
文本预览
相关文档 最新文档