1 课程设计目的
1.1 对数字通信系统主要原理和技术进行研究,包括二进制相移键控(2psk)及解调技术、高斯噪声信道原理、以及信源编码中香农编码、信道编码中hamming码的基本原理等。
1.2 建立完整的基于2psk和(7,4)循环码的数字通信系统仿真模型,包括2psk调制解调及香农、hamming码的编译码;
1.3 在信道中加入高斯噪声,观察系统的纠错能力,统计误码率,并进行分析。
1.4 锻炼我们查阅资料、
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
比较、团结合作的能力。学会简单电路的实验调试和整机指标测试方法,增强我们的动手能力。为以后学习和工作打下基础。
2 课程设计正文
这次课程设计我做的是2psk调制解调技术、高斯噪声信道、以及香农编译码、hamming编译码。因此需要对以上原理进行了解和熟悉,并且熟悉用matlab进行仿真。
2.1 性能指标
2.1.1 数字信号的传输方式分为基带传输和带通传输,在实际应用中,大多数信道具有带通特性而不能直接传输基带信号。为了使数字信号在带通信道中传输,必须使用数字基带信号对载波进行调制,以使信号与信道的特性相匹配。这种用数字基带信号控制载波,把数字基带信号变换为数字带通信号的过程称为数字调制。
这次使用的数字调制技术方法是:利用模拟调制的方法去实现数字式调制,即把数字调制看成是模拟调制的一个特例,把数字基带信号当做模拟信号的特殊情况处理。
图1 相应的信号波形的示例
1 0 1
2.1.2 香农-费诺编码也是一种常见的信源编码方法。信源符号以概率递减的次序排列进来,将排列好的信源符号划分为两大组,使第组的概率和近于相同,并各赋于一个二元码符号”0”和”1”.然后,将每一大组的信源符号再分成两组,使同一组的两个小组的概率和近于相同,并又分别赋予一个二元码符号.依次下去,直至每一个小组只剩下一个信源符号为止.这样,信源符号所对应的码符号序列则为编得的码字。
2.1.3 当计算机存储或移动数据时,可能会产生数据位错误,这时可以利用汉明码来检测并纠错,简单的说,汉明码是一个错误校验码码集。
2.2 matlab代码
2.2.1 香农编码
%*******************************%香农编码***********************************
A=[0.4,0.3,0.1,0.09,0.04,0.07];
A=fliplr(sort(A));%降序排列
[m,n]=size(A);
for i=1:n
B(i,1)=A(i);%生成B的第1列
end
%生成B第2列的元素
a=sum(B(:,1))/2;
for k=1:n-1
if abs(sum(B(1:k,1))-a)<=abs(sum(B(1:k+1,1))-a)
break;
end
end
for i=1:n%生成B第2列的元素
if i<=k
B(i,2)=0;
else
B(i,2)=1;
end
end
%生成第一次编码的结果
END=B(:,2)';
END=sym(END);
%生成第3列及以后几列的各元素
j=3;
while (j~=0)
p=1;
while(p<=n)
x=B(p,j-1);
for q=p:n
if x==-1
break;
else
if B(q,j-1)==x
y=1;
continue;
else
y=0;
break;
end
end
end
if y==1
q=q+1;
end
if q==p|q-p==1
B(p,j)=-1;
else
if q-p==2
B(p,j)=0;
END(p)=[char(END(p)),'0'];
B(q-1,j)=1;
END(q-1)=[char(END(q-1)),'1'];
else
a=sum(B(p:q-1,1))/2;
for k=p:q-2
if abs(sum(B(p:k,1))-a)<=abs(sum(B(p:k+1,1))-a);
break;
end
end
for i=p:q-1
if i<=k
B(i,j)=0;
END(i)=[char(END(i)),'0'];
else
B(i,j)=1;
END(i)=[char(END(i)),'1'];
end
end
end
end
p=q;
end
C=B(:,j);
D=find(C==-1);
[e,f]=size(D);
if e==n
j=0;
else
j=j+1;
end
end
B
A
END
2.2.2 香农译码
%********************************%香农解码********************************
jg=[];
for x=1:100
if ccc(x,1)==0&ccc(x,2)==0&ccc(x,3)==0&ccc(x,4)==0 jg(x)=1;
elseif ccc(x,1)==0&ccc(x,2)==0&ccc(x,3)==1&ccc(x,4)==0 jg(x)=2;
elseif ccc(x,1)==1&ccc(x,2)==1&ccc(x,3)==0&ccc(x,4)==0 jg(x)=3;
elseif ccc(x,1)==1&ccc(x,2)==1&ccc(x,3)==0&ccc(x,4)==1 jg(x)=4;
elseif ccc(x,1)==1&ccc(x,2)==1&ccc(x,3)==1&ccc(x,4)==0 jg(x)=6;
elseif ccc(x,1)==1&ccc(x,2)==1&ccc(x,3)==1&ccc(x,4)==1 jg(x)=5;
end;
end;
jg
2.2.3 Hamming编码
%******************************汉明编码***********************************
hh=encode(e,7,4,'hamming/fmt');
hh
2.2.4 Hamming译码
%********************************汉明解码*********************************
ddd=reshape(bc,7,100);
abc=ddd';
ccc= decode(abc,7,4,'hamming/fmt')
2.2.5 信源
%*****************************信源*****************************************
aa = randsrc(1,100,[symbols;p]);
aa
e=zeros(100,4)
for i = 1 : 1:100
switch aa(i)
case 1
e(i,:)=[0,0,0,0]
case 2
e(i,:)=[0,0,1,0]
case 3
e(i,:)=[1,1,0,0]
case 4
e(i,:)=[1,1,0,1]
case 6
e(i,:)=[1,1,1,0]
case 5
e(i,:)=[1,1,1,1]
end;
end;
2.2.6 2psk调制解调
%*******************************2PSK调制解调*******************************
code=[]
for z=0:99
for t=1:7