?? ch7example6prog1.m
字號:
% ch7example6prog1.m
% AMI碼的編碼
xn=[1 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0];% 輸入單極性碼
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 % 編碼完成
re=[xn',yn',yh',V',B']; % 結果輸出: xn AMI HDB3 V&B符號
% HDB3解碼
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); % 整流
error=sum([xn'-decode']); % 解碼的正確性檢驗,作圖
subplot(3,1,1);stairs([0:length(xn)-1],xn);axis([0 length(xn) -2 2]);
subplot(3,1,2);stairs([0:length(xn)-1],yh);axis([0 length(xn) -2 2]);
subplot(3,1,3);stairs([0:length(xn)-1],decode);axis([0 length(xn) -2 2]);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -