基于matlab的码型转换

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

利用Matlab软件的GUI界面编程,做一个简单的界面,通过此界面调用相关的程序去实现由抽样判决后的AMI码型、CMI码型和HDB3码型数字序列恢复出原始的PCM脉冲编码信号。

实验目的:

1,熟悉Matlab的GUI的编程操作,学会运用GUI来建立一个界面2.掌握AMI,CMI,HDB3码型的特点和意义,学会将PCM脉冲编码信号转化为AMI,CMI,HDB3的编码以及AMI,CMI,HDB3解码的方式。

实验方法:

实验中采用的方法是先建立大概的界面,其中包括输入框、按钮、提示内容及坐标系等。然后再对各种组件设置好属性,并对各个组件编写回调函数,最后进行调试验证饥渴。

实验代码:

1.AMI码型转换:

%%%%%%%%%%%% 编码 %%%%%%%%%%%%%

p = -1;

for i=1:length(f);

if f(i)==1

e(i) = (-1)*p;

p = e(i);

else

e(i) = f(i);

end

end

%%%%%%%%%%%% 译码 %%%%%%%%%%%%

for i=1:length(f);

if e(i)~=0

l(i) = 1;

else

e(i) = 0;

end

end

编码:代码中的f代表着输入字符串转化后的ASCII码,用变量p来实现原信号中1的正负交替。例如,f(1)=1,则e(1)=1,p=1;f(2)=1,则e(2)=-1,p=-1。如此就可以得到正负1交替了。

译码:当e(i)不等于0,就把结果等于1。

2.CMI码型转换

%%%%%%%%%%%% 编码 %%%%%%%%%%%%%

m=1;

p=-1;

for i=1:length(f)

if(f(i)==1&m==1)

s(i)=3;

m=m*p;

else if(f(i)==1&m==-1)

s(i)=0;

m=m*p;

else

s(i)=1;

end

end

end

k=dec2bin(s,2);

l=k';

x=l(:);

y=x';

n=str2num(y(1));

for i=2:length(y)

n=[n str2num(y(i))];

end

%%%%%%%%%%%% 译码 %%%%%%%%%%%%%

if n(1)==0

if n(2)==1

cm=[0];

else

cm=[1];

end

else

cm=[1];

end

r=3;

while r

if n(r)==0

if n(r+1)==1

cm=[cm 0];

else

cm=[cm 1];

end

else

cm=[cm 1];

end

r=r+2;

end

3.HDB3码型转换

%%%%%%%%%%%% 编码 %%%%%%%%%%%%%

yn=xn;% 输出yn初始化

num=0;% 计数器初始化

for k=1:length(xn)

if xn(k)==1

num=num+1; % "1"计数器

if num/2 == fix(num/2) % 奇数个1时输出-1,进行极性交替

yn(k)=1;

else

yn(k)=-1;

end

end

end

% HDB3编码

num=0; % 连零计数器初始化

yh=yn; % 输出初始化

sign=0; % 极性标志初始化为0

V=zeros(1,length(yn));% V脉冲位置记录变量

B=zeros(1,length(yn));% B脉冲位置记录变量

for k=1:length(yn)

if yn(k)==0

num=num+1; % 连“0”个数计数

if num==4 % 如果4连“0”

num=0; % 计数器清零

yh(k)=1*yh(k-4);

% 让0000的最后一个0改变为与前一个非零符号相同极性的符号

V(k)=yh(k); % V脉冲位置记录

if yh(k)==sign % 如果当前V符号与前一个V符号的极性相同 yh(k)=-1*yh(k); % 则让当前V符号极性反转,以满足V符号间相互极性反转要求

yh(k-3)=yh(k); % 添加B符号,与V符号同极性

B(k-3)=yh(k); % B脉冲位置记录

V(k)=yh(k); % V脉冲位置记录

yh(k+1:length(yn))=-1*yh(k+1:length(yn));

% 并让后面的非零符号从V符号开始再交替变化

end

sign=yh(k); % 记录前一个V符号的极性

end

else

num=0; % 当前输入为“1”则连“0”计数器清零

end

end

%%%%%%%%%%%% 译码 %%%%%%%%%%%%%

input=yh; % HDB3码输入

decode=input; % 输出初始化

sign=0; % 极性标志初始化

for k=1:length(yh)

if input(k) ~= 0

if sign==yh(k) % 如果当前码与前一个非零码的极性相同

decode(k-3:k)=[0 0 0 0];% 则该码判为V码并将*00V清零

end

sign=input(k); % 极性标志

end

end

decode=abs(decode); % 整流

实验现象:

总体界面:

AMI:

相关文档
最新文档