目录一、实验项目二、设计思路三、使用的matlab函数声明四、各模块设计(包括代码、流程图) 1、主函数1 )流程图2. matlab代码2、信息1函数1 .流程图2 信息2函数1 .流程图codechange1函数1 .流程图2. matlab代码5、sampling函数1 .流程图2. matlab代码6、re_signal函数1 .流程图
一、实验项目
基带传输系统:尝试传输的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、信息1 (n )生成0,1的比特流
2、生成信息2 (n )传输波形
3、codechange (信号,n )进行码型转换
4、过滤器调用fdatool设计的过滤函数进行过滤
5、wgn生成噪声信号
6、sampling(signal,n,n )进行抽样判决
7、re_signal(signal,n )进行码型逆变换
8、绘制并显示draw(n,n,signal0,signal1,…)。
9、SSS (信号,n )用于补偿时域偏移
三、使用的matlab函数声明1、wgn用于产生高斯白噪声
调用格式:
wgn(m,n,power )。
m、n是开始、结束的信号
电源是设定的噪音的数据库
2、过滤
调用格式:
过滤器(num,1,signal ) )。
Num是由FDATOOL生成的滤波器系数
1是分子
Signal是要过滤的函数
3、软驱工具箱
生成正弦曲线滚降滤波器
4、plot函数
为了画画,采用线性坐标
5、axis函数
设定当前坐标区域的范围
6、figure函数
生成新窗口
7、title函数
用于生成图窗口的名称
8、subplot函数
将当前窗口分割为mn的网格,在p指定的位置创建坐标区域。
示例: subplot(2、2、3 ) )。
当前窗口被划分为22网格,并在三个位置创建坐标区域。
四、各模块设计(包括代码、流程图) 1、主函数1 .流程图
2. matlab代码不在此提供,请参考流程图编写
2、信息1函数1 .流程图2. matlab代码function x=信息1 (n ) a=rand(N ) n; x=[]; forI=1:nifa(I )=0.5x )=0; elsex(I )=1; 结束3、信息2函数1 .流程图
2. matlab代码functionx=information2(n,n,signal ) x=[]; forI=1:nifsignal(I )==1 x=[x,Ones(1,n ) ]; else if信号(I )==0 x=[x,Zeros(1,n ) ]; else x=[x,Ones(1,n ).*(-1 ) ]结束结束结束4,编码1函数1 .流程图
2. matla
b代码 function change_signal=codechange1(signal,N)change_signal=[];cout=1;for i=1:N if signal(i)==1 change_signal(i)=cout; cout=-cout; else change_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]; else if signal(i)<-0.5 %当信号抽样值<-0.5,则信号恢复时函数为-1; sample_signal=[sample_signal,-1]; else %其余恢复为0; sample_signal=[sample_signal,0]; end endendend 6、re_signal函数 1. 流程图 2. matlab代码 function ss=re_siginal(signal,N)ss=[];for i=1:N if signal(i)==1 ss(i)=1; else if signal(i)==-1 ss(i)=1; else ss(i)=0; end endendend 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-1 xx(i)=signal(i+1);end 五、仿真及测试效果本次实验总共实验了30次,其误码率如下:
生成的AMI码和抽样判决生成的AMI码:
加入噪声的信号与滤波后的信号的对比:
生成的AMI码、噪声信号及加入的噪声信号的对比:
生成的比特流和复原的比特流的对比:
本次实验实验还是比较波折的。首先在进行滤波器设计的时候就难住我了,我不知道该如何进行表写。虽然在《通信原理》的P148有进行说明,但我未能成功的实现。之后,我有又在CSDN中进行搜索,找了一些有关滤波器设计的博客进行查看。但对我而言,很多都还是看不懂。最后终于看到可以用matlab自带的fdatool工具箱进行编写,同时该博客还提供了如何生成升余弦滚降滤波器的方法。我就用fdatool进行处理,并导出了.mat文件。另一个难点是我成功的完成了整个系统,我查看生成的比特流和还原的比特流,发现二者很相似。但发现误码率却高达50%—60%,高的离谱。我后面在图窗使用它的数据游标,发现波形整体向后偏移了一位,又将实验频谱向前移动了一位。才成功了,但我查阅了很多资料也没有找到原因。总之,个人还是对本次实验比较满意的,它加深了我对通信中的数字基带通信系统的基本认知,锻炼了我编写matlab代码的能力。