matlab实现A律13折线的编码和译码以及量化误差的计算
生活随笔
收集整理的這篇文章主要介紹了
matlab实现A律13折线的编码和译码以及量化误差的计算
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
%judge函數
function [B,m1,n1]=judge(I,m,n)
if I>=m&&I<(m+n)/2B=0;m1=m;n1=(m+n)/2;
elseB=1;m1=(m+n)/2;n1=n;
end
%主函數如下
clear all;
clc;
figure(7)
fc=2000;
t=0:1/2000:1;
m=2000*sin(100*pi*t);
subplot(311);
plot(t,m);%抽樣序列
axis([0 0.02 -2000 2000]);
title('抽樣序列');
xlabel('t(s)');
for i=1:length(m)if m(i)>0 %確定極性碼B1=1;elseB1=0;endm(i)=abs(m(i));C=[0 16 32 64 128 256 512 1024 2048];%A律13折現非均勻區間for j=1:length(C);if m(i)>=C(j)&&m(i)<=C(j+1)L=j-1;L1=dec2bin(L,3);B2=L1(1);B2=str2num(B2);B3=L1(2);B3=str2num(B3);B4=L1(3);B4=str2num(B4);endenda=C(L+1);%確定段內碼b=C(L+2);[B5,a1,b1]=judge(m(i),a,b);[B6,a2,b2]=judge(m(i),a1,b1);[B7,a3,b3]=judge(m(i),a2,b2);[B8,a4,b4]=judge(m(i),a3,b3);result(i,1)=B1;result(i,2)=B2;result(i,3)=B3;result(i,4)=B4;result(i,5)=B5;result(i,6)=B6;result(i,7)=B7;result(i,8)=B8;
end
%以下為A律13折線譯碼
C2=[0,16;16,32;32,64;64,128;128,256;256,512;512,1024;1024,2048];
step=[1,1,2,4,8,16,32,64];
for i=1:2000temp(i,1)=result(i,1);temp(i,2)=bin2dec(num2str(result(i,2:4)));temp(i,3)=bin2dec(num2str(result(i,5:8)));
end
for i=1:2000position=floor((m(i)-C2(temp(i,2)+1,1))/step(temp(i,2)+1));result2(i)=C2(temp(i,2)+1,1)+position*step(temp(i,2)+1)+0.5*step(temp(i,2)+1);if temp(i,1)==0result2(i)=-result2(i);end
end
subplot(312);
t2=0:1/2000:1999/2000;
plot(t2,result2);
axis([0 0.02 -2000 2000]);
title('PCM譯碼信號(即量化信號)');
xlabel('t(s)');
m=2000*sin(100*pi*t);
for i=1:2000error(i)=result2(i)-m(i);
end
subplot(313);
plot(t2,error);
axis([0 0.02 min(error)-1 max(error)+1]);
title('量化誤差');
xlabel('t(s)');
被量化信號改動主函數的那一行即可,或許也可以寫個input()
運行結果
總結
以上是生活随笔為你收集整理的matlab实现A律13折线的编码和译码以及量化误差的计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: deepin v20桌面bug_“国产”
- 下一篇: 用python编写一个点餐程序_急急急!