900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 基于Matlab的通信系统仿真-数字基带传输系统

基于Matlab的通信系统仿真-数字基带传输系统

时间:2022-06-05 10:43:23

相关推荐

基于Matlab的通信系统仿真-数字基带传输系统

目录

一、实验项目二、设计思路三、使用的matlab函数声明四、各模块设计(包含代码、流程图)1、主函数1. 流程图2. matlab代码2、information1函数1. 流程图2. matlab代码3、information2函数1. 流程图2. matlab代码4、codechange1函数1. 流程图2. matlab代码5、sampling函数1. 流程图2. matlab代码6、re_signal函数1. 流程图2. matlab代码7、draw函数1. 流程图2. matlab代码8、sss函数1. 流程图2. matlab代码五、仿真及测试效果六、实验总结及心得体会

一、实验项目

基带传输系统:欲传送的0、1比特流 + 码型变换 +基带成型网络(采用升余弦滚降系统或者部分响应系统)+信道+码型反变换+0、1比特流。针对某种码型分析其误码率。(噪声为加性高斯白噪声)

二、设计思路

首先我们先来分析数字基带系统的组成。

信源:模拟产生0,1的比特流

码型变换:将信源传输的0,1比特流转换为适合信道传输的码型,减小误码率

发送滤波器:压缩输入信号的频带,利于信号在信道中的传输

信道:允许基带信号传输的媒质,可分为有线信道、无线信道。

接收滤波器:接受信号,尽可能的滤除信道噪声、和其他干扰,对信道特性进行均衡。使输出的信号有利于抽样判决。

抽样判决:即使在传输特性不理想的条件下,在规定的时刻对信号进行判决

码型反变换:将码型进行反转,得到0,1的比特流

因此在matlab中的主函数设计思路如下:

1、首先根据设定的N值不同,生成规定长度的0,1的比特流

2、根据所设定的码型,设计码型变换函数,并在主函数中进行调用(此处我设定的是AMI码2)

3、将信号输入发送滤波器

4、模拟设置高斯白噪声信号,并将其与发送的信号进行叠加

5、将信号输入接受滤波器进行滤波

6、抽样判决器进行抽样判决

7、进行码型反变换

8、进行时域补偿

9、设定图形输出函数,将各个时期的波形进行比较

故设计以下子函数:

1、information1(N)生成0,1的比特流

2、Information2(N)生成传输波形

3、codechange(signal,N)进行码型变换

4、filter调用fdatool设计的滤波器函数,进行滤波

5、wgn生成噪声信号

6、Sampling(signal,N,n)进行抽样判决

7、re_signal(signal,n)进行码型反变换

8、draw(N,n,signal0,signal1,…)进行画图显示

9、sss(signal,N)用于补偿时域偏移

三、使用的matlab函数声明

1、wgn用于产生高斯白噪声

调用格式:

wgn(m,n,power)

m,n为开始、结束的标志

power为设定的噪声的DB

2、filter滤波

调用格式:

filter(Num,1,signal)

Num为FDATOOL生成的滤波器系数

1为分子

Signal是要进行滤波的函数

3、FDATOOL工具箱

用于生成升余弦滚降滤波器

4、plot函数

用于画图,采用线性坐标

5、axis函数

用于设置当前坐标区的范围

6、figure函数

用于生成新的图窗

7、title函数

用于生成图窗的名称

8、subplot函数

将当前图窗划分为 m×n 网格,并在 p 指定的位置创建坐标区。

例子:subplot(2,2,3)

当前图窗划分为 2×2 网格,并在 3处的位置创建坐标区。

四、各模块设计(包含代码、流程图)

1、主函数

1. 流程图

2. matlab代码

此处不做提供,请参考流程图进行绘制

2、information1函数

1. 流程图

2. matlab代码

function x=information1(N)a=rand(N);x=[];for i=1:Nif a(i)<=0.5x(i)=0;elsex(i)=1;endendend

3、information2函数

1. 流程图

2. matlab代码

function x=information2(N,n,signal)x=[];for i=1:Nif signal(i)==1x=[x,ones(1,n)];elseif signal(i)==0x=[x,zeros(1,n)];elsex=[x,ones(1,n).*(-1)];endendendend

4、codechange1函数

1. 流程图

2. matlab代码

function change_signal=codechange1(signal,N)change_signal=[];cout=1;for i=1:Nif signal(i)==1change_signal(i)=cout;cout=-cout;elsechange_signal(i)=0;endendend

5、sampling函数

1. 流程图

2. matlab代码

function sample_signal=sampling(signal,n,N)sample_signal=[]; %设定空数组用于存放生成的新信码;for i=n/4:n:N*n %设置间隔来取出抽样值;if signal(i)>0.5%当信号抽样值>0.5,则信号恢复时函数为1;sample_signal=[sample_signal,1];elseif signal(i)<-0.5 %当信号抽样值<-0.5,则信号恢复时函数为-1;sample_signal=[sample_signal,-1];else %其余恢复为0;sample_signal=[sample_signal,0];endendendend

6、re_signal函数

1. 流程图

2. matlab代码

function ss=re_siginal(signal,N)ss=[];for i=1:Nif signal(i)==1ss(i)=1;elseif signal(i)==-1ss(i)=1;elsess(i)=0;endendendend

7、draw函数

1. 流程图

2. matlab代码

function draw(N,n,j,signal1,signal2,filter_signal1,noise,signal3,signal4,signal5,signal8,err)% signal1为生成的比特流% signal2为生成的AMI码% filter_signal1为通过滤波器的信号% noise为噪声信号% signal3为AMI码且经过放大% signal4为加入噪声信号的AMI码% signal5是抽样判决生成的AMI码% signal8是复原的比特流% err误码率figure;subplot(2,1,1);plot(signal1);title('生成的比特流');axis([0,N*n,-0.5,1.5]);subplot(2,1,2);plot(signal8);title('复原的比特流');axis([0,N*n,-0.5,1.5]);figure;subplot(3,1,1);plot(signal3);title('AMI码');axis([0,N*n,-1.5,1.5]); subplot(3,1,2);plot(noise);title('噪声信号');axis([0,N*n,-1.5,1.5]);subplot(3,1,3);plot(signal4);title('加入噪声的信号');axis([0,N*n,-1.5,1.5]);figure;subplot(2,1,1);plot(signal4);title('加入噪声的信号');axis([0,N*n,-1.5,1.5]);subplot(2,1,2);plot(filter_signal1);title('经过滤波器的信号');axis([0,N*n,-1.5,1.5]);figure;subplot(2,1,1);plot(signal2);title('AMI码');axis([0,N,-1.5,1.5]);subplot(2,1,2);plot(signal5);title('抽样判决生成的AMI码');axis([0,N,-1.5,1.5]);figure;plot(err.*100);title('误码率(已换算为百分比)');% axis([0,j,0,0.1]);end

8、sss函数

1. 流程图

2. matlab代码

function xx=sss(signal,N)%补偿滤波器造成的时域偏移xx=[];xx(N)=signal(1);for i=1:N-1xx(i)=signal(i+1);end

五、仿真及测试效果

本次实验总共实验了30次,其误码率如下:

生成的AMI码和抽样判决生成的AMI码:

加入噪声的信号与滤波后的信号的对比:

生成的AMI码、噪声信号及加入的噪声信号的对比:

生成的比特流和复原的比特流的对比:

六、实验总结及心得体会

本次实验实验还是比较波折的。首先在进行滤波器设计的时候就难住我了,我不知道该如何进行表写。虽然在《通信原理》的P148有进行说明,但我未能成功的实现。之后,我有又在CSDN中进行搜索,找了一些有关滤波器设计的博客进行查看。但对我而言,很多都还是看不懂。最后终于看到可以用matlab自带的fdatool工具箱进行编写,同时该博客还提供了如何生成升余弦滚降滤波器的方法。我就用fdatool进行处理,并导出了.mat文件。另一个难点是我成功的完成了整个系统,我查看生成的比特流和还原的比特流,发现二者很相似。但发现误码率却高达50%—60%,高的离谱。我后面在图窗使用它的数据游标,发现波形整体向后偏移了一位,又将实验频谱向前移动了一位。才成功了,但我查阅了很多资料也没有找到原因。总之,个人还是对本次实验比较满意的,它加深了我对通信中的数字基带通信系统的基本认知,锻炼了我编写matlab代码的能力。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。