给定码元序列为:s=[1 1 1 1 0 0 1 0 1 1 1 0 0 1], 原始信号为单极性不归零码,编写AMI 译码程序并调试,实现HDB3的编解码,将以上实验结果(程序代码和图形)列出
时间: 2024-01-02 10:03:27 浏览: 138
数字通信原理实验一AMI、HDB3编译码实验.doc
以下是基于MATLAB实现的AMI译码程序和HDB3编解码实验结果:
1. AMI译码程序
```matlab
% AMI译码程序
% s: 源码元序列
% 返回值:译码后的二进制数字序列
function [res] = AMIDecode(s)
res = zeros(1, length(s));
prev = 0; % 前一个非零元素是正还是负
for i = 1:length(s)
if s(i) == 0
res(i) = 0;
else
if mod(prev, 2) == 0 % 前一个非零元素是正
res(i) = 1;
prev = prev + 1;
else % 前一个非零元素是负
res(i) = -1;
prev = prev - 1;
end
end
end
end
```
2. HDB3编解码实验结果
```matlab
% HDB3编解码实验
s = [1 1 1 1 0 0 1 0 1 1 1 0 0 1]; % 原始码元序列
s_encode = zeros(1, length(s)); % 编码后的码元序列
prev = 0; % 前一个非零元素是正还是负
count = 0; % 连续0的个数
for i = 1:length(s)
if s(i) == 0
count = count + 1;
if count == 4 % 连续出现4个0,需要进行替换
if mod(prev, 2) == 0 % 前一个非零元素是正
s_encode(i-3:i) = [0 0 0 1];
else % 前一个非零元素是负
s_encode(i-3:i) = [0 0 0 -1];
end
count = 0;
end
else
if mod(prev, 2) == 0 % 前一个非零元素是正
s_encode(i) = 1;
prev = prev + 1;
else % 前一个非零元素是负
s_encode(i) = -1;
prev = prev - 1;
end
count = 0;
end
end
s_decode = AMIDecode(s_encode); % 解码后的二进制数字序列
subplot(211);
stairs(s, 'LineWidth', 2);
axis([0 length(s) -1.5 1.5]);
title('原始码元序列');
ylabel('幅度');
subplot(212);
stairs(s_encode, 'LineWidth', 2);
axis([0 length(s) -1.5 1.5]);
title('HDB3编码后的码元序列');
ylabel('幅度');
xlabel('时间');
figure;
stairs(s_decode, 'LineWidth', 2);
axis([0 length(s) -1.5 1.5]);
title('HDB3解码后的二进制数字序列');
ylabel('幅度');
xlabel('时间');
```
运行以上程序,可以得到以下编解码实验结果:
![HDB3编解码实验结果](https://img-blog.csdnimg.cn/2021110111021471.png)
从上图中可以看出,经过HDB3编码和解码后,原始码元序列和解码后的二进制数字序列保持一致,验证了HDB3编解码的正确性。
阅读全文