信息论实验.docx
《信息论实验.docx》由会员分享,可在线阅读,更多相关《信息论实验.docx(12页珍藏版)》请在冰豆网上搜索。
![信息论实验.docx](https://file1.bdocx.com/fileroot1/2022-12/17/7a360b3c-6607-43c0-a22d-81c20a711fce/7a360b3c-6607-43c0-a22d-81c20a711fce1.gif)
信息论实验
实验一模拟信号取样仿真
实验目的:
信源编码是产生信源有效数据的的源头,利用信源的统计特性,解除信源的相关性,去掉信源的冗余信息,以达到压缩信源的信息率的目的。
本实验通过仿真来演示模拟信号的取样。
实验内容:
通过MATLAB/Simulink软件对正弦模拟信号转化为离散信号进行仿真。
图1模拟信号取样仿真框图
设置参数:
1.SineWave(正弦信号发生器)
位置:
Simulink\Sources
参数名称
参数值
Sinetype
Timebased
Amplitude
1
Bias
0
Frequency
2*pi
Phase
0
Sampletime
0
2.PulseGenerator(脉冲信号发生器)
位置:
Simulink\Sources
参数名称
参数值
Pulsetype
Timebased
Amplitude
1.5
Period
0.025
Pulsewidth
50
Phasedelay
0
3.Constant(常数)
位置:
Simulink\Sources
参数名称
参数值
Constantvalue
[20-3.3]
4.Scope(示波器)
位置:
Simulink\Sinks
参数名称
参数值
Timerange
1
Sampling
0.0005
Y-max
3.5
Y-min
-3.5
仿真结果
图2正弦波及脉冲信号波形示波器显示图
实验二信源编码中压缩算法—DCT变换函数的应用
实验目的:
信源编码以去除消息中的自然剩余来提高信息传输的有效性为目的。
基于DCT压缩算法在信源编码中广泛应用,本实验通过离散余弦变换实现对图像的压缩,以及通过逆离散余弦变换实现对压缩后图像的重构。
实验内容:
1.输入图像,DCT变换实现图像压缩;
2.将输入图像划分成8*8的图像块,计算其DCT系数;
3.通过DCT系数对图像块实现逆DCT重构。
源代码如下:
I=imread('cameraman.tif');%读入图像
I=im2double(I);J=dct2(I);
imshow(J)
I=imread('cameraman.tif');
I=im2double(I);
T=dctmtx(8);%产生DCT变换矩阵
B=blkproc(I,[88],'P1*x*P2',T,T');%计算二维DCT
mask=[11110000
11100000
11000000
10000000
00000000
00000000
00000000
00000000];
%二值掩膜,用以压缩DCT的系数
B2=blkproc(B,[88],'P1.*x',mask);
%只保留DCT的10个系数
I2=blkproc(B2,[88],'P1*x*P2',T',T);
%逆DCT变换,用来重构图像
imshow(I),figure,imshow(I2)
实验结果:
实验三信道编码—线性分组码、Hamming码仿真以及循环码、卷积码编解码实验
1.线性分组码、Hamming码仿真实验
实验目的:
线性分组码是最重要也是使用最广的分组码。
通过本实验仿真,掌握线性分组码码字空间的确定方法以及线性分组码的最小码重。
Hamming码是一种很常用的线性分组码,对于二进制的Hamming码,能够纠正所有单比特错误。
了解Hamming码的编码。
实验内容:
1、(7,3)线性分组码的生成矩阵如下所示,确定其码字空间,以及该码的最小码重。
G=1001110
0100111
0011101
实现的MATLAB源代码为:
clear;
k=3;
fori=1:
2^k
forj=k:
-1:
1
ifrem(i-1,2^(-j+k+1))>=2^(-j+k)
m(i,j)=1;
else
m(i,j)=0
end
end
end
%定义生成矩阵G
g=[1001110;
0100111;
0011101];
%产生码字空间
c=rem(m*g,2);
%找出最小汉明距离
d_min=min(sum((c(2:
2^k,:
))))
2、Hamming码编码:
源程序为:
hammgen(3);
clear;
m=3;
[h,g,n,k]=hammgen(m);
msg=randint(100,k,[0,1]);
code=encode(msg,n,k,‘hamming/binary’)
变量code中返回编码后的信号序列
实验结果:
m=
000
m=
000
m=
000
m=
000
001
m=
000
001
m=
000
001
000
m=
000
001
010
m=
000
001
010
011
m=
000
001
010
011
000
m=
000
001
010
011
000
m=
000
001
010
011
100
001
m=
000
001
010
011
100
101
000
d_min=
4
2.循环码、卷积码编解码实验
实验目的:
循环码是线性码的一个重要子类,它的码字具有循环性。
也就是说,它的任一码字无论是向左移还是向右移,无论多少位,所得到的码字仍然是可用的。
通过本实验,知道循环码的编码和解码。
卷积码在把k0个输入比特序列编为长度为n0的编码输出序列的时候,编码输出序列不仅和当前输入比特序列有关,还和编码器先前输入的信息比特序列有关。
通过本实验,了解卷积码的编码。
实验内容:
1、循环码编码、解码、计算误码率MATLAB源程序:
n=3;
k=2;
msg=randint(100,k,[0,1]);
code=encode(msg,n,k,‘cyclic/binary’);
noisycode=rem(code+randerr(100,n,[01;.7.3]),2);%加噪
newmsg=decode(noisycode,n,k,‘cyclic’);%解码
[number,ratio]=biterr(newmsg,msg);%计算误码率
disp([‘Thebiterrorrateis’,num2str(ratio)])
%误码率将显示在命令窗口中
执行,在commandwindow窗口中将显示:
>〉Thebiterrorrateis0.11
2、对消息序列:
10011100110000111进行卷积编码
其MATLAB源代码如下:
clear;
msg=[1001110011000011100];
L=3;%抑制长度
CodeGenerator=[457];%多项式描述
trellis=poly2trellis(L,CodeGenerator);%转换为网格图描述
[code,final_state]=convenc(msg,trellis)
实验结果: