1、 1 洗手 洗手 洗手 通信原理课程实验报告 洗手 洗手 洗手 洗手 基于 MATLAB 的 DPSK 通信系统仿真 洗手 洗手 洗手 洗手 洗手 院系 : b eef 洗手 班级 : b eef 洗手 学号 : b eef 洗手 姓名 : b eef 洗手 教师 : b eef 洗手 洗手 洗手 洗手 洗手 2012 年 12 月 7 日 洗手 洗手 目录 洗手 洗手 1 设计题目 3洗手 2 设计要求 3洗手 3 设计原理 3洗手 3.1 DPSK 调制 3洗手 2 3.2 DPSK 解调 4洗手 4 设计流程 5洗手 5 代码实现 5洗手 5.1 基带信号的获取 5洗手 5.2 差分编码
2、 6洗手 5.3 DPSK 调制 7 洗手 5.4 AWGN 信道 8洗手 5.5 限噪处理 8洗手 5.6 差分相干解调 9洗手 5.4 AWGN 信道 11洗手 5.7 功率谱密度图的绘制 洗手 6 测试结果 12洗手 6.1 调制解调正确性的测试 12洗手 6.2 系统抗噪性能的测试 14洗手 7 总结 17洗手 8 心得体会 17洗手 附 : beef完整代码 18洗手 洗手 洗手 洗手 洗手 洗手 洗手 3 洗手 洗手 1 设计题目 洗手 用 MATLAB 仿真 DPSK 通信系统 洗手 2 设计要求 洗手 基本参数如下 : beef洗手 Fc=1800Hz 洗手 Rb=1200bp
3、s 洗手 考虑加入 AWGN 信道 , 吃饭 Eb/N0=20dB 洗手 自定义一小段信息序列 洗手 结果要求 : beef洗手 绘制各 阶段信号波形 洗手 绘制信号的 PSD 洗手 3 设计原理 洗手 二进制差分相移键控常简称为二相相对调相 , 吃饭 记为 2DPSK。 洗手 它不是利用载波相位的绝对数值传送数字信息 , 吃饭 而是用前后码元的相对载波相位值传送数字信息 。 洗手 所谓相对载波相位是只本码元初相与前一码元初相之差 。 洗手洗手 3.1 DPSK 调制 洗手 DPSK 方式即是利用前后相邻码元的相对载波相位值去表示数字信息的一种方式 。 洗手 例如 ,吃饭 假设相位值用相位偏移
4、 表示 (定义为本码元初相与前一码元初相只差) , 吃饭 并设 洗手 = 数字信息 1 洗手 =0数字信息 0 洗手 则数字信息序列与 2DPSK 信号的码元相位关系可举例表示如如下 : beef洗手 数字信息 : beef 0 0 1 1 1 0 0 1 0 1 洗手 2DPSK 信号相位 : beef 0 0 0 0 0 0 洗手 或 0 0 0 0 0 洗手 画出的 2PSK 及 DPSK 信号的波形如图 3-1 所示 。 洗手洗手 洗手 图 3-1 2PSK 及 2DPSK 信号的波形 洗手 2DPSK 的产 生基本类似于 2PSK, 吃饭 只是调制信号需要经过码型变换 , 吃饭 将绝
5、对码变为相对码 。4 洗手 2DPSK 产生的原理框图如图 2-2 所示 1, 吃饭 图( a)为模拟调制法 , 吃饭 图( b)为键控法 。 洗手洗手 洗手 (a) 模拟调制法 (b) 键控法 洗手 图 3-2 2DPSK 信号的调制原理图 洗手 从上面分析可见 , 吃饭 无论接收信号是 2DPSK 还是 2PSK 信号 , 吃饭 单从接收端看是区分不开的 。 洗手因此 2DPSK 信号的功率谱密度和 2PSK 信号的功率谱密度是完全一样的 。 洗手洗手 3.2 DPSK 解调 洗手 DPSK 信号可以采用相干解调法(极性比较法)和差分相干解调法(相位比较法) 。 洗手 本次设计采用差分相干
6、解调法 , 吃饭 图 3-3 为差分相干解调法原理图 。 洗手洗手 差分相干解调法的思想是直接比较前后码元的相位差 。 洗手 由于此时的解调已同时完成了码变换作业 , 吃饭 故无需另加码变换器 。 洗手 由 于这种解调方法又无需专门的相干载波 , 吃饭 故事一种比较实用的方法 。 洗手洗手 洗手 图 3-3 2DPSK 差分相干解调解调原理图 洗手 4 设计流程 洗手 洗手 设计流程如下框图所示 , 吃饭 箭头上的信号表示实际传递的信号名称 。 洗手洗手 洗手 bn dn mod modz 洗手 差分编码 DPSK 调制 AWGN 信道 BPF 洗手 洗手 洗手 对比 r 洗手 洗手 Bn m
7、t demod 洗手 抽样判决 LPF 延时相乘 洗手 洗手 洗手 洗手 差分相干解调 洗手 5 代码实现 洗手 5 5.1 基带信号的获取 洗手 利用 MATLAB 自带函数 randint 产生定长度的二进 制随机序列 sign, 吃饭 为了将sign 转换为单极性 NRZ 信号 , 吃饭 要对 sign 的每个随机码进行 T 点增样 , 吃饭 最后得到基带数字信号 bn 洗手 洗手 代码实现如下 : beef洗手 % 初始参量定义 %洗手 fc=1800;b e ef %载波频率 洗手 Rb=1200;b e ef %基带数据传输速率 洗手 Tb=1/Rb;b e ef洗手 T=50;b
8、 e ef %每个 Tb 内进行的增样点数 洗手 M=8;b e ef %原始码字序列的长度 洗手 N=9;b e ef %差分码字序列的长度 洗手 sign=randint(1,M);beef %产生长度为 M的随机二进制序列 洗手 SNR=20;b e ef %信噪比 洗手 % 对 sign 进行 T点增样后的基带数字信号 %洗手 bn=;b e ef 洗手 for n=1:M 洗手 if sign(n)=0;beef洗手 F=zeros(1,T);beef洗手 else 洗手 F=ones(1,T);beef洗手 end 洗手 bn=bn,F;beef洗手 end 洗手 洗手 绘图 洗手
9、 洗手 洗手 5.2 差分编码 洗手 设差分码 cfm(二进制序列) , 吃饭 差分编码原理为 cfmn = bn xor cfmn-1洗手 例如 , 吃饭 如果 sign= 1 0 0 1 0 0 1 1 ,那么 cfm=1 0 0 0 1 1 1 0 1 ;beef洗手 同时 , 吃饭 还要对得到的差分码 cfm 进行 T 点增样 , 吃饭 得到差分信号 dn(单极性NRZ 信号) 。 洗手洗手 洗手 代码实现如下 : beef洗手 6 % 差分编码得到差分码 cfm %洗手 cfm=;b e ef洗手 cfm(1)=1;beef %设 cfm 的初值为 1 洗手 for i=1:M 洗手
10、 cfm(i+1)=xor(sign(i),cfm(i);beef洗手 end 洗手 % 对 cfm 进行 T点 增样 %洗手 dn=;b e ef %差分信号 洗手 for n=1:N;b e ef洗手 if cfm(n)=0;beef 洗手 A=zeros(1,T);beef %每个 symbol 进行 T点增样 洗手 else 洗手 A=ones(1,T);beef 洗手 end 洗手 dn=dn A;b e ef 洗手 end 洗手 洗 手 绘图 洗手 洗手 洗手 5.3 DPSK 调制 洗手 DPSK 调制由于 PSK 调制的主要原因是 DPSK 调制解决了“不确定性反相”问题 ,
11、吃饭 即 DPSK 信号通过相邻时隙载波相位的变化与否来“携带”信息 。 洗手洗手 在代码实现这一步的过程中 , 吃饭 我假设了一个相邻时隙相位差变量 delta, 吃饭 易知 ,吃饭 当 sign 的一个码字为 1时 , 吃饭 delta=pi, 吃饭 否则 delta=0.通过 delta 就能反映前后时隙的载波相位变化 , 吃饭 进而实现 DPSK 调制 。 洗手洗手 洗手 代码实现如下 : beef洗手 % DPSK 调制 %洗手 t=Tb/T:Tb/T:Tb;beef %对 Tb=1/Rb 间隔进行 T点划分 洗手 mod=cos(2*fc*pi*t);beef %调制后的信号 洗手
12、 delta=0;b e ef %相位差 洗手 for n=1:M 洗手 if sign(n)=1;beef 洗手 delta=delta+pi;beef 洗手 else 洗 手 7 delta=delta;beef 洗手 end 洗手 c2=cos(2*fc*pi*t+delta);beef洗手 mod=mod c2;b e ef 洗手 end 洗手 洗手 绘图 洗手 洗手 洗手 5.4 AWGN 信道 洗手 利用 MATLAB 自带函数 awgn 实现对已调信号 mod 进行加噪处理 。 洗手 洗手 洗手 代码实现如下 : beef洗手 % 调制信号过高斯白噪声的信道 %洗手 modz=a
13、wgn(mod,SNR);b eef %过 AWGN 信道 洗手 洗手 绘图 洗手 洗手 洗手 5.5 限噪处理 洗手 利用 MATLAB 自带函数 fir1 构造 FIR I 型 带通滤波器 , 吃饭 使其对准信号频带 ,吃饭 让信号几乎无失真通过 , 吃饭 同时抑制带外噪声 , 吃饭 此处取 BPF 的通带宽度为 2*Rb,吃饭 中心频率为 fc。 洗手 (由于设计的是数字滤波器 , 吃饭 所以不要忘记对频率进行归一化处理) 洗手 值得注意的是 , 吃饭 由于设计的滤波器是 100 阶 , 吃饭 所以通过 BPF 后的信号会有出现接近于一个 symbol 宽度的时延 。 洗手 所以在信号
14、modz 接入 BPF 前 , 吃饭 要对其进行一个拓宽处理 , 吃饭 对 modz 最后一个 symbol 进行复制 , 吃饭 得到 modz_broad, 吃饭 再接入到 BPF 上 。 洗手洗手 8 同时 , 吃饭 不要忘记对从 BPF 出来的信号 r0 进行截取 , 吃饭 因为 r0 的第一个 symbol是滤波器时延带来的 。 洗手洗手 洗手 代码实现如下 : beef洗手 % BPF %洗手 modz_broad=modz modz(N-1)*T+1:N*T);beef洗手 fs=Rb*T;b e ef洗手 hBPF=fir1(100,2*pi*fc-Rb fc+Rb/fs);be
15、ef洗手 r0=filter(hBPF,1,modz_broad);beef洗手 r=r0(T+1:(N+1)*T);beef %对 r0 进行截取 洗手 洗手 绘图 洗手 洗手 洗手 5.6 差分相干解调 洗手 差分相干解调的核心思想是比较两个相邻时隙上信号的相位 , 吃饭 从而直接还原出信号 Bn, 吃饭 分为三步 : bef洗手 (1) 延时相乘 洗手 洗手 代码实现如下 : b eef洗手 % 延时相乘 %洗手 r_shift=r(T+1:N*T);beef洗手 demod=;beef洗手 for i=1:M*T;b e ef洗手 a=r_shift(i) .* r(i);b e ef
16、洗手 demod=demod a;b eef洗手 end 洗手 洗手 绘图 洗手 9 洗手 洗手 (2) LPF 洗手 利用 MATLAB 自带函数 fir1 构造 FIR I 型 低通滤波器 , 吃饭 此处取 LPF 的通带宽度为 Rb。 洗手 洗手 同 BPF 一样 , 吃饭 由于设计的滤波器是 100 阶 , 吃饭 所以通过 LPF 后的信号会有出现接近于一个 symbol宽度的时延 。 洗手 所以要对信号 demod 接入 LPF 前 , 吃饭 进行拓宽处理 , 吃饭 得到 demod_broad, 吃饭 再接入到 LPF 上 。 洗手洗手 同样 , 吃饭 不要忘记对从 LPF 出来的
17、信号 mt0 进行截取 , 吃饭 因为 mt0 的第一个 symbol是滤波器时延带来的 。 洗手洗手 洗手 代码实现如下 : beef洗手 % LPF %洗手 demod_broad=demod demod(M-1)*T+1:M*T)洗手 hLPF=fir1(100,2*pi*Rb/fs);b eef洗手 mt0=filter(hLPF,1,demod_broad);beef洗手 mt=mt0(T+1:(M+1)*T);beef %对 mt0 进行截取 洗手 洗手 绘图 洗手 洗手 洗手 (3) 抽样判决 洗手 实现思想 : bef对 mt 一个 symbol 的 T 个采样点进行求和 ,
18、吃饭 如果 sum 大于 0, 吃饭 则Bn 对应这个 symbol内的所有点的值为 1, 吃饭 反之为 0.洗手 洗手 代码实现如下 : beef洗手 10 % 抽样判决 %洗手 Bn=zeros(1,M*T);beef 洗手 for i=1:M;b e ef洗手 if sum( mt( (i-1)*T+1 :i*T ) ) 0;b eef 洗手 Bn(i-1)*T+1:i*T)=0;beef 洗手 else 洗手 Bn(i-1)*T+1:i*T)=1;beef 洗手 end 洗手 end 洗手 洗手 绘图 洗手 洗手 从上图可知 , 吃饭 最终经 DPSK 通信系统调制解调后得到的信号 B
19、n 与一开始 的基带数字信号 bn 完全一致 。 洗手洗手 洗手 5.7 功率谱密度图的绘制 洗手 采用 Welch 法绘制 DPSK 调制信号 mod 的功率谱密度图( Power spectrum magnitude)。 洗手 选择适当的窗函数 w(n), 吃饭 并再周期图计算前直接加进去 , 吃饭 加窗的优点是无论什么样的窗函数均可使谱估计非负 。 洗手 二是在分段时 , 吃饭 可使各段之间有重叠 , 吃饭 这样会使方差减小 。 洗手 本设计中尝试了三种窗 , 吃饭 分别是矩形窗 、 bef海明窗和Blacman 窗 。 洗 手洗手 洗手 代码实现如下 : beef洗手 % PSD %洗
20、手 window=boxcar(100);beef %矩形窗 洗手 window1=hamming(100);beef %海明窗 洗手 window2=blackman(100);beef %Blackman 窗 洗手 Nfft=N*T*Rb;beef洗手 noverlap=0;beef %数据无重叠 洗手 range=onesided;beef %计算单边带功率谱密度 洗手 Pxx,f=pwelch(mod,window,noverlap,Nfft,fs,range);beef 洗手 Pxx1,f=pwelch(mod,window1,noverlap,Nfft,fs,range);beef 洗手 Pxx2,f=pwelch(mod,window2,noverlap,Nfft,fs,range);beef 洗手 洗手 figure(3)洗手