当前位置:文档之家› 基于MATLAB的模拟通信系统的设计

基于MATLAB的模拟通信系统的设计

现代通信原理课程设计设计报告课题名称:专业班级:姓名:学号:起止时间: 2007.12.27-2008.01.13重庆交通大学计算机与信息学院目录一、课题内容 (1)二、设计目的 (1)三、设计要求 (1)四、实验条件 (1)五、系统设计 (1)1. 通信系统的原理 (1)2. 所设计子系统的原理 (4)六、详细设计与编码 (5)1. 设计方案 (5)2. 编程工具的选择 (7)3. 编码与测试 (7)4. 编码与调试过程 (13)5. 运行结果及分析 (14)七、设计心得 (21)八、参考文献 (23)一、课题内容基于MATLAB的模拟通信系统仿真-FM和DSB二、设计目的1、综合应用《Matlab原理及应用》、《信号与系统》、《现代通信原理》、《无线通信原理及应用》等多门课程知识,使学生建立通信系统的整体概念;2、培养学生系统设计与系统开发的思想;3、培养学生利用软件进行通信仿真的能力。

三、设计要求1、每3人一组,组内成员进行各自分工,分别完成不同子系统的详细功能;2、对通信系统有整体的较深入的理解,深入理解自己仿真部分的原理的基础,画出对应的通信子系统的原理框图;3、提出仿真方案;4、完成仿真软件的编制;5、仿真软件的演示;6、提交详细的设计报告。

四、实验条件计算机、Matlab软件五、系统设计1.通信系统的原理➢通信系统的一般模型信息源:消息的生成者或来源;发送设备:将信源输出的信号变为适合信道传输的发射信号,且发送信号包含了原始信号的一切信息;信道:传输信号的通道,可以是有线的,也可以是无线的;噪声源:在信道中传输,噪声是绝不可避免的,噪声又可为加性噪声(线性的噪声)和乘性噪声(非线性的噪声),一般我们只考虑加性噪声;接收设备:从接收信号中提取我们所希望的信号,并将其转换成适合输出传感器的形式;受信者:消息接收者。

在通信系统中,按信号参量的取值方式不同可把信号分为两类,即模拟信号和数字信号,再按照信道中传输信号的特征,来分为模拟通信系统和数字通信系统。

下面分别来介绍模拟通信系统与数字通信系统➢模拟通信系统模型调制器:将原始电信号变换成其频带适合信道传输的信号;解调器:在接收端将信道中传输的信号还原成原始的电信号。

➢数字通信系统模型信源编码/译码:主要完成A/D变换、数据压缩、加密等三部分功能;信道编码/译码:数据扩张,增加保镖,提高抗干扰能力等;基带脉冲生成器/抽样判决器:数字基带传输系统的重要部分;数字调制器/解调器: (1) 将数字基带信号的频谱搬移到信道的频带之内,以便于在信道中传输;(2) 便于对信道进行频分复用,从而有效地利用信道的频率资源。

数字解调是数字调制的反过程。

➢模拟通信系统与数字通信系统的比较模拟通信系统和数字通信系统各有自己的一些特点,但相对于模拟通信系统,数字通信系统有许多独特的优点,例如:数字通信系统抗噪能力强、便于加密、易复用也易压缩、易于集成化、便于用计算机处理数字信号、更适合多种数字业务,容易实现多网合一等。

相应地,数字通信系统也有自己的缺点:它需要更宽的传输带宽和较复杂的同步系统等。

2.所设计子系统的原理我所设计的子系统是模拟通信系统,模拟通信系统的主要内容是研究不同信道条件下不同的调制解调方法。

调制可以分为三类,即调幅(AM)、调频(FM)、调相(PM),其中调幅又分为普通调幅(AM)、抑制载波的双边带调幅(DSB)、单边带调幅(SSB)。

基带信号:(1)基带信号是由消息转化而来的原始模拟信号,它的频谱一般从零频附近开始,如语音信号为300~3400Hz;(2)在实际通信系统中,基带信号一般含直流和低频成分,不宜直接传输,这就需要把基带信号变换成其频带适合在信道中传输的信号,并可在接收端进行反变换,完成这种变换和反变换作用的通常是调制器和解调器。

已调信号:它有三个基本特征,即(1)携带有信息;(2)适合在信道中传输;(3)信号的频谱具有带通形式且中心频率远离零频,因而已调信号又称带通信号或频带信号。

模拟通信的主要特点: ● 简单、易于实现 ● 抗干扰能力差 ● 不易于保密通信 ● 设备不易于大规模集成● 不适应飞速发展的计算机通信的要求六、详细设计与编码1.设计方案本次仿真用两种方法-FM 、DSB 分别对模拟输入信号m(t)进行调制与解调,并对它们的仿真结果进行对比,现在分别对这两种仿真提出以下设计方案:(1)FM 设计方案设调制信号为m(t),载波信号为)π2cos(t f c c =,u(t)为调制后的信号,θ为相角向量,dem 为解调后的信号,则:])(π2cos[)(0ττd m k t f t u t f c ⎰+=(2)DSB 设计方案设调制信号为m(t),载波信号为)π2cos(t f c c =,u(t)为调制后的信号,y 为混频后的信号,DEM 为调制后的频谱,dem 为解调后的信号,则:u(t)=m(t)*c(t)U(f)=0.5[M(f-fc)+M(f+fc)]y(t)=u(t)*c(t)Y(f)=0.5M(f)+0.25M(f-2fc)+0.25M(f+2fc)DEM=M(f)dem=IFFT[DEM]2.编程工具的选择本仿真所用的工具软件是MATLAB7.0。

该软件的功能强大,最擅长矩阵处理,并在系统仿真、数字信号处理、图形图像分析、数理统计、通信及自动控制领域得到广泛应用,特别是MATLAB中Simulink在通信上的应用,它可以用来仿真完整的通信系统,同时MATLAB内部有许多与通信有关的函数,这样程序编写方便,也便于观察波形特征。

3.编码与测试(1)FM主函数fm.m%fm.m%频率调制与解调的Matlab演示源程序%可以任意改原调制信号函数m(t)%本例调制信号为m(t)=sinc(100*t)echo offclose allclct0=0.2; %信号的持续时间,用来定义时间向量ts=0.001; %抽样间隔fs=1/ts; %抽样频率%************************************************************** *******fc=300; %载波频率,fc可以任意改变%************************************************************** *******t=[-t0/2:ts:t0/2]; %时间向量kf=100; %偏差常数df=0.25; %所需的频率分辨率,用在求傅里叶变换时,它表示FFT的最小频率间隔%************************************************************** *******m=sinc(100*t); %调制信号,m(t)可以任意更改%************************************************************** *******%************************************************************** *******%求信号m(t)的积分,这是对离散信号求积分的好方法int_m(1)=0;for i=1:length(t)-1int_m(i+1)=int_m(i)+m(i)*ts;end%************************************************************** *******[M,m,df1]=fftseq(m,ts,df); %对调制信号m(t)求傅里叶变换M=M/fs; %缩放,便于在频谱图上整体观察f=[0:df1:df1*(length(m)-1)]-fs/2; %时间向量对应的频率向量u=cos(2*pi*fc*t+2*pi*kf*int_m); %调制后的信号[U,u,df1]=fftseq(u,ts,df); %对调制后的信号u求傅里叶变换U=U/fs; %缩放%************************************************************** *******%法一:不调用子程序env_phas和loweq,直接在主程序中表示%t1=[0:ts:ts*(length(u)-1)];%z=hilbert(u);%yq =z.*exp(-j*2*pi*fc*t1);%dem =(1/(2*pi*kf))*diff(unwrap(angle(yq))*fs);%************************************************************** *******%************************************************************** *******%法二:通过调用子程序env_phas和loweq来实现解调功能[v,phase]=env_phas(u,ts,fc); %解调,求出u的相位phi=unwrap(phase);%校正相位角,使相位在整体上连续,便于后面对该相位角求导dem=(1/(2*pi*kf))*(diff(phi)*fs); %对校正后的相位求导%再经一些线性变换来恢复原调制信号%乘以fs是为了恢复原信号,因为前面使用了缩放%************************************************************** *******disp('按任意键可以看到原调制信号和已调信号的曲线')pausefigure(1)subplot(2,1,1)plot(t,m(1:length(t)))%现在的m信号是重新构建的信号,%因为在对m求傅里叶变换时m=[m,zeros(1,n-n2)]xlabel('时间t')title('原调制信号的时域图')subplot(2,1,2)plot(t,u(1:length(t)))xlabel('时间t')title('已调信号的时域图')disp('按任意键可以看到原调制信号和已调信号的在频域内的图形')pausefigure(2)subplot(2,1,1)plot(f,abs(fftshift(M)))%fftshift:将FFT中的DC分量移到频谱中心xlabel('频率f')title('原调制信号的频谱图')subplot(2,1,2)plot(f,abs(fftshift(U)))xlabel('频率f')title('已调信号的频谱图')disp('按任意键可以看到在无噪声情况下的原调制信号的波形和解调信号的输出情况')pausefigure(3)subplot(2,1,1)plot(t,m(1:length(t)))xlabel('时间t')title('原调制信号的时域图')subplot(2,1,2)plot(t,dem(1:length(t)))xlabel('时间t')title('解调后信号的时域波形')(2)DSB主函数dsb.m%dsb.m%双边带调制与解调的Matlab演示源程序%可以任意改原调制信号函数m(t)%本例调制信号为m(t)=sinc(100*t)echo offclose allclct0=0.2; %信号的持续时间,用来定义时间向量ts=0.001; %抽样间隔fs=1/ts; %抽样频率%************************************************************** *******fc=300; %载波频率,fc可以任意改变%************************************************************** *******t=[-t0/2:ts:t0/2]; %时间向量df=0.25; %所需的频率分辨率%************************************************************** *******m=sinc(100*t); %调制信号,m(t)可以任意更改%************************************************************** *******c=cos(2*pi*fc.*t); %载波信号函数,照原理上它也可以任意更改u=m.*c; %已调信号y=u.*c; %混频信号,用来提取原调制信号的频率[M,m,df1]=fftseq(m,ts,df); %对调制信号m(t)求傅里叶变换M=M/fs; %缩放,便于在频谱图上整体观察[U,u,df1]=fftseq(u,ts,df); %对调制后的信号u求傅里叶变换U=U/fs; %缩放[Y,y,df1]=fftseq(y,ts,df); %对混频后的信号y求傅里叶变Y=Y/fs; %缩放%************************************************************** *******%以下这段程序是专门用来构建在频谱上的滤波器的方法f_cutoff=150; %滤波器的截止频率n_cutoff=floor(150/df1); % 设计的滤波器的带宽f=[0:df1:df1*(length(y)-1)]-fs/2; %频率分量H=zeros(size(f)); %构建滤波器的步骤之一H(1:n_cutoff)=2*ones(1,n_cutoff); %构建滤波器的步骤之一H(length(f)-n_cutoff+1:length(f))=2*ones(1,n_cutoff);%滤波器的频带函数%************************************************************** ******DEM=H.*Y; %经过滤波器后输出信号的频谱dem=real(ifft(DEM))*fs; %ifft为傅里叶反变换函数,滤波器的输出-解调信号%乘以fs是为了恢复原信号,因为前面使用了缩放disp('按任意键可看到混频的效果')pausefigure(1)subplot(3,1,1)plot(f,fftshift(abs(M)))%fftshift:将FFT中的DC分量移到频谱中心title('原调制信号的频谱图')xlabel('频率f')subplot(3,1,2)plot(f,fftshift(abs(U)))title('已调信号的频谱图')xlabel('频率f')subplot(3,1,3)plot(f,fftshift(abs(Y)))title('混频信号的频谱图')xlabel('频率f')disp('按任意键可看到混频器输出的波形的频谱效果')pausefigure(2)subplot(3,1,1)plot(f,fftshift(abs(Y)))title('混频信号的频谱图')xlabel('频率f')subplot(3,1,2)plot(f,fftshift(abs(H)))title('低通滤波器的频谱图')xlabel('频率f')subplot(3,1,3)plot(f,fftshift(abs(DEM)))title('混频信号通过滤波器后的信号的频谱图')xlabel('频率f')disp('按任意键可看到原调制信号和接受信号频谱的比较')pausefigure(3)subplot(2,1,1)plot(f,fftshift(abs(M)))title('原调制信号的频谱图')xlabel('频率f')subplot(2,1,2)plot(f,fftshift(abs(DEM)))title('混频信号通过滤波器后的信号的频谱图')xlabel('频率f')disp('按任意键可看到原调制信号和解调器输出信号对比')pausefigure(4)subplot(2,1,1)plot(t,m(1:length(t)))title('原调制信号的时域图')xlabel('时间t')subplot(2,1,2)plot(t,dem(1:length(t)))title('解调后信号的时域图')xlabel('时间t')(3)FM及DSB中都所用到的子函数fftseq.m%求傅里叶变换的子函数function [M,m,df]=fftseq(m,ts,df)fs=1/ts;if nargin==2 %nargin为输入参量的个数n1=0;elsen1=fs/df;endn2=length(m);n=2^(max(nextpow2(n1),nextpow2(n2)));%nextpow2(n)取n最接近的较大2次幂M=fft(m,n);%M为信号m的傅里叶变换,n为快速傅里叶变换的点数,及为基n-FFT变换m=[m,zeros(1,n-n2)];%构建新的m信号df=fs/n; %重新定义频率分辨率(4)FM中所用到的子函数env_phas.m%求信号相角的子函数,这是调频、调相都要用到的方法function [v,phi]=env_phas(x,ts,f0)if nargout==2 %nargout为输出变量的个数z=loweq(x,ts,f0);%产生调制信号的正交分量phi=angle(z); %angle是对一个复数求相角的函数endv=abs(hilbert(x));%abs用来求复数hilbert(x)的模(5)FM中所用到的子函数loweq.m%产生调制信号的正交分量function x1=loweq(x,ts,f0)t=[0:ts:ts*(length(x)-1)];z=hilbert(x);%希尔伯特变换对的利用---通过实部来求虚部x1=z.*exp(-j*2*pi*f0*t); %产生信号z的正交分量,%并将z信号与它的正交分量加在一起4.编码与调试过程由于通过查阅参考书及网上资料,我所编写的这两种程序基本上不存在语法上的错误,只是要求对程序进行仔细阅读及理解,并在一些地方进行必要改写,且加入我自己的思想,使这两种程序更容易理解。

相关主题