图像通信系统设计与仿真课程设计Word格式.docx
《图像通信系统设计与仿真课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《图像通信系统设计与仿真课程设计Word格式.docx(11页珍藏版)》请在冰豆网上搜索。
由于进行的是无损压缩,所以要扫描图像的所有像素点,压缩过程分为四步:
1 扫描统计像素出现的概率并按大小排列;
2 建立最优二叉树;
3 哈夫曼编码;
4 保存编码。
2.2哈弗曼解码的原理
哈夫曼解码过程是文件编码过程的逆过程,由于哈夫曼编码可即时解码,因此只要得到一个码字,则通过查找哈夫曼编码表得到相应的字符,映射过程是编码时映射的逆过程。
因此,每从压缩文件中读出一个码字,就从通过查找哈夫曼编码表用字符替换相应的码字,当压缩文件中所有的码字被字符替换掉,也就宣告解压过程完成了。
第三章数字信号的调制与解调
3.1数字信号的调制
3.1.1调制的概念及分类
用基带信号对载波(通常为余弦或正弦)波形的某些参数(如幅度、相位和频率)进行控制,使这些参数随基带信号的变化而变化。
因此,数字信号的调制可分为振幅键控(ASK),相移键控(PSK),频移键控(FSK)。
3.1.2调制的原理
1)M进制振幅键控(MASK)基本原理
M进制数字振幅调制信号的载波幅度有M种取值,在每个符号时间间隔Ts内发送M个幅度中的一种幅度的载波。
表达式:
a.g(t)为基带信号波形
b.Ts为符号时间间隔
c.an为幅度值
2)M制频移键控(MFSK)基本原理
式中
为载波角频率,共有M种取值。
通常可选载波频率f=n/2Ts,n为正整数,此时M种发送信号相互正交。
3)M进制相移键控(MPSK)基本原理
表达式:
式中
a.g(t)--信号包络波形,通常为矩形波,幅度为1
b.Ts--码元时间宽度
c.c--载波角频率
d.
--第n个码元对应的相位,共有M种取值
3.2数字信号的解调
3.2.1解调的概念
解调也叫检波,其作用就是从接收到的已调波中无失真地恢复出调制信号。
调幅信号的解调技术可大致分为两类:
相关解调和非相关解调。
1)相干解调(又称同步检波):
需要在接收端知道发射载波的频率和相位(恢复相干载波以用于与接收的已调信号相乘)。
其中乘机检波器也叫鉴相器,是将输入的带通信号变为基带信号的下变频电路。
2)非相干解调(又称包络检波):
即不需要知道有关的信息,它的输出信号与输入信号实际包络成正比。
3.2.2解调的原理
1.ASK信号的解调
2ASK相干解调方框图如图所示
2.FSK信号的解调
2FSK相干解调方框图如图所示
3.PSK信号的解调
2PSK相干解调方框图如图所示
第四章图形用户界面的设计与制作
4.1图形用户界面GUI的概述
图形用户界面GUI是一种包含多种对象的图形窗口,并为GUI开发提供一个方便高效的集成开发环境GUIDE。
GUIDE主要是一个界面设计工具集,MATLAB将所有GUI支持的控件都集成在这个环境中。
GUIDE将设计好的GUI保存在一个FIG文件中,同时生成M文件框架。
FIG文件:
该文件包括GUI图形窗口及其所有FIG文件包含序列化的图形窗口对象;
M文件:
该文件包括GUI设计、控制函数以及定义为子函数的用户控件回调函数。
GUIDE可以根据GUI设计过程直接自动生成M文件框架,优点如下:
a.M文件已经包含一些必要的代码;
b.管理图形对象句柄并执行回调函数子程序;
c.提供管理全局数据的途径;
d.支持自动插入回调函数原型。
4.2图形用户界面(GUI)的设计与制作
1)GUI创建包括界面设计和控件编程两部分,主要步骤如下:
a.通过设置GUIDE应用程序的选项来运行GUIDE;
b.使用界面设计编辑器进行界面设计;
c.编写控件行为响应控制(即回调函数)代码。
2)图像通信系统的的图形用户界面GUI
第五章总结
参考文献
附录1图像通信在在MATLAB中算法实现
1、哈弗曼编码在MATLAB中的算法
1.function[ratio,rowsB,colsB,dictionary,Huffcode_I]=HuffEncode(I)
2.K=imread('
cameraman.tif'
);
3.I=imresize(K,[20,20]);
4.maxI=max(max(I));
%求图像灰度级最大值
5.H=zeros(1,maxI+1);
%直方图矩阵初始化
6.[rows,cols]=size(I);
7.rowsB=tentotwo(rows);
%调用十进制转换成二进制的程序
8.colsB=tentotwo(cols);
9.fori=1:
rows
10.forj=1:
cols
11.H(I(i,j)+1)=H(I(i,j)+1)+1;
12.end
13.end
14.H=H/(rows*cols);
15.[Index,Hn]=sortDezero(H);
%调用sortDezero函数
16.IndexCell=num2Cell(Index);
%Huffman树的下标变成元包数组
17.lenIndex=length(Index);
18.codeWord=cell(1,maxI+1);
%定义元包数组存放码字
19.fori=1:
lenIndex-1
20.index1=IndexCell{1};
21.index2=IndexCell{2};
forj=1:
length(index1)
22.codeWord(index1(j))={[0,codeWord{index1(j)}]};
23.end
24.forj=1:
length(index2)
25.codeWord(index2(j))={[1,codeWord{index2(j)}]};
26.end
27.IndexCell=[{[index1,index2]},IndexCell{3:
end}];
28.Hn=[sum(Hn(1:
2)),Hn(3:
end)];
29.[Index,Hn]=sortH(Hn);
30.IndexCell=IndexCell(Index);
31.end
32.Lavg=0;
33.fori=1:
length(H)
34.Lavg=Lavg+H(i)*length(codeWord{i});
35.end
36.ratio=8/Lavg;
%计算压缩比
37.II=I(:
38.Huffcode_I=[];
%存储图像的Huffman编码
39.fori=1:
length(II)
40.Huffcode_I=[Huffcode_I,codeWord{II(i)+1}];
41.end
42.Huffcode_I=logical(Huffcode_I);
43.dictionary=zeros(1,uint16(maxI+1)*16);
%字典的传送
44.A=[];
45.fori=1:
double(maxI+1)
46.num=length(codeWord{i});
47.Y=num;
48.ifnum~=0
49.fork=1:
4
50.B=mod(Y,2);
51.dictionary(16*(i-1)+(5-k))=B;
52.Y=floor(Y/2);
53.end
54.A=codeWord{i};
55.forj=1:
num
56.dictionary(16*(i-1)+4+j)=A(j);
57.end
58.end
59.end
2、哈弗曼编码在MATLAB中的算法如下:
1.functionDI=HuffDecode(rowsB,colsB,dictionary,Huffcode_I)
2.rows=0;
%图像列数
3.fori=1:
length(rowsB)
4.ifrowsB(i)~=0
5.rows=rows+2^(length(rowsB)-i);
6.end
7.end
8.cols=0;
%图像行数
9.fori=1:
length(colsB)
10.ifcolsB(i)~=0
11.cols=cols+2^(length(colsB)-i);
13.end
14.codeWord=cell(1,256);
%字典解码接收,字典解码存放码字
15.fori=1:
256
16.num=dictionary(16*(i-1)+1)*8+dictionary(16*(i-1)+2)*4+dictionary(16*(i-1)+3)*2+dictionary(16*(i-1)+4);
17.ifnum~=0
18.codeWord(i)={dictionary((16*(i-1)+5):
(16*(i-1)+4+num))};
19.end
20.iflength(dictionary((16*i+1):
end))<
1
21.maxI=i;
22.break;
24.end
25.len=length(Huffcode_I);
%图像解码
26.D=zeros(1,rows*cols);
27.k=1;
q=1;
28.forq=1:
rows*cols
29.fori=1:
maxI+1
30.num=length(codeWord{i});
31.ifnum~=0
32.if(len-k+1)>
=num
33.ifHuffcode_I(k:
k+num-1)==codeWord{i}
34.D(q)=i-1;
%解码
35.k=k+num;
36.break;
37.end
38.end
39.end
40.end
42.DI=reshape(D,[rows,cols]);
3、调制在MATLAB中的算法如下:
1.function[ethetbn]=digtalmod(fs,fc,an,M,Rb,df,modType)
2.Tr=fs/Rb;
3.ifM~=2
4.bn=bin2decxie(an,M);
5.else
6.bn=an;
8.N0=length(bn);
9.T=N0/Rb;
%N个码元的传输时间
10.t=0:
1/fs:
T-1/fs;
11.fori=1:
length(bn)
12.s((i-1)*Tr+1:
i*Tr)=bn(i);
14.switchmodType
15.case'
ASK1'
16.et=s.*cos(2*pi*fc*t);
%ASK
17.case'
FSK2'
18.et=cos(2*pi*(fc+s*df).*t);
%FSK
19.case'
PSK3'
20.et=cos(2*pi*fc*t+s*2*pi/M);
21.end
22.eth=hilbert(et);
4、解调在MATLAB中的算法如下:
1.functionbn0=digitaldemod(eth,fs,fc,Rb,M,modType)
2.T=length(eth)/fs;
3.t=0:
4.Tr=fs/Rb;
5.eth=hilbert(eth);
6.switchmodType
7.case'
8.des=abs(eth);
9.case'
10.phi=unwrap(angle(eth));
11.des=diff(phi);
12.case'
13.eth=eth.*exp(-j*2*pi*fc*t);
14.des=angle(eth);
15.des(find(des<
-0.1))=des(find(des<
-0.1))+2*pi;
16.end
17.des=medfilt1(des,floor(0.65*Tr));
%%中值滤波
18.a=max(des(2*Tr:
end-2*Tr));
19.b=min(des(2*Tr:
20.d=(a-b)/(M-1);
21.ddes=des(Tr/2:
Tr:
end);
22.fork=0:
M-1
23.index=find(ddes>
(b+d*(2*k-1)/2)&
ddes<
(b+d*(2*k+1)/2));
24.bn0(index)=k;
25.end
26.ifM~=2
27.k=log2(M);
%确定M进制需要多少位二进制
28.A=zeros(1,k*length(bn0));
length(bn0)
30.forf=1:
k
31.A(k*(i-1)+(k-f+1))=mod(bn0(i),2);
32.bn0(i)=floor(bn0(i)/2);
33.end
34.end
35.bn0=A;
36.end
课程设计成绩评定表
专业:
班级:
学号:
姓名:
课题名称
图像通信系统设计与仿真
方案、结论与改进之处
指导教师评语
建议成绩:
指导教师:
课程小组评定
评定成绩:
课程负责人:
时间:
2013年月日