通信原理matlab课程设计南昌大学概要.docx
- 文档编号:27353535
- 上传时间:2023-06-29
- 格式:DOCX
- 页数:22
- 大小:213.14KB
通信原理matlab课程设计南昌大学概要.docx
《通信原理matlab课程设计南昌大学概要.docx》由会员分享,可在线阅读,更多相关《通信原理matlab课程设计南昌大学概要.docx(22页珍藏版)》请在冰豆网上搜索。
通信原理matlab课程设计南昌大学概要
南昌大学
通信原理课程设计报告
题目:
2ASK、2FSK、2PSK、2DPSK调制解调matlab仿真
姓名:
学院:
信工学院
专业:
指导教师:
完成日期:
2013年5月5日
一、设计要求
课程设计需要运用MATLAB编程实现2ASK,2FSK,2PSK,2DPSK调制解调过程,并且输出其源码,调制后码元以及解调后码元的波形。
二、基本原理
二进制数字调制技术原理
数字信号的传输方式分为基带传输和带通传输,在实际应用中,大多数信道具有带通特性而不能直接传输基带信号。
为了使数字信号在带通信道中传输,必须使用数字基带信号对载波进行调制,以使信号与信道的特性相匹配。
这种用数字基带信号控制载波,把数字基带信号变换为数字带通信号的过程称为数字调制。
通常使用键控法来实现数字调制,比如对载波的振幅、频率和相位进行键控。
(1)振幅键控是利用载波的幅度变化来传递数字信息,而其频率和相位保持不变,在2ASK中,载波的幅度只有两种变化状态,分别对应二进制信息‘0’和‘1’。
OOK(通-断键控)是一种常用的二进制振幅键控式
模拟调制器法键控法
包络检波法
同步检测法
(2)一个2FSK信号可以看成是两个不同载波的2ASK信号的叠加。
其解调和解调方法和ASK差不多。
2FSK信号的频谱可以看成是f1和f2的两个2ASK频谱的组合。
2FSK信号的产生方法
采用模拟调频电路来实现:
信号在相邻码元之间的相位是连续变化的。
采用键控法来实现:
相邻码元之间的相位不一定连续。
2FSK信号的解调方法
相干解调
非相干解调
(3)2PSK以载波的相位变化作为参考基准的,当基带信号为0时相位相对于初始相位为0,当基带信号为1时相对于初始相位为180°。
调制器原理方框图如下:
模拟调制法检控法
2PSK信号的解调器原理方框图
(4)2DPSK是利用前后相邻码元的载波相对相位变化传递数字信息,所以又称相对相移键控。
2DPSK调制原理方框图如下图。
相干解调法。
差分相干解调(相位比较)法
三、源代码
s=menu('通信原理','2ASK','2PSK','2FSK','2DPSK')
switchs
case1,scolor='2ASK';
n=8;N=100;K=4;
a=randint(1,n);
bita=[];sl=[];
bitRate=1e3;fc=1e3;%载频1KHZ
t=linspace(0,1/bitRate,N);
fori=1:
length(a)
ifa(i)==0
bit1=zeros(1,N);
else
bit1=ones(1,N);
end
bita=[bita,bit1];
c=sin(2*pi*t*fc);
sl=[slc];
end
figure
(1);
subplot(K,1,1);plot(bita,'LineWidth',1.5),title('基带信号'),gridon;axis([0,N*length(a),-2.5,2.5]);
tz=bita*6.*sl;
subplot(K,1,2);plot(tz,'LineWidth',1.5);title('ASK调制后信号');gridon;
signal=awgn(tz,80,'measured');
subplot(K,1,3);plot(signal,'LineWidth',1.5),gridon;title('信号+噪声')
Fs=3e3;
[b,a]=ellip(4,0.1,40,[999.9,1000.1]*2/Fs);%设计IIR带通滤波器,阶数为4,通带纹波0.1,阻带衰减40DB
sf=filter(b,a,signal);%信号通过该滤波器
figure
(2);
K1=4;
subplot(K1,1,1);plot(sf,'LineWidth',1.5),gridon;title('BPF')
signal2=abs(sf);%乘同频同相sin
subplot(K1,1,2);plot(signal2,'LineWidth',1.5),gridon;title('全波整流器');
Fs=3e3;%抽样频率400HZ
[b,a]=ellip(4,0.1,40,[50]*2/Fs);%设计IIR低通滤波器
sf1=filter(b,a,signal2);%信号通过该滤波器,输出信号sf
subplot(K1,1,3);plot(sf1,'LineWidth',1.5),gridon;title('LPF');
sf2=[];
LL=fc/bitRate*N;
i=LL/2;
bitb=[];
while(i<=length(sf1))%判决
sf2=[sf2,sf1(i)>=0.001];
i=i+LL;
end
fori=1:
length(sf2)
ifsf2(i)==0
bit1=zeros(1,N);
else
bit1=ones(1,N);
end
bitb=[bitb,bit1];
end
figure
(1);
subplot(K,1,4);plot(bitb,'LineWidth',1.5),gridon;title('解调后信号');axis([0,N*length(sf2),-2.5,2.5]);
case2,scolor='2PSK';
l=linspace(0,pi,50);%数据初始化
t=linspace(0,9*pi,450);
b=1:
1:
9;
out=1:
1:
450;
f=1:
1:
450;
g=1:
1:
450;
w1=2%正弦波f1的频率,可以根据自己想要的频率在此改写
%正弦波f2的频率,可以根据自己想要的频率在此改写
f1=sin(w1*l);
figure
(1);
f2=sin(w1*l+pi);
figure
(1);
subplot(2,1,1),plot(l,f1),axis([0pi-1.21.2]),xlabel('t'),ylabel('f1');%画出f1信号波形
subplot(2,1,2),plot(l,f2),axis([0pi-1.21.2]),xlabel('t'),ylabel('f2');%画出f2信号波形
a=[010001101]
fori=1:
9%2pSK编码
ifa(i)==0
fork=1:
50%如果二进制原码为0则输出f1波形
out(k+50*(i-1))=f1(k);
end
else
forj=1:
50
out(j+50*(i-1))=f2(j);%r如果二进制原码为1则输出f2波形
end
end
end
fori=1:
9%2PSK解码
n=0;m=0;
forj=1:
50
ifout(j+50*(i-1))-f1(j)==0
n=n+1;
elseifout(j+50*(i-1))-f2(j)==0
m=m+1;
end
end
end
ifn>m
b(i)=0;
elseb(i)=1;
end
end
b
fori=1:
9%画出解码后的波形,包括原码和解码出的码,进行对比
forj=1+50*(i-1):
50*i
f(j)=a(i);
g(j)=b(i);
end
end
figure
(2);
subplot(3,1,1),plot(t,f),axis([09*pi-0.21.2]),xlabel('t'),ylabel('数字基带调制原码');
subplot(3,1,2),plot(t,out),axis([09*pi-1.21.2]),xlabel('t'),ylabel('调制好的波形');
subplot(3,1,3),plot(t,g),axis([09*pi-0.21.2]),xlabel('t'),ylabel('解码得到的码');
[Num,Rat]=biterr(f,g)
case3,scolor='2FSK';
%==生成随机码元、基带信号、调制================%
n=8;%随机码元个数
N=100;%模拟一个码元的点数
K=4;%figure1画四个小图
a=randint(1,n)%码元生成
bita=[];%定义空数组,存放基带信号
fori=1:
length(a)
ifa(i)==0
bit1=zeros(1,N);
else
bit1=ones(1,N);
end
bita=[bita,bit1];%基带信号
end
figure
(1);
subplot(K,1,1);plot(bita,'LineWidth',1.5),title('基带信号'),gridon;axis([0,N*length(a),-2.5,2.5]);
bitRate=1e3;%每一个码元中采样点的间隔宽度0.001s
fc=1e3;%载频1KHZ
t=linspace(0,1/bitRate,N);
tz=[];
c1=sin(2*pi*t*fc);%载波
c2=sin(2*pi*t*fc*2);%载波
fori=1:
length(a)
ifa(i)==1
tz=[tz,c1];
else
tz=[tz,c2];
end
end
subplot(K,1,2);plot(tz,'LineWidth',1.5);title('2FSK已调信号');gridon;
signal=awgn(tz,20,'measured');%加噪
subplot(K,1,3);plot(signal,'LineWidth',1.5),gridon;title('信号+噪声')
%===========解调============%
Fs=5e3;%采样频率
[b1,a1]=ellip(4,0.1,40,[999.9,1000.1]*2/Fs);%设计IIR带通滤波器,阶数为4,通带纹波0.1,阻带衰减40DB
[b2,a2]=ellip(4,0.1,40,[1999.9,2000.1]*2/Fs);
sa=filter(b1,a1,signal);%信号通过该滤波器
sb=filter(b2,a2,signal);
figure
(2);
K1=3;%figure2画(3*2)幅图表示解调过程
subplot(K1,2,1);plot(sa,'LineWidth',1.5),gridon;title('BPF')
subplot(K1,2,2);plot(sb,'LineWidth',1.5),gridon;title('BPF')
%======相乘器=============%
t=linspace(0,1/bitRate,N);
c1=sin(2*pi*t*fc);
c2=sin(2*pi*t*fc*2);
sia=[];
sib=[];
fori=1:
n
sia=[sia,c1];
sib=[sib,c2];
end
siga=sa.*sia;%乘同频同相sia
sigb=sb.*sib;%乘同频同相sib
subplot(K1,2,3);plot(siga,'LineWidth',1.5),gridon;title('相乘器');
subplot(K1,2,4);plot(sigb,'LineWidth',1.5),gridon;title('相乘器');
%========LPF================%
Fs=5e3;%抽样频率400HZ
[b1,a1]=ellip(4,0.1,40,[50]*2/Fs);%设计IIR低通滤波器
[b2,a2]=ellip(4,0.1,40,[50]*2/Fs);%设计IIR低通滤波器
sfa=filter(b1,a1,siga);%信号通过该滤波器,输出信号sfa
sfb=filter(b2,a2,sigb);%信号通过该滤波器,输出信号sfb
subplot(K1,2,5);plot(sfa,'LineWidth',1.5),gridon;title('LPF');
subplot(K1,2,6);plot(sfb,'LineWidth',1.5),gridon;title('LPF');
%===========抽样判决==================%
s2a=[];s2b=[];
LL=fc/bitRate*N;
i1=LL/2;i2=LL;
bitb=[];
while(i1<=length(sfa))%判决过程
s2a=[s2a,sfa(i1)>=0];
i1=i1+LL;
end
while(i2<=length(sfb))
s2b=[s2b,sfb(i2)<=0];
i2=i2+LL;
end
fori=1:
n
ifs2a(i)>s2b(i)
bit1=zeros(1,N);
else
bit1=ones(1,N);
end
bitb=[bitb,bit1];
end
figure
(1);
subplot(K,1,4);plot(bitb,'LineWidth',1.5),gridon;title('解调后信号');axis([0,length(bitb),-2.5,2.5]);
case4,scolor='2DPSK';
%-2DPSK调制与解调
%---------------------------------------------------
%>>>>>>>>>>>>>>>>>>Initial_Part>>>>>>>>>>>>>>>>>>>>>
%---------------------------------------------------
fs=30000;
Time_Hold_On=0.1;
Num_Unit=fs*Time_Hold_On;
High_Level=ones(1,Num_Unit);
Low_Level=zeros(1,Num_Unit);
w=300;
A=1;
%---------------------------------------------------
%>>>>>>>>>>>>>>>>>>Initial_The_Signal>>>>>>>>>>>>>>>
%---------------------------------------------------
Sign_Set=[0,1,1,0,1,0,0,1]
Lenth_Of_Sign=length(Sign_Set);
st=zeros(1,Num_Unit*Lenth_Of_Sign);
sign_orign=zeros(1,Num_Unit*Lenth_Of_Sign);
sign_result=zeros(1,Num_Unit*Lenth_Of_Sign);
t=0:
1/fs:
Time_Hold_On*Lenth_Of_Sign-1/fs;
%---------------------------------------------------
%>>>>>>>>>>>产生基带信号>>>>>>>>>>>>
%---------------------------------------------------
forI=1:
Lenth_Of_Sign
ifSign_Set(I)==1
sign_orign((I-1)*Num_Unit+1:
I*Num_Unit)=High_Level;
else
sign_orign((I-1)*Num_Unit+1:
I*Num_Unit)=Low_Level;
end
end
%---------------------------------------------------
%>>>>>>>>>>>>>>>>>>调制部分>>>>>>>>>>>>>>>>>>
%---------------------------------------------------
forI=1:
Lenth_Of_Sign
ifSign_Set(I)==1
st((I-1)*Num_Unit+1:
I*Num_Unit)=A*cos(2*pi*w*t((I-1)*Num_Unit+1:
I*Num_Unit)+(pi/2));
else
st((I-1)*Num_Unit+1:
I*Num_Unit)=A*cos(2*pi*w*t((I-1)*Num_Unit+1:
I*Num_Unit));
end
end
figure
subplot(2,1,1)
plot(t,sign_orign);
axis([0,Time_Hold_On*(Lenth_Of_Sign+1),-(A/2),A+(A/2)]);
title('原始信号');
grid
subplot(2,1,2);
plot(t,st);
axis([0,Time_Hold_On*(Lenth_Of_Sign+1),-3*(A/2),3*(A/2)]);
title('调制后的信号');
grid
%---------------------------------------------------
%>>>>>>>>>>>>>>>>>>相乘>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
%---------------------------------------------------
dt=st.*cos(2*pi*w*t);
figure
plot(t,dt);
axis([0,Time_Hold_On*(Lenth_Of_Sign+1),-3*(A/2),3*(A/2)]);
title('相乘后的波形');
grid
%---------------------------------------------------
%>>>>>>>>>>>>>>>>>>>低通滤波部分>>>>>>>>>>>>>>>>>>>>
%---------------------------------------------------
[N,Wn]=buttord(2*pi*50,2*pi*150,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,Time_Hold_On*(Lenth_Of_Sign+1),-3*(A/2),3*(A/2)]);
title('低通滤波后的波形');
grid
%---------------------------------------------------
%>>>>>>>>>>>>>抽样判决&逆码变换部分>>>>>>>>>>>>>>>
%---------------------------------------------------
forI=1:
Lenth_Of_Sign
ifdt((2*I-1)*Num_Unit/2)<0.25
sign_result((I-1)*Num_Unit+1:
I*Num_Unit)=High_Level;
else
sign_result((I-1)*Num_Unit+1:
I*Num_Unit)=Low_Level;
end
end
figure
plot(t,sign_result);
axis([0,Time_Hold_On*(Lenth_Of_Sign+1),-3*(A/2),3*(A/2)]);
title('解调后信号');
grid
end
四、仿真现象
运行程序
还会出现调制解调得选择窗口,来进行选择调制解调方式如下
在选择窗口中可以看到有四种调制解调方式
选择2ASK进行调制解调
可以看到随机得基带信号,2ASK调制后的信号以及2ASK解调后的信号
进入菜单从新选择2PSK
可以看到随机产生得2PSK基带信号,2PSK调制后的信号以及2PSK解调后的信号
进入菜单栏重新选择2FSK调制解调
可以看到随机产生得基带信号,使用2FSK调制后的信号以及使用2FSK解调后的信号
进入菜单栏从新选择2DPSK调制解调
以上为随机产生得二进制原始信号以及2DPSK调制之后得信号
使用2DPSK解调之后的信号
五、调试分析
1、调试方法:
根据自己的设计内容运行程序,仔细检查MATLAB运行出来的图片中的数据是否符合自己的设计要求。
如果不符合就应该调整程序内容,继续运行,直到达到自己设计要求。
2、问题分析与解决措施.
在调试过程中遇到了
(1)程序不能正常运行
错误:
程序命名保存时用了2SK
(2)输出提示语句未显示
错误:
提示语与程序中设置显示语言发生冲突。
(3)使用menu模块时未能成功连接
错误:
连接语使用不一致,不能正常连接
六、参考文献
《通信原理(第六版)》樊昌信曹丽娜编国防工业出版社
通信原理-基于MATLAB的仿真-郭文彬
七、心得体会
经过这次通信原理课程设计,我复习了MATLAB编程语言的基本概念、语法、语义和数据类型的使用特点,加深了对通信原理课程的理解,了解了运用结构化程序设计的基本思想和方法,更重要的是培养了自己的自学能力。
以下是我的几点切身感受:
(一)读程序需要一个清醒的头脑,明确的思路,同时也要有耐心毅力。
刚拿到程序设计课题时,我感觉一片茫然,因为在之前的信号处理学习中,只是在一些例题中接触过MATLAB语言,对MATLAB的基本语句一无所知,不过通过原有程序,了解了首先要设计guide目录,再根据用户输入,执行swtich语句,在每个case后调用一个函数,来实现要求的功能。
至此,我真真体
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通信 原理 matlab 课程设计 南昌大学 概要