function a = ami_code(s) %s=[1101000000010010000001] sn=length(s); sg=1; a=s; for i=1:sn if a(i)==1 if mod(sg,2)==0 a(i)=-1; end sg=sg+1; end end n=20; y=zeros(1,n); x1=[ones(1,n/2) zeros(1,n/2)]; x0=zeros(1,n); x2=[-ones(1,n/2) zeros(1,n/2)]; z=zeros(size(1,nsn)); for i=1:sn switch a(i) case 1 y=x1; case -1 y=x2; case 0 y=x0; end z(1,[(i-1)n+1:in])=y; end ii=(1:nsn)/n; plot(ii,z);grid on;ylabel('AMI编码'); 写出上述AMI码对应的解码代码并绘制对应波形图代码及调用代码
时间: 2023-11-18 15:02:57 浏览: 35
以下是解码代码和绘制波形图的代码:
解码代码:
```
function s = ami_decode(a)
n = length(a)/20; % 每个码元包含20个符号
s = zeros(1, n);
sg = 1;
for i = 1:n
if a((i-1)*20+1) == -1 % 如果第一个符号为负,则说明这个码元为0
continue;
end
if mod(sg, 2) == 1 % 如果sg为奇数,则说明这个码元为1
s(i) = 1;
else % 否则为-1
s(i) = -1;
end
sg = sg + 1;
end
end
```
绘制波形图的代码:
```
s = [1 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1];
a = ami_code(s);
figure;
hold on;
for i = 1:length(a)
switch a(i)
case 1
plot([i i], [0 1], 'b');
case -1
plot([i i], [0 -1], 'b');
case 0
plot([i i], [0 0], 'b');
end
end
plot(1:length(s), s, 'r', 'LineWidth', 2);
grid on;
ylim([-1.5 1.5]);
xlabel('时间');
ylabel('信号值');
title('AMI编码波形图');
legend('编码信号', '原始信号');
```
调用代码:
```
s = [1 1 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1];
a = ami_code(s);
s_decoded = ami_decode(a);
disp(s_decoded);
```