AMI编码主程序.docx
《AMI编码主程序.docx》由会员分享,可在线阅读,更多相关《AMI编码主程序.docx(12页珍藏版)》请在冰豆网上搜索。
AMI编码主程序
AMI编码主程序:
functiony=AMI(x,samp)
last_one=-1;
fori=1:
length(x)
ifx(i)==1
forj=1:
samp/2
y((2*i-2)*samp/2+j)=-last_one;
y((2*i-1)*samp/2+j)=0;
end
last_one=-last_one;
else
forj=1:
samp
y((i-1)*samp+j)=0;
end
end
end
y=[y,x(i)];
曼彻斯特编码主程序:
#include
main()
{
inti,j;
chara[10],b[20];
cout<<"首先进行曼彻斯特编码:
"<cout<<"请输入二进制数据流:
"<for(j=0;j<10;j++)
{
cin>>a[j];
}
for(i=0;i<10;i++)
{
if(a[i]=='0'){b[2*i]='0';b[2*i+1]='1';}
if(a[i]!
='0'){b[2*i]='1';b[2*i+1]='0';}
}
cout<<"曼彻斯特码编码结果为:
"<for(i=0;i<20;i++)
{
cout<
}
cout<//下面进行曼彻斯特译码
charc[20],d[10];
cout<<"下面进行曼彻斯特译码:
"<cout<<"请输入偶数个二进制数据流:
"<for(i=0;i<20;i++)
{
cin>>c[i];
}
for(i=0;i<10;i++)
{
if((c[2*i]=='0')&&(c[2*i+1]=='1'))d[i]='0';
elsed[i]='1';
}
for(i=0;i<10;i++)
{
cout<}
cout<}
运行结果:
费诺编码主程序:
functionc=fano(p)
%p=[0.250.250.200.150.100.05]
%c=fano(p)
n=size(p,2);%已经编码完成
ifn==1
c=cell(1,1);
c{1}='';
return
end
[p,index]=sort(p);%按概率排序
p=fliplr(p);
total=sum(p);%总概率
acc=0;%累积概率
flag=0;%是否到达尾部的标志
fori=1:
n-1
newacc=acc+p(i);
ifabs(total-2*newacc)>=abs(total-2*acc)
flag=1;
break;
end
acc=newacc;
end
if~flag
i=n;
end
split=i;%从分界点对两边的码递归做fano
c1=fano(p(1:
split-1));
c2=fano(p(split:
n));
c=cell(1,n);%添加前缀0,1
fori=1:
split-1
c{i}=strcat('0',c1{i});
end
fori=split:
n
c{i}=strcat('1',c2{i-split+1});
end%将顺序调整回去
c=fliplr(c);
c(index)=c;
窗函数主程序框图如下所示:
窗函数法设计FIR数字滤波器主程序:
b=1;
closeall;
i=0;
while(b);
temp=menu('选择窗函数长度N','N=10','N=15','N=20','N=25','N=30','N=33','N=35','N=40','N=45','N=50','N=55','N=60','N=64');
menu1=[10,15,20,25,30,33,35,40,45,50,55,60,64];
N=menu1(temp);
temp=menu('选择逼近理想低通滤波器截止频率Wc','Wc=pi/4','Wc=pi/2','Wc=3*pi/4','Wc=pi','Wc=0.5','Wc=1.0','Wc=1.5','Wc=2.0','Wc=2.5','Wc=3.0');
menu2=[pi/4,pi/2,3*pi/4,pi,0.5,1,1.5,2,2.5,3];
a=(N-1)/2;
w=menu2(temp);
n=[0:
(N-1)];
hd=sin(w*(n-a))/((n-a)*pi);%得到理想低通滤波器
k=menu('请选择窗口类型:
','boxcar','hamming','hanning','blackman');
ifk==1
B=boxcar(N);
string=['Boxcar','N=',num2str(N)];
elseifk==2
B=hamming(N);
string=['Hamming','N=',num2str(N)];
elseifk==3
B=hanning(N);
string=['Hanning','N=',num2str(N)];
elseifk==4
B=blackman(N);
string=['Blackman','N=',num2str(N)];
end
end
end
end
h=hd.*(B)';%得到FIR数字滤波器
[H,m]=freqz(h,[1],1024,'whole');%求其频率响应
mag=abs(H);%得到幅值
db=20*log10((mag+eps)/max(mag));
pha=angle(H);%得到相位
i=i+1;
figure(i)
subplot(2,2,1);
n=0:
N-1;
stem(n,h,'.');
axis([0,N-1,-0.1,0.3]);
holdon;
n=0:
N-1;
x=zeros(N);
plot(n,x,'-');
xlabel('n');
ylabel('h(n)');
title('实际低通滤波器的h(n)');
text((0.3*N),0.27,string);
holdoff;
subplot(2,2,2);
plot(m/pi,db);
axis([0,1,-100,0]);
xlabel('w/pi');
ylabel('dB');
title('衰减特性(dB)');
grid;
subplot(2,2,3);
plot(m,pha);
holdon;
n=0:
7;
x=zeros(8);
plot(n,x,'-');
title('相频特性');
xlabel('频率(rad)');
ylabel('相位(rad)');
axis([0,3.15,-4,4]);
subplot(2,2,4);
plot(m,mag);
title('频率特性');
xlabel('频率W(rad)');
ylabel('幅值');
axis([0,3.15,0,0.5]);
text(0.9,1.2,string);
b=menu('DoYouwantToContinue?
','Yes','No');
ifb==2
b=0;
end
end
temp=menu('CloseAllFigure?
','Yes','No');
iftemp==1
closeall
End
运行结果:
矩形窗
汉宁窗:
海明窗:
布莱克曼窗: