搜索
您的当前位置:首页正文

基于MATLAB的通信系统仿真— PCM系统仿真

来源:好走旅游网
(设计报告自己独立完成,如有雷同,双方均为0分,请同学们自己保护好自己的设计报告,特此申明)。

通信原理课程设计

课题名称:专业班级:姓 名:学 号:起止时间:

计 报 告

信息科学与工程学院

目 录

一、课题内容 二、设计目的 三、设计要求 四、实验条件 五、系统设计

1、通信系统的原理 2. 所设计子系统的原理

六、详细设计与编码

1. 设计方案 2. 编程工具的选择

3. 编码与测试 4. 运行结果及分析 七、设计心得

八、参考文献……………………………….……………….22

1

一、课题内容

本课题是基于MATLAB的通信系统仿真— PCM系统仿真

二、设计目的

1、培养我综合得用多门课程知识的能力。

2、培养我熟练掌握MATLAB,运用此工具进行通信系统仿真的能力。

3、培养我查阅资料,解决问题的能力。 4、加深我对通信系统各部分的理解。 5、培养学生系统设计与系统开发的思想;

三、设计要求

1.独立完成自己的题目内容;

2. 对通信系统有整体的较深入的理解,深入理解自己仿真部分的原理的基础,画出对应的通信子系统的原理框图; 3. 提出仿真方案; 4. 完成仿真软件的编制; 5. 仿真软件的演示; 6. 提交详细的设计报告。

四、实验条件 计算机、Matlab软件

2

五、系统设计

1、通信系统的原理(阐述整个通信系统原理,最后之处你主要负责哪一部分)

通信的目的是传递消息,通信系统是一个以传递消息为目地的系统,通信系统的一般模型如下:

图中,信源的作用是把待传输的消息转换成原始电信号,如电话系统中电话机可看成是信源。信源输出的信号称为基带信号。所谓基带信号是指没有经过调制(进行频谱搬移和变换)的原始电信号,其特点是信号频谱从零频附近开始,具有低通形式,。根据原始电信号的特征,基带信号可分为数字基带信号和模拟基带信号,相应地,信源也分为数字信源和模拟信源。 发送设备的基本功能是将信源和信道匹配起来,即将信源产生的原始电信号(基带信号)变换成适合在信道中传输的信号。变换方式是多种多样的,在需要频谱搬移的场合,调制是最常见的变换方式;对传输数字信号来说,发送设备又常常包含信源编码和信道编码等。

信道是指信号传输的通道,可以是有线的,也可以是无线的,甚至还可以包含某些设备。图中的噪声源,是信道中的所有噪声以及分散在通信系统中其它各处噪声的集合。

在接收端,接收设备的功能与发送设备相反,即进行解调、译码、解码等。它的任务是从带有干扰的接收信号中恢复出相应的原始电信号来。 信宿是将复原的原始电信号转换成相应的消息。

我做的是通信系统中的一种系统:数字通信系统的仿真。其基本框图如下:

抽模拟信号 模拟信号 抽样 量化 信源编码 信道编码 数字调制 信道 噪声 信源译码 信道译码 抽样判决 数字滤波器 我负责独立完成以上各部分。

3

2. 所设计子系统的原理

现在更详细说明以上数字通信系统的原理。 (1)、模拟信号为原始的信原信号。

(2)、抽样是将上述的时间和幅值都连续的模拟信号转换成时

间离散幅值连续的信号。

(3)、量化是将上述的时间离散幅值连续的抽样信号转换成时

间离散幅值离散的信号。

(4)、信源编码是将上述量化后的值编码成0、1比特流的形式,

并且可以减少冗余,提高效率。

(5)、信道纺码是为了提高传输可靠性。

(6)、数字调制是将上述0、1比特流转换成适合在通信信道中

传输的波形。

(7)、信道是信号传输的通道,信号在信道中传输时经常会有

噪声的干扰。

(8)、数字滤波器是将调制并加有噪声的信号,去除噪声,并

且解调后形成方波形式的信号。

(9)、抽样判决是将方波形号转换成0、1比特流。 (10)、信道译码是信道编码的反过程。 (11)、信源译码是信道编曲码的反过程。 (12)、最后还原成模拟信号。

4

六、详细设计与编码

1. 设计方案 (可以画出编程的流程图,阐述设计思路等) 经过我的思考,再加上查阅了大量资料后,有了以下编程设计思路。

主函数 产生模拟信源并得到抽样信号 通过13拆线得到转换后的值 通过编码子函数进行量化和编码 BPSK子函数 通过A侓公式反转成原始模拟信号 线性分组码编码 数字调制 数字滤波器 抽样判决 信道译码 在主函数中,先产生一个模拟信号,再经过抽样后得到抽样值,将抽样值通过13拆线法转换成对应值,将转换后的值经过量化和编码后得到0、1比特流,再经过信道译码,再经过BPSK调制,再人为加入一些噪声,再通过数字滤波器将噪声和载波滤掉,取出直流分量,得到方波波形。再经过抽样判决后得到0、1比特流,再经过线性分组码译码,最后经过信源译码,再经过A侓公式反转成原始模拟信号,画出各阶段的波

形。

2. 编程工具的选择(本次仿真使用的工具软件,阐述为什么使用该软件,该软件的特点)

我这次选用的软件是MATLAB,因为这款软件的功能特很强大,学习方便,仿真容易实现。

5

MATLAB具有以下几个特点: 功能强大的数值运算功能 强大的图形处理能力 高级但简单的程序环境 丰富的工具箱

最重要的是MATLAB学习起来方便容易,以前有学C语言的基础,MATLAB与C语言有类似之处,编程流程大概差不多,但要注意的是MATLAB与C语言在程序代码上也有细微的差别,MATLAB是一种解释性语言,在写程序代码时容易方便,但是与C语言相比它的运算速度较慢,但功能强大。

3. 编码与测试 (写出源代码,分析核心代码完成的功能) 编程序代码过程:

子函数1:

function y1=zhexian(x) x=x/max(x); z=sign(x); x=abs(x);

for i=1:length(x)

if((x(i)>0)&(x(i)<1/64)) y(i)=16*x(i);

else if((x(i)>=1/64)&(x(i)<1/32)) y(i)=x(i)*8+1/8;

else if((x(i)>=1/32)&(x(i)<1/16)) y(i)=4*x(i)+2/8;

else if((x(i)>=1/16)&(x(i)<1/8)) y(i)=2*x(i)+3/8;

else if((x(i)>=1/8)&(x(i)<1/4)) y(i)=x(i)+1/2;

else if((x(i)>=1/4)&(x(i)<1/2)) y(i)=1/2*x(i)+5/8;

else if((x(i)>=1/2)&(x(i)<=1))

6

y(i)=1/4*x(i)+3/4; end; end; end; end; end; end; end; end; y1=z.*y; end

此子函数的功能是将抽样后得到的值用13拆线转换成对应的值。

子函数2:

function bit=bianma(y4,n) m=2/n; for i=1:n+1

q(i)=min(y4)+(i-1)*m; end

%量化过程 t=length(q);

ttt=[]; %存放将抽样信号量化后的值 tt=[]; e=1; tt(1)=-1;

for x=2:length(q)

tt(x)=(q(x-1)+q(x))/2; %存放第几个电平段的电平值 end

tt=[tt,max(y4)];

b_duan=[]; %存放电平段 for x=1:length(y4) if y4(x)==q(t)

b_duan(x)=length(tt); else

if y4(x)==min(q) b_duan(x)=1; else

for y=1:t-1

if (q(y)<=y4(x))&& (y4(x)7

end end

nu=ceil(log2(n)); %编码 code=zeros(length(y4),nu); for i=1:length(y4) for j=nu:-1:0

if (fix(b_duan(i)/(2^j))==1) code(i,(nu-j+1))=1;

b_duan(i)=b_duan(i)-2^j; else

code(i,(nu-j+1))=0; end end end bit=[];

for i=1:length(y4)

bit=[bit,code(i,:)]; end

此函数的功能是将抽样后的值量化后进行自然二进制 编码。第个值采用8位二进制编码。 子函数3:

function bit2=xianxi(m)

H= [ 0 1 1 1 1 0 0; 1 0 1 1 0 1 0; 1 1 0 1 0 0 1]; G= [1 0 0 0 0 1 1; 0 1 0 0 1 0 1; 0 0 1 0 1 1 0;

0 0 0 1 1 1 1 ]; %生成矩阵

C=rem(m*G,2); [c,z]=size(C); bit2=[]; for i=1:c

bit2=[bit2,C(i,[1:7])];

8

end

此函数的功能是进行信道编码即:将每四位二进制后加三位监督位,比特流的总长度除以四余下的则不进行加监督位。

子函数4:

function bit3=xianxiyima(gg) p=gg; R=[]; S=[];

for i=1:length(p)/7

R(i,[1:7])=p((i-1)*7 +1:i*7); end

H= [ 0 1 1 1 1 0 1 0 1 1 0 1 1 1 0 1 0 0 [c,z]=size(R); S=rem(R*H',2);

for i=1:c %伴随式的行次 for j=1:7

b=all(S(i,:)==H(:,j)'); if b==1

R(i,j)=~ R(i,j); break; end end end

R(:,[5:7])=[]; [c,z]=size(R); bit3=[]; for i=1:c

bit3=[bit3,R(i,[1:4])]; end

子函数5:

function bb=BPSK(bit) fs = 30000; Ts = 0.1;

m = fs * Ts; %一个码无所占宽度 High =ones( 1,m); Low =zeros( 1,m );

9

0; 0; 1]; U=rem(length(bit),4);

sheng=[bit(length(bit))-U+1:bit(length(bit))]; w =300; %角频率 for i=1:length(bit)/4

decode(i,[1:4])=bit((i-1)*4 + 1 : i*4); end

bit2=xianxi(decode); %线性分组码编码 Sign = [bit2,sheng];

L=length (Sign ); %信号长度 st=zeros (1,m*L); sign1=zeros (1,m*L); t = 0:1/fs:Ts*L-1/fs; for i=1:L

if Sign(i)==1

sign1((i-1)*m +1:i*m) = High; else

sign1((i-1)*m +1:i*m) = Low; end end

for i=1:L

if Sign(i) == 1

st((i-1)*m +1:i*m) =cos(2* pi*w *t((i-1)*m + 1:i*m)+(pi/ 2)); else

st((i-1)*m +1:i*m) =cos(2* pi*w *t((i-1)*m + 1:i*m)); end end st1=st;

st1=st1+cos(3000*t); figure

plot(t, sign1);

axis( [0,Ts*(L+1),-(1/2),3/2] ); title ( '编码后的信号' ); grid figure

subplot (2,1,1); plot (t,st );

axis([0,Ts*(L+1), - 3/ 2,3/2] ); title ( '数字调制后的信号' ); grid

subplot (2,1,2); plot ( t, st1 );

axis( [0,Ts*(L+1)+1, -5/2,5/2]); title ( '加噪后的信号' ); grid

10

dt = st1.*cos(2*pi*w*t ); figure plot (t,dt);

axis( [0,Ts*(L+1),-2,5/2] );

title ( '与相干波相乘后的波形' ); grid

[N,Wn] = buttord( 2*pi*50, 2*pi*100,3,25,'s'); %临界频率采用角频率表示

[b,a]=butter(N,Wn,'s');

[bz,az]=impinvar(b,a,fs); %映射为数字的 dt = filter(bz,az,dt); figure plot (t,dt);

axis( [0,Ts*(L+1),- 3/2,3/2] ); title ( '低通滤波后的波形' );

ss=dt; %存放抽样判决后的值 bit1=[];

tt=length(ss)/L;

for i=tt/2:tt:length(ss) if ss(i)>(1/4)

ss((i-tt/2+1):(i+tt/2))=zeros ( 1,3000); bit1=[bit1,0]; else

ss((i-tt/2+1):(i+tt/2))=ones ( 1,3000); bit1=[bit1,1]; end end figure

plot (t,ss,'r-');

axis( [0,Ts*(L+1), -1/2,3/2] ); title ( '信道译码信号' ); grid bb=[];

U1=rem(length(bit1),7); l=length(bit1);

sheng1=[bit1(length(bit1))-U1+1:bit1(length(bit1))]; bit1([l-U1+1:bit1(l)])=[];

bb=xianxiyima(bit1); %线性分组码译码; bb=[bb,sheng1];

此函数的功能是将信源编码后的0、1序列再经过信道编码(7,4)线性分组码编码,将信道编码后的信号进行BPSK调制,由于考虑到在信道中传输是会有噪声的影响,所以在仿真时我人为的加入一定的噪声。

在接收端进行相干解调,用一个与调制信号同频的信号与接收到的信号(加入噪声后的已调信号)相乘,再用一个数字滤波器进行滤波,去掉了信

11

号中的高频成份和噪声,取出直流分量,得到方波信号,对这个信号进行抽样判决将其转换成0、1比特流后,再经过信道译码。

子函数5:

function a3=yima(y,n) m=2/n; for i=1:n+1

q(i)=(-1)+(i-1)*m; end tt=[]; tt(1)=-1;

for x=2:length(q)

tt(x)=(q(x-1)+q(x))/2; %存放第几个电平段的电平值 end tt=[tt,1];

nu=ceil(log2(n)); decode=[];

for i=1:length(y)/(nu+1)

decode(i,[1:(nu+1)])=y((i-1)*(nu+1) + 1 : i*(nu+1)); end

ab=[] ; % 存放的十进制数,到tt中去找对应值 [w,z]=size(decode); for j=1:w L=nu; value=0; for i=0:L

value=decode(j,i+1)*(2^(L-i))+ value; end

ab(j)=value; end decode; w;

a3=[] ; % 存放信源译码值 for i=1:w a3(i)=tt(ab(i)); end

此函数的功能是将接收到的0、1比特流分为八位二进制一组一组的,再将每八位二进制转换为十进制数,再到每段中去寻到与发关端有相同约定段号值。即可恢复原信号的量化值。

12

子函数6:

function y5=Ayi(y,A) for i=1:length(y)

if((abs(y(i))>=0)&(abs(y(i))<=(1/(1+log(A))))) y1(i)=y(i)*(1+log(A))/A;

else if((abs(y(i))<=1)&(abs(y(i))>(1/(1+log(A))))) y1(i)=(1/A)*sign(y(i))*exp(abs(y(i))*(1+log(A))-1); end end end y5=y1; end

此函数的功能是将恢复的量化值通过A律反转换公式得到对应的值,是用13拆线转换的反过程。因为在当A=86.5时,可以用13折线用13条折线近似A律的平滑曲线,在实际工程中A律的平滑曲线不易实现,而用13折线法可以降低工程实现中的难度。

主函数:

clc

clear all

t=0:0.1:6*pi;

a1=sin(t); %模拟信源 figure(1) plot(t,a1);

title ( '原始模拟信号' );

t1=0:2*pi/32:6*pi; %抽样 a=sin(t1); figure

plot(t1,a); stem(t1,a);

title ( '抽样信号' );

y4=zhexian(a) ; %13折线 n=256; %量化电平数; bitstream=bianma(y4,n); bit1=BPSK(bitstream); y2=yima(bit1,n); y5=Ayi(y2,87.65); figure plot(y5);

13

stem(y5,'r')

axis([0,100,-1,1.01]) figure

plot(y5,'r'); hold on

plot(y5,'.b');

axis([0,100,-1,1.01])

主函数的功能是是产生模拟信号并且进行抽样得到抽样值,然后将各个子函数衔接到一块,形成一个比较完整的通信系统,进行仿真画出各个阶段重要的图形,以便观察和分析。

调试过程:

将各个子程序和主程序都放入MATLAB的工作空间中,双击main.m文

件后,点击Debug Run 运行程序。

14

在 这次通信系统仿真编程中,我遇到了很多问题,例如在利用13折线进行数值变转时,需要考虑归一化问题,并且考虑到在第一像限和第三像限的情况基本相同,只是符号相反,所以只需考虑一段,那么在进行运算是得先把原来的值的符号位保存,再在变换后的值上添加符号值。还有在对连续幅值进行量化时,我也犯了一些思路上的混乱,导致我在调试的时候出现错误,但当我反复一遍遍检查,发现只是在取值端点上没有弄好,当我改后就好了。 还有在编码时,一开始不知怎么的老是前几个数编出来只有六位,我又上那块去找原因,发现又是在取值边界上的问题,我改后这个问题也解决了。在 进行BPSK调制时,出现了相位模糊的问题,我在抽样判决后,人为的进行取反,就得到了正确的0、1比特流。在信源译码的时候要注意的是,取的量化电平及值要和发送端事约定好,以便在接收到0、1比特流后能够正确译出量化值,在量化值恢复成原始抽样值时,我采用的是A律反解法,因为在我设计的程序中令A的值为87.65,此时的A律曲线和13拆线很接进,为了观查它们的近似度,我在发送端和接收端分别用了13折线和A律公试。

5. 运行结果及分析

先得到原始模拟信号如下图:

原始模拟信号10.80.60.40.20-0.2-0.4-0.6-0.8-102468101214161820

15

将此模拟信号按每周期取32个点抽样,得到以下图形:

抽样信号10.80.60.40.20-0.2-0.4-0.6-0.8-102468101214161820

将抽样后的量化值进行二进制编码,第八位二进制数表示一个量化值,将得到的二进制数进行信道编曲码,得到如下图形:

信道编码后的信号1.510.50-0.500.511.522.533.5

16

经过BPSK调制后的信号和在调制后的信号中加入噪声有如下图形:

数字调制后的信号10-100.0050.010.015加噪后的信号210-1-200.0050.010.0150.020.0250.030.0350.040.020.0250.03(值得引起注意的是,我用0.1的宽度来表示一个比特,所以如果在0.1的整数倍的地方才能看到有0比特的相位表示用0相位,1比特的相位表示用pi/2)

17

在接收端用一个与调制后的波同频的相干波与接收到的信号相乘后得到以下图形:

与相干波相乘后的波形2.521.510.50-0.5-1-1.500.20.40.60.81

经过数字低通滤波器滤除噪声和载波后的波形如下图:

低通滤波后的波形1.510.50-0.5-100.511.522.533.54

(值得引起注意的是在BPSK调制中会出现相位模糊问题,在些处是通过在抽样判决时加以处理,使其能够正确译码输出)

18

通过信道译码后的图形如下:

信道译码信号1.41.210.80.60.40.20-0.2-0.400.511.522.5

将信道译码后的信号,分为八位二进制位一组一组的,再将其恢复成十进制数,到对应段去找取值,即恢复原始信号的量化值,再将其值通过A律公式反解出原始信号的抽样值,画出如下图形:

10.80.60.40.20-0.2-0.4-0.6-0.8-10102030405060708090100

19

将上图用平滑的曲线边接起来,再标注上抽样点则得到如下图形:

10.80.60.40.20-0.2-0.4-0.6-0.8-10102030405060708090100

通过将原始信号与接收端得到的信号进行比较,可见信号恢复情况良好,只是在信号经过系统后,稍有些延时。

七、设计心得

通过这次实验,我收获不少,以通信原理更加了解,尤其是对数字通信系统更深刻了解了他的工作流程。在这次课程设计中,一开始的预期工作就是查资料,我一般通过查阅课本书,和在网上查找一些相关资料,在这过程中我觉得做一个数字通信系统应该是我力所能及的,于是我又查阅了很多资料后,在头脑中慢慢程显出了数字通信系统的基本构架,然后在理清楚了基本框架后,我就开始一步步的设计子程序,然后编写一些测试的数据看是否可行,按照这样的进程,我整整在寝室待了两天,一直在想,一直在编程,

20

错了又改,改了又编,一点点累积起来,最后终于形成了一个完整的程序。但是在编写了完整的主程序后,要将一个个子程序衔接起来,也出了一点点小差错,比如是数据不对,越过数组范围之类的问题,还有就是有一次我竟然画出了一些比特流,中间全零两边正常,但却恢复得挺好,我百思不得其解,一遍遍的看程序,最后发现自己犯了个低级错误,即带错参数了。再有就是有一段时间我一运行程序,前几个图都画出来了,可就是接下来的图画不出来,而且MATLAB‘死机了’,我检查了好多遍程序都不知道哪儿出错了,直到有一次我不管它,让它运行去,我去干别的一小会,等我回来时一看,在MATLAB里的Command Window里打印了好多好多的数,我这才愰然大悟我错在哪儿了,原来我忘记了我用数用错了,唉,这才知道如果我细心点该多好呀。还有就是在编程的时候一定要注意一些边界取值问题,不然也会出错。

在整个通信系统仿真快要完成时,我对整个数字通信系统了解得很深刻,那体系结构牢牢记在我大脑里了。最后我就一遍遍检查每个子函数看看如何使之更加完善,在接收端和发送端只能通过经过信道传输进行信息的传递(不能通过函数值的传递方式来使接收端得到某些信息),并在接收端和发送端规定好一定的协议,通过协议和接收到的信号,才能完整的恢复原始信号。做完这个通信系统仿真后,我思考了一个问题,我这个程序在一开始的时候做了归一化处理,虽然在接收端恢复的信号的原始信号几乎一模一样,但是如果我产生的信号不是幅值大于1,虽然接收端恢复的信号的

21

原始信号形状几乎一模一样,但是幅值总还是在1以内。这个问题我想了很久,暂时还没想到如何解决这个问题。不过从总体上来讲,我已经尽力而为了,做到这个程度还是令自己感到欣慰的。因为通过这次课程设计我也学到了不少东西,学生就是以学习为资本,学着了就没白做,当然学习是无止尽的,在以后的学习中,我会保持良好的学习态度,以及继续提高我的思考设计能力!

八、参考文献

[1]王秉钧,冯玉氓等. 通信原理[M].清华大学出版社2006年11 月 [2]John G. proakis等著, 刘树棠译. 现代通信系统(Matlab版)(第二版)[M], 电子工业出版社, 2006.9

[3]Bernard Sklar著, 徐平平等译. 数字通信-基础与应用(第二版) [M], 电子工业出版社, 2004.11

[4]孙屹. Matlab通信仿真开发手册[M], 国防工业出版社,2005.1 [5]王福昌. 通信原理[M]. 清华大学出版社,2006.9

[6]樊昌信等. 通信原理(第6版)[M]. 国防工业出版社,2008.3 [7]《现代通信原理》,曹志刚,钱亚生,清华大学出版社,1992 [8]《现代通信原理与技术》,张辉,曹丽,西安电子科技大学出版社,2005

[9]《数字通信(第三版) 》,(美)John G.Proakis,张力军等译,电子工业出版社,2001

[10]《通信原理(第六版)同步辅导及习题全解》,王颖惠,牛丽英,水利水电出版社,2009

[11]《通信原理—基于Matlab的计算机仿真》,郭文彬,桑林,北京邮电大学出版社,2006

[12]《通信系统仿真》,冯育涛,国防工业出版社,2009 [13]《通信原理实验与课程设计》,达新宇、孟繁茂、邱伟,北京邮电大学出版社,2005

22

因篇幅问题不能全部显示,请点此查看更多更全内容

Top