
信号与通信仿真设计
实
习
报
告
姓名:
班级:
学号:
一 实验目的
在本实验中使用的软件工具是MATLAB。设计本实验的目的是希望在以下几方面有所收获:
1.会MATLAB软件的最基本运用。
MATLAB是一种很实用的数学软件,它易学易用。MATLAB对于许多的通信仿真类问题来说是比较合适的。
2.了解计算机仿真的基本原理及方法,知道怎样通过仿真的方法去研究通信问题。
3.加深对信号与系统和通信原理及其相关课程内容的理解。
二 实验特点
与硬件实验相比,软件实验具如下一些特点:
1.软件实验具有广泛的实用性和极好的灵活性。在硬件实验中改变系统参数也许意味着要重做硬件,而在软件实验中这只是该一两个数据,或者只是在屏幕上按几下鼠标。
2.软件实验更有助于我们较为全面地研究通信系统。有许多问题,通过硬件试验来研究可能非常困难,但在软件实验中却易于解决。
3.硬件实验的精确度取决于元器件及工艺水平,软件实现的精确度取决于CPU的运算速度或者说是程序的运算量。
4.软件实验开发周期短,成本低。
三 上机实验要求
1.掌握matlab的基本操作及了解基本的仿真方法,分析运行范例程序。
2.按以下要求编制仿真程序并调试运行
(1)基本信号的仿真
(2)模拟调制与解调的仿真
(3)数字基带传输码型的仿真
(4)数字调制与解调的仿真
(5)脉冲编码调制仿真
四 实验内容
1、基本信号的仿真
(1)产生并绘出以下信号:
a单位脉冲序列
b单位阶跃序列
c正弦信号及其频谱
d周期锯齿波sawtooth()
e周期方波square()
f实指数序列y(n)=2n
g sin2πf1t*cos2πf2t f1=50Hz f2=2000Hz
(2)产生一条-2到2之间的Sa(200t)曲线。
(3)产生下面信号,并绘出频谱
t 0 高斯噪声的产生:设高斯噪声限带为(-Bs,Bs),双边带功率谱密度为,则总功率为,设高斯噪声幅度为x,则有:=,,所以高斯噪声可表示成x=sqrt(Bs*no)*randn(1,M)(M为随机码元个数) (1)DSB调制与解调 设消息信号m(t)的表达式为:m(t)= sin(2*pi.*t),已调信号的时域表达式为:u(t)=m(t)c(t)=Ac*m(t)cos(2πfct) 。假设用信号m(t)以DSB方式调制载波c(t)=cos(2πfct),所得到的已调信号记为u(t)。绘制调制信号、已调信号和解调信号等各相关点处的时域波形和频谱,加上高斯白噪声进行对比。 (2)AM调制与解调 AM调制信号的时域表达式为:u(t)= AC[1+amn(t)]cos(2πfct)。这里a是调制指数,mn(t)是经过归一化处理的消息信号,式中mn(t)=m/max(abs(m))。给定的调制指数a=0.8,绘制调制信号、已调信号和解调信号等各相关处点的时域波形和频谱。 3、数字基带信号的码型的仿真 (1)编程实现单极性非归零码 (2)编程实现双极性归零码,占空比50% 原理流程图如下: (3)编程实现双相码 原理流程图如下: (4)编程实现AMI码 原理流程图如下: (3)画出a=0,0.5,1的升余弦滚降系统频谱,并画出其各自对应的时域波形。 (4)设基带传输系统响应是a=1的升余弦滚降系统,画出在接收端的基带数字信号波形及其眼图。 实现原理如下: 4、数字调制与解调的仿真 1. 2FSK调制和解调 发送的二进制信息序列为100110000101,根据2FSK调制和解调的原理框图,绘出的各点波形及其频谱或功率谱,加上噪声作对比。 原理流程图如下: 2. 2PSK调制和解调 发送的二进制信息序列为100110000101,根据2FSK调制和解调的原理框图,绘出的各点波形及其频谱或功率谱,加上噪声作对比。 原理流程图如下: 五 实验结果 1、基本信号的仿真 (1)产生并绘出以下信号: a单位脉冲序列 %单位脉冲序列,maichong.M n=1:50; %定义序列的长度是50 x=zeros(1,50) %MATLAB 中数组下标从 1 开始 x(1)=1; plot(n,x); stem(x); title('单位冲击信号序列'); b单位阶跃序列 %单位阶跃序列,jieyue.m for i=1:50; %定义序列的长度是 50 if i>0 x(i)=1; else x(i)=0; end end plot(i,x); stem(x); title('单位阶跃序列'); axis([-10 30 0 1]); c正弦信号及其频谱 %正弦信号及其频谱,sine.m x=0:0.1:2*pi; y=sin(x); Y=fft(y,100) subplot(2,1,1); plot(x,y) %绘制信号图形 title('正弦信号') axis([0 6 -1 1]) subplot(2,1,2); stem(Y) %绘制信号的频谱 title('正弦信号频谱') axis([0 20 -20 20]); d周期锯齿波sawtooth() %周期锯齿波,jizhibo.m n=[-3.14*4:0.01:3.14*4]; x=sawtooth(n); plot(n,x) title('周期锯齿波') e周期方波square() %周期方波,fangbo.m y=square(n); plot(n,y) title('周期方波') axis([0 10 -2 2]) f实指数序列y(n)=2n %实指数序列y(n)=2.^n,shizhishu.m n=1:0.1:20; y=2.^n; stem(y); title('实指数序列y(n)=2.^n'); axis([0 200 0 100000]) g.y=sin2πf1t*cos2πf2t (f1=50Hz f2=2000Hz) %g.m n=[-1:0.01:1]; f1=50; f2=2000; y=sin(2*pi*f1*n).*cos(2*pi*f2*n; plot(n,y) title('y=sin2πf1n cos2πf2n (f1=50Hz f2=2000Hz)') 心得体会: 通过实验熟悉了matlab的一些基本指令的使用,知道了一些产生基本信号的编程方法,为后续实验打下了基础。 (2)产生一条-2到2之间的Sa(200t)曲线。 %产生一条-2到2之间的Sa(200t)曲线.sinc.m t=[-2:0.01:2]; x=sinc(200*t/pi); plot(t,x) title('x=Sa(200t)') (3)产生下面信号,并绘出频谱 t 0 %st.m t0=0.5; ts=0.001; %时间采样间隔 Fs=1/ts; %采样频率 df=0.3; %频率分辨率 t=0:ts:t0; for i=1:length(t) if t(i)>=0&t(i) elseif t(i)>=t0/4&t(i)<=3*t0/4 y(i)=-t(i)+t0/4; elseif t(i)>3*t0/4&t(i)<=t0 y(i)=t(i)-t0; else continue end end [Y,y,df1]=fft_seq(y,ts,df); f=[0:df1:df1*(length(y)-1)]-Fs/2; %频率矢量 subplot(2,1,1);plot(t,y(1:length(t))) title('St信号'); subplot(2,1,2);plot(f,abs(fftshift(Y))); title('St信号频谱'); % DSB调制,DSB.m %调制信号时域表达式u(t)=m(t)c(t)=Ac*m(t)cos(2πfct) %函数[M,m,df]=fft_seq(m,ts,df)求取频谱函数 %高斯噪声可表示成x=sqrt(Bs*no)*randn(1,M) Bs=10; %高斯噪声限带 no=0.01; %单边带功率谱密度 t0=1; %信号持续时间 ts=0.001; %时间采样间隔 Fc=250; %载波中心频率 Fs=1/ts; %采样频率 df=0.3; %频率分辨率 t=[0:ts:t0]; %时间矢量 m=sin(2*pi.*t); %调制信号 c=cos(2*pi*Fc.*t); %载波信号 u=m.*c; %已调信号 [M,m,df1]=fft_seq(m,ts,df); M=M/Fs; %缩放 [U,u,df1]=fft_seq(u,ts,df);U=U/Fs; [C,c,df1]=fft_seq(c,ts,df); f=[0:df1:df1*(length(m)-1)]-Fs/2; figure(1); subplot(3,2,1);plot(t,m(1:length(t))); axis([0 1 -1 1]);title('调制信号'); subplot(3,2,3);plot(t,c(1:length(t))) axis([0 0.1 -1 1]);title('载波信号'); subplot(3,2,5);plot(t,u(1:length(t))); axis([0 1 -1 1]);title('已调信号'); subplot(3,2,2);plot(f,abs(fftshift(M))); title('调制信号频谱'); subplot(3,2,4);plot(f,abs(fftshift(C))); title('载波信号频谱'); subplot(3,2,6);plot(f,abs(fftshift(U))); title('已调信号频谱'); %相干解调,加入高斯白噪声noise noise=sqrt(Bs*no)*randn(1,length(u); [Y,y,df1]=fft_seq(y,ts,df); Y=Y/Fs; y=(u+noise).*c; %低通滤波 f_cutoff=150; %滤波器截止频率 n_cutoff=floor(150/df1); f=[0:df1:df1*(length(m)-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; figure(2); subplot(2,2,1);plot(t,y(1:length(t))); title('滤波器输入信号'); subplot(2,2,2);plot(f,abs(fftshift(Y))); title('滤波器输入信号频谱'); subplot(2,2,3);plot(t,dem(1:length(t)); title('滤波器输出信号'); subplot(2,2,4); plot(f,abs(fftshift(DEM))); title('滤波器输出信号频谱'); %AM调制,AM.m %AM调制信号的时域表达式为: u(t)= AC[1+amn(t)]cos(2πfct) % a是调制指数,mn(t)是经过归一%化处理的消息信号,函数%[M,m,df]=fft_seq(m,ts,df)求取频谱%函数,高斯噪声可表示成 Bs=10; %高斯噪声限带 no=0.01; %单边带功率谱密度 a=0.8; %调制指数 t0=1; %信号持续时间 ts=0.001; %时间采样间隔 Fc=250; %载波中心频率 Fs=1/ts; %采样频率 df=0.3; %频率分辨率 t=[0:ts:t0]; %时间矢量 m=sin(2*pi.*t); %调制信号 c=cos(2*pi*Fc.*t); %载波信号 u=(1+a*m).*c; %已调信号 [M,m,df1]=fft_seq(m,ts,df); [U,u,df1]=fft_seq(u,ts,df); [C,c,df1]=fft_seq(c,ts,df); f=[0:df1:df1*(length(m)-1)]-Fs/2; figure(1); subplot(3,2,1);plot(t,m(1:length(t))); axis([0 1 -1 1]) title('调制信号'); subplot(3,2,3);plot(t,c(1:length(t))) axis([0 0.1 -1 1]) title('载波信号'); subplot(3,2,5);plot(t,u(1:length(t))); axis([0 1 -2 2]) title('已调信号'); subplot(3,2,2);plot(f,abs(fftshift(M))); axis([-10 10 0 1]) title('调制信号频谱'); subplot(3,2,4);plot(f,abs(fftshift(C))); axis([-300 300 0 200]) title('载波信号频谱'); subplot(3,2,6);plot(f,abs(fftshift(U))); axis([-300 300 0 1]); title('已调信号频谱'); %相干解调,加入高斯白噪声noise noise=sqrt(Bs*no)*randn(1,length(u); y=(u+noise).*c; [Y,y,df1]=fft_seq(y,ts,df); Y=Y/Fs; %低通滤波 f_cutoff=150; n_cutoff=floor(150/df1); 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; %滤波器的输出 figure(2); subplot(2,2,1);plot(t,y(1:length(t))); axis([0 1 -4 4]); title('滤波器输入信号'); subplot(2,2,2);plot(f,abs(fftshift(Y))); axis([0 10 0 0.5]); title('滤波器输入信号频谱'); subplot(2,2,3);plot(t,dem(1:length(t)); axis([0 1 -1 4]); title('滤波器输出信号'); subplot(2,2,4); plot(f,abs(fftshift(DEM))); axis([-10 10 0 1]);title('滤波器输出信号频谱'); 心得体会: 通过AM与DSB实验,我对模拟调制解调的方法及原理有了清晰直观的认识,知道了各类调制解调方法的优缺点和相互之间的区别。 3、数字基带信号的码型的仿真 (1)单极性非归零码 function y=djxbg0(x) %本函数实现将输入的一段二进制%代码编为相应的单极性不归零码%输出,编码规则:零电平与正电 %平分别对应着二进制代码0和1 %输入x为二进制码,输出y为编 %好的码,给出计算每一个码元的 %点数,因为我们只有用离散的点 %来得出连续的函数表示。在命令 %窗口键入如下指令即会出现图形 % t=[1 0 0 1 1 0 0 0 0 1 0 1]; % djxbg0(t); ts=0.001; %时间采样间隔 grid=1/ts; t=0:ts:length(x); for i=1:length(x), %计算码元的值 if(x(i)==1), %如果信息为1 for j=1:grid, %该码元对应的点值取1 y((i-1)*grid+j)=1; end else for j=1:grid, %反之,信息为0,码元对应点取0 y((i-1)*grid+j)=0; end end end y=[y,x(i)]; %为了画图注意序列加上最后一位 subplot(2,1,1);plot(t,y); axis([0,i,-0.1,1.1]); %采用了title命令来实现标记出各码元对应的二元信息 title('1 0 0 1 1 0 0 0 0 1 0 1'); xlabel('单极性不归零码'); (2)双极性归零码,占空比50% function y=sjxg0(x) %本函数实现将输入的一段二进制代码编为相应的双极性归零码输出 %编码规则:负电平与正电平分别对应着二进制代码0和1,每个码元内的脉冲都回到零电平 %输入x为二进制码,输出y为编好的码 %给出计算每一个码元的点数,因为我们只有用离散的点来得出连续的函数表示。 %在命令窗口键入如下指令即会出现图形 % t=[1 0 0 1 1 0 0 0 0 1 0 1]; % sjxg0(t); grid=300; t=0:1/grid:length(x); for i=1:length(x), %计算码元的值 if(x(i)==1), %如果信息为1 for j=1:grid/2, %该码元对应的点值取1 y((i-1)*grid+j)=1; end for j=grid/2:grid,%占空比50%,归0 y((i-1)*grid+j)=0; end else for j=1:grid/2,%反之,信息为0,码元对应点取-1 y((i-1)*grid+j)=-1; end for j=grid/2:grid,%占空比50%,归0 y((i-1)*grid+j)=0; end end end y=[y,x(i)];%为了画图,注意将序列加上最后一位 M=max(y);m=min(y); subplot(2,1,1);plot(t,y); xlabel('双极性归零码')axis([0,i,m-0.1,M+0.1]) %采用了title命令来实现标记出各码元对应的二元信息 title('1 0 0 1 1 0 0 0 0 1 0 1'); (3)双相码 function [y,t]=shuangxiang(x) %本函数实现将输入的一段二进制代码编为相应的双向 %码输出,编码规则:“0”码用“01”表示,“1”码用“10”%表示,输入x为二进制码,输出y为编好的码,给出计%算,每一个码元的点数,因为我们只有用离散的点来得出%连续的函数表示。 %在命令窗口键入如下指令即会出现图形 % t=[1 0 0 1 1 0 0 0 0 1 0 1]; % shuangxiang(t); ts=0.001; %时间采样间隔 grid=1/ts; t=0:ts:length(x); for i=1:length(x), %计算码元的值 if(x(i)==1), %如果信息为1,该码元对应的点值取10 for j=1:grid/2, y((i-1)*grid+j)=1; end for j=grid/2:grid, y((i-1)*grid+j)=0; end else %如果信息为0,该码元对应的点值取01 for j=1:grid/2, y((i-1)*grid+j)=0; end for j=grid/2:grid, y((i-1)*grid+j)=1; end end end y=[y,x(i)]; %为了画图,注意将序列加上最后一位 subplot(2,1,1); plot(t,y); axis([0,i,-0.1,1.1]); %采用了title命令来实现标记出各码元对应的二元信息 xlabel('双向码'); title('1 0 0 1 1 0 0 0 0 1 0 1'); (4)AMI码 function y=ami(x) %本函数实现将输入的一段二进制代码编为相应的AMI码输出 %编码规则:二进制“1”交替变换为“+1”,“-1”,“0”保持不变 %输入x为二进制码,输出y为编好的码 %给出计算每一个码元的点数,因为我们只有用离散的点来得出连续的函数表示 %在命令窗口键入如下指令即会出现图形 % t=[1 0 0 1 1 0 0 0 0 1 0 1]; % ami(t); grid=300; s=0; %s为符号标志 t=0:1/grid:length(x); for i=1:length(x), %计算码元的值 if(x(i)==1), %如果信息为1 if(s==0), for j=1:grid, %s=0时,该码元对应的点值取1 y((i-1)*grid+j)=1; s=1; end else for j=1:grid, %s=1时,该码元对应的点值取-1 y((i-1)*grid+j)=-1; s=0; end end else for j=1:grid, %反之,信息为0,码元对应点取0 y((i-1)*grid+j)=0; end end end y=[y,x(i)];%为了画图,注意将序列加上最后一位 subplot(2,1,1); plot(t,y); axis([0 i -1.1 1.1]) xlabel('AMI码'); %采用了title命令来实现标记出各码元对应的二元信息 title('1 0 0 1 1 0 0 0 0 1 0 1'); (3)a=0,0.5,1的升余弦滚降系统频谱及其各自对应的时域波形 %gunjiang.m %取a=0,0.5,1的升余弦滚降系统频谱及各自对应的时域波形 %函数[Y,y]=H(f,a,1T)为升余弦滚降系统频谱及各自对应的时域表达式 N=400; for i=1:N f(i)=(i-N)/100; %采样间隔 [Y1(i),y1(i)]=Hh(f(i),0,1); %a=0 [Y2(i),y2(i)]=Hh(f(i),0.5,1); %a=0.5 [Y3(i),y3(i)]=Hh(f(i),1,1); %a=1 End for i=(N+1):(2*N-1) f(i)=(i-N)/100; [Y1(i),y1(i)]=Hh(f(i),0,1); %a=0 [Y2(i),y2(i)]=Hh(f(i),0.5,1);%a=0.5 [Y3(i),y3(i)]=Hh(f(i),1,1); %a=1 end figure(1); plot(f,Y1); hold on plot(f,Y2,'r'); hold on plot(f,Y3,'k'); legend('a=0','a=0.5','a=1') title('升余弦滚降频谱'); axis([-2 2 0 2]); figure(2); plot(f,y1); hold on plot(f,y2,'r'); hold on plot(f,y3,'k'); title('升余弦滚降时域波形'); legend('a=0','a=0.5','a=1') axis([-4 4 -1 1]); %Hh.m %函数[Y,y]=H(f,a,1T)为升余弦滚降系统频谱及各自对应的时域表达式 %f为采样间隔,a为滚降系数,Ts为码元持续时间 function [H,h]=Hh(f,a,Ts) %升余弦滚降系统频谱函数H if abs(f)>=(1+a)/(2*Ts) H=0; elseif abs(f)<(1-a)/(2*Ts) H=Ts; else H=(Ts/2)*(1+sin((pi-abs(f)*2*pi*Ts)/(2*a))); end %升余弦滚降系统时域表达式h h=sinc(f/Ts).*(cos(a*pi*f/Ts))./(1-4*a^2*f.^2/Ts^2); (4)基带传输系统响应是a=1的升余弦滚降系统在接收端的基带数字信号波形及其眼图。 %基带信号眼图示意,yantu.m.。函数%out=sigexpand()将输入的序列扩展 %成间隔为N-1个0的序列 Ts=1; %持续时间 N_sample=17; eye_num=7; alpha=1; N_data=1000; dt=Ts/N_sample; t=-3*Ts:dt:3*Ts; %时间矢量 %产生双极性数字信号 d=sign(randn(1,N_data)); dd=sigexpand(d,N_sample); %系统输入信号 %基带系统冲击响应(升余弦) ht=sinc(t/Ts).*(cos(alpha*pi*t/Ts))./(1-4*alpha^2*t.^2/Ts^2); st=conv(dd,ht); %系统输出信号 tt=-3*Ts:dt:(N_data+3)*N_sample*dt-dt; %时间矢量tt figure(1) subplot(411);plot(dd); axis([0 100 -2 2]);title('双极性数字信号'); subplot(412) plot(t,ht);xlabel('t/Ts');title('系统函数波形(a=1)'); subplot(413) plot(tt,st);axis([0 20 -1.2 1.2]);xlabel('tt/Ts');title('基带信号'); subplot(414); xlabel('ttt/Ts');title('基带信号眼图'); %画眼图 ss=zeros(1,eye_num*N_sample); ttt=0:dt:eye_num*N_sample*dt-dt; for k=3:50 ss=st(k*N_sample+1:(k+eye_num)*N_sample); drawnow; plot(ttt,ss);hold on; end function [out]=sigexpand(d,M) %将输入的序列扩展成间隔为N-1个0的序列 N = length(d); out = zeros(M,N); out(1,:) = d; out = reshape(out,1,M*N); 心得体会 通过数字基带信号的码型的仿真实验,我熟知了各种码型的编程规则及各自的特点,并且对实现无码间串扰传输与通信系统的关系有了清晰的认识。 4、数字调制与解调的仿真 (1) 2FSK调制和解调 %2FSK调制, FSKnoise.m df=0.3; %频率分辨率 ts=0.0005; %时间采样间隔 Fs=1/ts; %采样频率 x=[1 0 0 1 1 0 1 0 0 1 0 1]; n=length(x); [s1,t]=djxbg0(x); %基带信号为单极性不归零码 s2=1-s1; %单极性不归零码的反码 c1=sin(2*pi*20.*t); %载波信号c1,f=20hz c2=sin(2*pi*120.*t); %载波信号c2,f=120hz ei1=c1.*s1; %已调信号ei1 ei2=c2.*s2; %已调信号ei2 e=ei1+ei2; %2FSK信号 noise=0.1*randn(1,length(t)); %加入噪声 e=e+noise; figure(1); subplot(3,2,1); plot(t,s1);axis([0,n,-0.1,1.1]); ylabel('基带信号s1'); title('1 0 0 1 1 0 1 0 0 1 0 1'); subplot(3,2,2); plot(t,s2);axis([0,n,-0.1,1.1]); ylabel('基带信号反码s2'); title('1 0 0 1 1 0 1 0 0 1 0 1'); subplot(3,2,3);plot(t,c1); axis([0,1,-1,1]);title('载波信号c1'); subplot(3,2,4);plot(t,c2); axis([0,1,-1,1]);title('载波信号c2'); subplot(3,2,5);plot(t,ei1); axis([0,n,-1,1]);title('已调信号ei1'); subplot(3,2,6);plot(t,ei2); %相干解调 b1=fir1(101,[10/800 20/800]); b2=fir1(101,[90/800110/800]); eo1=filter(b1,1,e); eo2=filter(b2,1,e); %经过带通滤波器后的信号 [E,e,df1]=fft_seq(e,ts,df); [E1,eo1,df1]=fft_seq(eo1,ts,df); [E2,eo2,df1]=fft_seq(eo2,ts,df); f=[0:df1:df1*(length(e)-1)]-Fs/2; figure(2); subplot(321); plot(t,e(1:length(t))); title('2FSK信号e'); subplot(322); plot(f,abs(fftshift(E))); axis([-200 200 0 10000]); title('2FSK信号频谱E'); subplot(3,2,3);plot(t,eo1(1:length(t))); title('滤波器输出信号eo1(f=20hz)'); subplot(3,2,4);plot(f,abs(fftshift(E1))); axis([-200 200 0 10000]); title('带通滤波器输出信号频谱E1'); subplot(3,2,5);plot(t,eo2(1:length(t))); title('滤波器输出信号eo2(f=120hz)'); subplot(3,2,6);plot(f,abs(fftshift(E2))); axis([-200 200 0 10000]); title('带通滤波器输出信号频谱E2'); sw1=eo1.*eo1; sw2=eo2.*eo2; bn=fir1(101,[2/80010/800]); st1=filter(bn,1,sw1); st2=filter(bn,1,sw2); figure(3) subplot(311); plot(t,st1(1:length(t))); ylabel('幅度');xlabel('t') title('经过低通滤波器后的波形st1') subplot(312);plot(t,st2(1:length(t))); title('经过低通滤波器后的波形st2'); ylabel('幅度');xlabel('t') %判决 for i=1:length(t) if(st2(i)>=st1(i)) st(i)=0; else st(i)=1; end end subplot(313); plot(t,st(1:length(t))); title('经过抽样判决器后的波形st');ylabel('幅度');xlabel('t') (1) 2PSK调制和解调 %2PSK调制,PSKnoise.m ts=0.001; Fs=1/ts; df=0.1; x=[1 0 0 1 1 0 1 0 0 1 0 1]; i=length(x); [s1,t]=djxbg0(x); s2=1-s1; c1=sin(2*pi*10.*t); %载波信号c1,初相位位0 c2=sin(2*pi*10.*t-pi); %载波信号c2,初相位位180 e1=c1.*s1; %已调信号e1 e2=c2.*s2; %已调信号e2 ei=e1+e2; %2PSK信号 noise=0.1*randn(1,length(t)); %噪声 ei=ei+noise; figure(1); subplot(3,2,1); plot(t,s1);axis([0,i,-0.1,1.1]); title('1 0 0 1 1 0 1 0 0 1 0 1'); ylabel('基带信号s1') subplot(3,2,2); plot(t,s2);axis([0,i,-0.1,1.1]); title('1 0 0 1 1 0 1 0 0 1 0 1'); ylabel('基带信号反码s2'); subplot(3,2,3); plot(t,c1); axis([0,1,-1,1]); title('载波信号c1(初相位位0)'); subplot(3,2,4); plot(t,c2); axis([0,1,-1,1]); title('载波信号c2(初相位位180)'); subplot(3,2,5); plot(t,e1); axis([0,i,-1,1]); title('已调信号e1'); subplot(3,2,6); plot(t,e2); axis([0,i,-1,1]); title('已调信号e2'); %相干解调 eo=ei.*sin(2*pi*10.*t); %已调信号eo与本振相乘 [EI,ei,df1]=fft_seq(ei,ts,df); [E,eo,df1]=fft_seq(eo,ts,df); %低通滤波 f_cutoff=1; %滤波器截止频率1hz n_cutoff=floor(1/df1); %设计滤波器 f=[0:df1:df1*(length(eo)-1)]-Fs/2; %频率矢量 H=zeros(size(f)); H(1:n_cutoff)=ones(1,n_cutoff); H(length(f)-n_cutoff+1: length(f))=ones(1,n_cutoff); DEM=H.*E; %滤波器输出频谱 dem=real(ifft(DEM)); %滤波器的输出 figure(2); subplot(3,2,1); plot(t,eo(1:length(t))); axis([0,i,-2,2]); title('滤波器输入信号eo'); subplot(3,2,2); plot(f,abs(fftshift(E))); axis([0 i -1 1000]) title('滤波器输入信号频谱E'); subplot(3,2,3); plot(t,dem(1:length(t))); axis([0,i,-2,2]); title('滤波器输出信号dem'); subplot(3,2,4); plot(f,abs(fftshift(DEM))); axis([-2,2,0,2000]); title('滤波器输出信号频谱DEM'); %抽样判决 for n=1:length(f) if(dem(n)>0) dem(n)=1; else dem(n)=0; end end subplot(3,2,5); plot(t,dem(1:length(t))); axis([0,i,-0.1,1.1]); title('恢复信号dem'); DEM=real(ifft(dem)); subplot(3,2,6); plot(f,abs(fftshift(DEM))); axis([0,2,-0.1,0.5]); title('恢复信号频谱DEM'); figure(3); subplot(2,1,1); plot(t,ei(1:length(t))); axis([0,5,-1,1]); title('2PSK信号'); subplot(2,1,2); plot(f,abs(fftshift(EI))); axis([-10,10 0.1,2000]); title('2PSK信号频谱'); 心得体会 通过2FSK与2PSK实验,我对数字调制解调的实现方法及原理有了清晰直观的认识,知道了各类调制解调方法的优缺点和相互之间的区别。 总结 通过信号与通信仿真实验,我对通信技术中的一些知识和原理有了更深的认识,对通信系统的总体把握更加全面和准确,为今后的深入学习扎实了基础。在此感谢狄卫国老师的悉心指导。
