收藏 分销(赏)

matlab编程.doc

上传人:精*** 文档编号:2393127 上传时间:2024-05-29 格式:DOC 页数:9 大小:101.51KB 下载积分:6 金币
下载 相关 举报
matlab编程.doc_第1页
第1页 / 共9页
matlab编程.doc_第2页
第2页 / 共9页


点击查看更多>>
资源描述
AMI、HDB3、密勒码编码实现 ——matlab仿真模拟 【任务描述】 A. 产生一个长为1000的二进制随机序列,“0”的概率为0.8,”1”的概率为0.2; B. 对上述数据进行归零AMI编码,脉冲宽度为符号宽度的50%,波形采样率为符号率的8倍,画出前20个符号对应的波形(同时给出前20位信源序列); C. 改用HDB3码,画出前20个符号对应的波形; D. 改用密勒码,画出前20个符号对应的波形; E. 分别对上述1000个符号的波形进行功率谱估计,画出功率谱; F. 改变信源“0”的概率,观察AMI码的功率谱变化情况; 【基本思路】 采用调用子函数的方法,在掌握了各种码的编码规律之后实现编码功能。具体实现了AMI码、HDB3码以及密勒码的编码。而且调用了功率谱函数spectrum对各种码的功率谱以及不同信源概率下的功率谱进行了比较。下面就详细介绍各种码形的变换思路: 1. AMI码 AMI码中信息码“0”对应着三元码序列中的“0”,信息码“1”则交替地变换为“+1”和“-1”的归零码。 2. HDB3码 在AMI码的基础上,当出现多于3个零的情况,利用其检错能力,使用异常代替长连零,以平衡码中的极性使得直流分量为0。 3. 密勒码 密勒码中使用码元周期中点的跳变来代表“1”,当出现连续的“0”时出现电平跳变,否则码元周期内不出现跳变。 【程序清单】 Code.m:完成产生随机0、1序列并且将其用波形表示的功能。 AMI_Code.m:将随机序列转换为AMI码 HDB3_Code.m:将随机序列转换为HDB3码 Miller_Code.m:将随机序列转换为密勒码 Plot_spectrum.m: 使用库函数绘制功率谱曲线 【仿真分析】 1. 前20个符号所对应的各种码形 在一次的仿真中随机产生的前20个符号为: 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 0 显然,NRZ(L)码的波形即为原始的序列信息码 对应的AMI码为: 0 0 0 0 0 0 0 0 0 0 1 -1 0 0 1 0 0 0 -1 0 对应的HDB3码为: 1 0 0 1 -1 0 0 -1 0 0 1 -1 0 0 1 0 0 0 -1 0 对应的密勒码为: 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 0 可以看出:编码结果完全正确! 2. 四种码形的功率谱 3. 不同概率‘0’下AMI码形功率谱变化 【程序代码】 figure subplot(3,1,1) plot(x_t(1:20*8)) axis([1,20*8,-1.5,1.5]); title('initial code') subplot(3,1,2) plot(y_AMI(1:20*8)) axis([1,20*8,-1.5,1.5]); title('AMI code') subplot(3,1,3) plot(y_HDB3(1:20*8)) axis([1,20*8,-1.5,1.5]); title('HDB3 code') figure plot_spectrum(x_t,'b'); hold on plot_spectrum(y_AMI,'r'); plot_spectrum(y_HDB3,'g'); title('Power spectrum of NRZ,AMI and HDB3 Code') legend('NRZ','AMI','HDB3') %Code.m N=1000; fs=8; x=ceil(rand(1,N)-0.8); AMI=AMI_Code(x); HDB3=HDB3_Code(x); Miller=Miller_Code(x); y=zeros(1,N*fs); x_t=zeros(1,N*fs); y_AMI=zeros(1,N*fs); y_HDB3=zeros(1,N*fs); y_Miller=zeros(1,N*fs); for i=1:N*fs if(mod(i-1,8)<=5 & mod(i-1,8)>=2) y(i)=1; else y(i)=0; end %分别给画图序列赋值 y_AMI(i)=y(i)*AMI(ceil(i/8)); y_HDB3(i)=y(i)*HDB3(ceil(i/8)); y_Miller(i)=Miller(ceil(i/4)); x_t(i)=x(ceil(i/8)); end %AMI_Code.m function AMI=AMI_Code(x) m=length(x); %初始化AMI编码 AMI=zeros(1,m); %反转标志初始化 f=0; for i=1:m %若原码为0,直接将AMI码置0 if x(i)==0 AMI(i)=0; %否则,使得AMI码交替为+1,-1 else f=XOR(f,1); AMI(i)=2*f-1; end end return; %HDB3.m function HDB3=HDB3_Code(x) m=length(x); %初始化HDB3编码 HDB3=zeros(1,m); %初始化信息“1”标志B和连0数标志V B=-1; V=-1; i=1; while (i<=m-3) %若原码为1,交替为+1,-1 if(x(i)==1) HDB3(i)=-1*B; B=HDB3(i); i=i+1; else %原码只有一个0 if(x(i+1)==1) HDB3(i)=0; HDB3(i+1)=-1*B; B=HDB3(i+1); i=i+2; else %原码有两个连续0 if(x(i+2)==1) HDB3(i)=0; HDB3(i+1)=0; HDB3(i+2)=-1*B; B=HDB3(i+2); i=i+3; else %原码有三个连续0 if(x(i+2)==1) HDB3(i)=0; HDB3(i+1)=0; HDB3(i+2)=0; HDB3(i+3)=-1*B; B=HDB3(i+3); i=i+4; %原码出现了四个连续0 else %原始B、V标志不相同 if(Xor(B,V)) HDB3(i)=01; HDB3(i+1)=0; HDB3(i+2)=0; HDB3(i+3)=B; V=B;i=i+4; %B、V标志相同 else HDB3(i)=-1*B; HDB3(i+1)=0; HDB3(i+2)=0; HDB3(i+3)=-1*B; B=-1*B;V=B;i=i+4; end end end end end end for j=i:m if (x(j)==1) HDB3(j)=-1*B; B=HDB3(j); else HDB3(j)=0; end end return; %plot_spectrum.m function plot_spectrum(x,str) P=spectrum(x,8000,0,hanning(300)); plot(10*log10(P(:,1)),str); return; function plot_spectrum(x,str) P=spectrum(x,8000,0,hanning(300)); plot(10*log10(P(:,1)),str); return; 第 9 页 共 9 页
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服