目录
一、实验项目二、设计思路三、使用的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代码的能力。