赞
踩
摘要
在现代通信技术中,因为基于数字信号的数据传输优于模拟信号的传输,所以数字信号的传输显得越来越重要。本课程设计先对2DPSK调制与解调的基本原理进行了阐述,并根据相干解调的原理,利用MATLAB软件,设计了调制解调的仿真程序,结合可视化对2DPSK的调制与解调的各个过程进行分析。根据MATLAB随机产生的10000个随机宽度为1的码元作为信源,对其进行载波调制,将信源在高斯白噪声信道进行传输,在接收端,先进行带通滤波,再相干载波进行解调,然后经过低通滤波器,最后进行抽样判决与码反变换恢复出原码,得到结果,由系统的输入和解调恢复输出波形图可以看出,仿真效果前后波形一致,仅仅出现了时延差,所得到的效果符合预期,完成了所给任务的要求。
关键词:2DPSK 相干解调MATLAB仿真相干解调
无线通信技术在现代社会中扮演着重要的角色,随着通信技术的不断发展,2DPSK调制与解调技术被广泛应用于数字通信系统中。2DPSK调制与解调技术是一种数字调制解调技术,它通过改变载波的相位来传输数字信息,从而实现高效、可靠的数据传输[1]。
虽然近距离时我们可以利用数字基带信号直接传输,但是进行远距离传输时必须将基带信号调制到高频处。为了使数字信号能够在信道中传输,要求信道应具有高通形式的传输特性。然而,在实际信道中,大多数信道具有带通传输特性,数字信号不能直接在这种带通传输特特性的信道中传输,因此,必须用数字信号对载波进行调制,产生各种已调信号。我们通常采用数字键控的方法来实现数字调制信号,所以又将其称为键控法。当调制信号采用二进制数字信号时,这种调制就被称为二进制数字调制。最常用的二进制数字调制方式有二进制振幅键控、二进制移频键控和二进制移相键控。其中二进制移相键控又包括两种方式:绝对移相键控(2PSK)和相对(差分)移相方式(2DPSK )。在二进制数字调制中,当正弦载波的相位随二进制数字基带信号离散变化时,就产生了二进制移相键控,即所谓的绝对移相键控(2PSK)。虽然绝对移相键控的实现方法较为简单,但是却存在一个缺点,即我们所说的倒“
”现象。因此,在实际中一般不采用2PSK 方式,而采用2DPSK方式对数字信号进行调制解调[2]。
在本次课程设计中,我们将基于MATLAB软件平台,设计并实现2DPSK调制与解调技术的原理,以及如何进行调制与解调过程。具体来说,我们将探讨2DPSK调制与解调技术的基本原理,包括数字信号的采样与量化、信道编码、符号映射、调制与解调过程等。本文主要讨论关于2DPSK的调制解调。并将其与MATLAB结合进行研究和仿真。
用MATLAB产生独立等概信源,码元数N=10000,码元宽度Ts=1。对信源进行二进制差分相移键控2DPSK调制,将调制信号送入高斯白噪声信道。载波信号为:A·cos(2πfct),其中振幅A、载频fc=2自行设定。信道中加入高斯白噪声,解调器输入信噪比自行设定,接收端采用相干解调法/非相干解调法进行解调。用MATLAB软件对上述条件下2DPSK调制解调系统进行仿真分析。
1、掌握2DPSK调制解调系统的原理和设计方法。
2、用MATLAB绘制2DPSK调制信号的时域波形和功率谱。
3、用MATLAB绘制高斯白噪声信号的时域波形和功率谱。
4、用MATLAB分别绘制2DPSK信号经过带通滤波后信号、解调输出信号的时域波形和功率谱。
5、用MATLAB绘制2DPSK调制解调系统在AWGN信道中的误码率曲线。
6、对仿真结果进行分析,并调整参数,观察仿真结果的变化。
信号产生模块:采用randi函数产生一组值为0 或 1 的随机二进制数据,作为通信仿真系统的数字基带信号输入。
差分编码模块:将信号源产生的数字基带信号进行差分编码。
2DPSK调制模块:对双极性不归零码进行绝对调相,产生信道中传输的2DPSK信号。
信道模块:为模拟井下复杂通信环境对井下短程通信的影响,信道模块加入高斯白噪声(AWGNChannel),即在输入信号中叠加高斯白噪声,为简单起见,假设信号在信道传输中没有时间或相位的延迟。
带通滤波模块:采用切比雪夫滤波器进行滤除带外噪声。
解调模块:2DPSK信号的解调采用载波相干解调。直接用与载波同频同相的正弦信号作为载波同步输出的相干载波.解调后的信号经相关接收,抑制与载波无关的噪声及干扰,使其在指定的抽样判决时刻有最大的信噪比。
低通滤波模块:采用低通滤波器进行对高频分量的滤除。
抽样判决模块:为无失真地恢复输入信号,解调后的基带信号必须要经过抽样判决器的判决。由于本文假设没有传输延迟,其抽样判决的位同步定时脉冲可用一个脉冲源替代。
差分解码模块:差分译码器把抽样判决输出的相对码转换成绝对码,需要注意的是,差分编码器和差分解码器的初始状态应该一致。
比较和显示模块:一是输入数字基带信号与解码恢复信号的比较和显示,二是输入基带信号与恢复信号之间误码率的分析与显示。
在利用Matlab中的完成的2DPSK调制解调系统仿真设计中,由于信道中引入了适当的高斯白噪声,还有接收端带通滤波器、低通滤波器的参数设置问题,使得仿真存在一定的时延差。
本设计中采用了相干解调的设计方式,接收端需要提供一个与发射端调制载波同频同相的相干载波,这样才能保证载波同步。
最终恢复出来的原码与生成的原码符合,结果良好,在本次课程设计中,经过不断的查阅资料,查阅参考代码,最终完成了课程设计,学到了很多,也对通信原理有了更多的认识,对MATLAB的操作也更加熟练。
[1] 曹雪虹,杨洁,童莹著. Matlab/SystemView通信原理实验与系统仿真[M] 清华大学出版社. 2022.
[2] 陈树新,于龙强,李勇军著. 通信原理学习辅导与实验指导[M]. 清华大学出版社. 2022.
[3] 彭燕妮著. 通信原理实验教程[M]. 中国铁道出版社. 2022.
[4] 樊昌信,曹丽娜著. 通信原理(第7版)[M]. 国防工业出版社. 2012.
[5] 刘佳,许海霞,陈宁夏,肖明明著. 通信原理实验教程[M]. 中山大学出版社. 2016.
[6] 达新宇,甘忠辉,薛凤凤,刘晋东著. 通信原理实验与课程设计[M]. 电子工业出版社. 2016.
[7] 王福昌,屈代明著. 通信原理(第2版)[M]. 清华大学出版社. 2015.
所得结果
- clear all; % 清除所有变量
- close all; % 关闭所有窗口
- clc; % 清屏
- %% 基本参数
- M=10000; % 产生码元数
- L=100; % 每码元复制L次,每个码元采样次数
- Ts=1; % 每个码元的宽度,即码元的持续时间
- Rb=1/Ts; % 码元速率1K
- dt=Ts/L; % 采样间隔
- TotalT=M*Ts; % 绝对码总时间
- t=0:dt:TotalT-dt; % 时间1
- TotalT2=(M+1)*Ts; % 相对码总时间
- t2=0:dt:TotalT2-dt; % 时间2
- Fs=1/dt; % 采样间隔的倒数即采样频率
-
- %% 产生单极性波形
- wave=randi([0,1],1,M); % 产生二进制随机码,M为码元个数
-
- %% 绝对码变相对码
- wave2=ones(1,M+1); % 产生1*(M+1)的全1行向量
- %% 相对码第一个参考值为1,相对码b(n+1)=绝对码a(n)和相对码b(n)做异或
- for k = 2:M+1
- wave2(k) = xor(wave(k-1),wave2(k-1));%生成相对码
- end
- fz=ones(1,L); % 定义复制的次数L,L为每码元的采样点数
- x1=wave(fz,:); % 将原来wave的第一行复制L次,称为L*M的矩阵
- juedui=reshape(x1,1,L*M); % 产生单极性不归零矩形脉冲波形,将刚得到的L*M矩阵,按列重新排列形成1*(L*M)的矩阵
- x2=wave2(fz,:); % 将原来wave2的第一行复制L次,称为L*M的矩阵
- jidai=reshape(x2,1,L*(M+1));% 产生单极性不归零矩形脉冲波形,将刚得到的L*(M+1)矩阵,按列重新排列形成1*(L*(M+1))的矩阵
-
- %% 单极性变为双极性
- % 基带信号变为双极性即jidai为1的时候,jidai为1;jidai为0的时候,jidai为-1
- for n=1:length(jidai)
- if jidai(n)==1
- jidai(n)=1;
- else
- jidai(n)=-1;
- end
- end
- %% DPSK调制
- fc=4;
- zb=sin(2*pi*fc*t2); % 载波
- dpsk=jidai.*zb; % DPSK的模拟调制
- figure(1); % 绘制第1幅图
- subplot(311); % 窗口分割成3*1的,当前是第1个子图
- plot(t,juedui,'LineWidth',2);% 绘制基带码元波形,线宽为2
- title('绝对码信号波形'); % 标题
- xlabel('时间/s'); % x轴标签
- ylabel('幅度'); % y轴标签
- axis([0,10,-1.1,1.1]) % 坐标范围限制
-
- subplot(312); % 窗口分割成3*1的,当前是第2个子图
- plot(t2,jidai,'LineWidth',2);% 绘制基带码元波形,线宽为2
- title('相对码信号波形'); % 标题
- xlabel('时间/s'); % x轴标签
- ylabel('幅度'); % y轴标签
- axis([0,10,-1.1,1.1]) % 坐标范围限制
-
- subplot(313) % 窗口分割成3*1的,当前是第3个子图
- plot(t2,dpsk,'LineWidth',2);% 绘制DPSK的波形
- title('2DPSK信号时域波形') % 标题
- axis([0,10,-1.1,1.1]); % 坐标范围限制
- xlabel('时间/s;'); % x轴标签
- ylabel('幅度'); % y轴标签
- %% 画DPSK的功率谱
- figure(2);
- [r1,lags1]=xcorr(dpsk); %做自相关
- f1=fftshift(fft(r1));%频谱校正
- x=((0:length(f1)-1)*200/length(f1)-100)/2; %x轴
- y=abs(f1);
- plot(x,y);grid on;
- title('2DPSK信号功率谱')
- xlabel('f/Hz');
- ylabel('幅度');
-
- %% 信号经过高斯白噪声信道
- %产生高斯白噪声
- figure(3);
- normal=0.1*randn(1,201); %产生均值为0,方差为0.01的高斯白噪声
- [r,lags]=xcorr(normal); %做自相关
- subplot(2,1,1);plot(normal);grid on;
- axis([0 100 -0.5 0.5]);title('高斯白噪声');
- xlabel('时间');
- ylabel('幅度');
- f=fftshift(fft(r));%频谱校正
- x=((0:length(f)-1)*200/length(f)-100)/2; %x轴
- y=abs(f);
- subplot(2,1,2);plot(x,y);grid on;
- axis([-100 100 -20 20]);title('高斯白噪声功率谱');
- xlabel('f/Hz');
- ylabel('幅度');
-
- tz=awgn(dpsk,15); % 信号dpsk中加入白噪声,信噪比为SNR=15dB
- figure(4); % 绘制第2幅图
- subplot(211); % 窗口分割成2*1的,当前是第1个子图
- plot(t2,tz,'LineWidth',2); % 绘制DPSK信号加入白噪声的波形
- axis([0,10,-1.5,1.5]); % 坐标范围设置
- title('通过高斯白噪声信道后的时域信号');% 标题
- xlabel('时间/s'); % x轴标签
- ylabel('幅度'); % y轴标签
-
- %% 带通滤波器的设计
- wavNum = 20;
- N_sample = 4000;
- wp=[wavNum-5 wavNum+5]*2/N_sample;
- ws=[wavNum-10 wavNum+10]*2/N_sample;
- rp=3;
- rs=30;
- [N,wn]=cheb2ord(wp,ws,rp,rs);
- [b,a]=cheby2(N,rp,wn,'bandpass');%切比雪夫带通滤波
- sig_bandpass = filter(b,a,tz);
- subplot(212);
- plot(t2,sig_bandpass);
- title('通过带通滤波器后的信号时域波形');
- axis([0,10,-2,2]);%经过带通滤波器之后的信号
- xlabel('时间/s'); % x轴标签
- ylabel('幅度'); % y轴标签
- figure(5)
- subplot(211);
- plot(t2,sig_bandpass);
- title('通过带通滤波器后的信号时域波形');
- axis([0,10,-2,2]);%经过带通滤波器之后的信号
- xlabel('时间/s'); % x轴标签
- ylabel('幅度'); % y轴标签
- [g,lags]=xcorr(sig_bandpass); %做自相关
- f=fftshift(fft(g));%频谱校正
- x=((0:length(f)-1)*200/length(f)-100)/2; %x轴
- y=abs(f);
- subplot(212);plot(x,y);grid on;
- % axis([-100 100 -20 20]);
- title('通过带通滤波器后的信号功率谱图');
- xlabel('f/Hz');
- ylabel('幅度');
- %% 解调部分
- tz=sig_bandpass.*zb; % 相干解调,乘以相干载波
- figure(6);
- plot(t2,tz,'LineWidth',1) % 绘制乘以相干载波后的信号
- axis([0,10,-1.5,1.5]); % 设置坐标范围
- title('乘以相干载波后时域信号')% 标题
- xlabel('时间/s'); % x轴标签
- ylabel('幅度'); % y轴标签
- %% 加噪信号经过滤波器
- % 低通滤波器设计
- fp=2*Rb; % 低通滤波器截止频率,乘以2是因为下面要将模拟频率转换成数字频率wp=Rb/(Fs/2)
- b=fir1(30, fp/Fs, boxcar(31));% 生成fir滤波器系统函数中分子多项式的系数
- % fir1函数三个参数分别是阶数,数字截止频率,滤波器类型
- % 这里是生成了30阶(31个抽头系数)的矩形窗滤波器
- [h,w]=freqz(b, 1,512); % 生成fir滤波器的频率响应
- % freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512
- lvbo=fftfilt(b,tz); % 对信号进行滤波,tz是等待滤波的信号,b是fir滤波器的系统函数的分子多项式系数
- figure(7); % 绘制第3幅图
- subplot(411); % 窗口分割成4*1的,当前是第1个子图
- plot(w/pi*Fs/2,20*log(abs(h)),'LineWidth',2); % 绘制滤波器的幅频响应
- title('低通滤波器的频谱'); % 标题
- xlabel('频率/Hz'); % x轴标签
- ylabel('幅度/dB'); % y轴标签
-
- subplot(412) % 窗口分割成4*1的,当前是第2个子图
- plot(t2,lvbo,'LineWidth',2);% 绘制经过低通滤波器后的信号
- axis([0,10,-1.1,1.1]); % 设置坐标范围
- title('经过低通滤波器后的信号');% 标题
- xlabel('时间/s'); % x轴标签
- ylabel('幅度'); % y轴标签
-
-
-
- %% 抽样判决
- k=0; % 设置抽样限值
- pdst=1*(lvbo>0); % 滤波后的向量 的每个元素和0进行比较,大于0为1,否则为0
- subplot(413) % 窗口分割成4*1的,当前是第3个子图
- plot(t2,pdst,'LineWidth',2) % 画出经过抽样判决后的信号
- axis([0,10,-0.1,1.1]); % 设置坐标范用
- title('经过抽样判决后的信号')% 标题
- xlabel('时间/s'); % x轴标签
- ylabel('幅度'); % y轴标签
-
- %% 相对码变绝对码
- yuanma=ones(1,L*M);
- for k=1:L*M-1
- yuanma(k)=xor(pdst(k),pdst(k+L));
- end
-
- %% 消除毛刺现象
- for k=1:L*M-2
- if (yuanma(k+1)~=yuanma(k) && yuanma(k+1)~=yuanma(k+2))
- yuanma(k+1)=yuanma(k);
- end
- end
-
- subplot(414) % 窗口分割成4*1的,当前是第4个子图
- plot(t,yuanma,'LineWidth',2)% 画出经过抽样判决后的信号
- axis([0,10,-0.1,1.1]); % 设置坐标范用
- title('解差分编码后的码元波形')% 标题
- xlabel('时间/s'); % x轴标签
- ylabel('幅度'); % y轴标签
-
- %% 绘制通过解调后的信号功率谱
- figure(8);
- subplot(211)
- plot(t2,lvbo,'LineWidth',2);% 绘制经过低通滤波器后的信号
- axis([0,10,-1.1,1.1]); % 设置坐标范围
- title('解调后信号的时域信号');% 标题
- xlabel('时间/s'); % x轴标签
- ylabel('幅度'); % y轴标签
- subplot(212)
- [r2,lags2]=xcorr(lvbo); %做自相关
- f2=fftshift(fft(r2));%频谱校正
- x2=((0:length(f2)-1)*200/length(f2)-100)/2; %x轴
- y2=abs(f2);
- plot(x2,y2);grid on;
- title('解调后信号功率谱');
- xlabel('f/Hz'); % x轴标签
- ylabel('幅度'); % y轴标签
- %% 画误码率曲线
- figure(9)
- r_dB = 0:0.1:15;
- r1 = 10.^(r_dB/10);
- pe = erfc(sqrt(r1));
- semilogy(r_dB,pe)%semilogy的作用是创建一个对数图
- grid on
- title('误码率曲线')% 标题
- ylabel('pe')
- xlabel('r (dB)')
-
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。