摘要

在现代通信技术中,因为基于数字信号的数据传输优于模拟信号的传输,所以数字信号的传输显得越来越重要。本课程设计先对2DPSK调制与解调的基本原理进行了阐述,并根据相干解调的原理,利用MATLAB软件,设计了调制解调的仿真程序,结合可视化对2DPSK的调制与解调的各个过程进行分析。根据MATLAB随机产生的10000个随机宽度为1的码元作为信源,对其进行载波调制,将信源在高斯白噪声信道进行传输,在接收端,先进行带通滤波,再相干载波进行解调,然后经过低通滤波器,最后进行抽样判决与码反变换恢复出原码,得到结果,由系统的输入和解调恢复输出波形图可以看出,仿真效果前后波形一致,仅仅出现了时延差,所得到的效果符合预期,完成了所给任务的要求。

关键词:2DPSK 相干解调MATLAB仿真相干解调

  1. 引言

无线通信技术在现代社会中扮演着重要的角色,随着通信技术的不断发展,2DPSK调制与解调技术被广泛应用于数字通信系统中。2DPSK调制与解调技术是一种数字调制解调技术,它通过改变载波的相位来传输数字信息,从而实现高效、可靠的数据传输[1]。

虽然近距离时我们可以利用数字基带信号直接传输,但是进行远距离传输时必须将基带信号调制到高频处。为了使数字信号能够在信道中传输,要求信道应具有高通形式的传输特性。然而,在实际信道中,大多数信道具有带通传输特性,数字信号不能直接在这种带通传输特特性的信道中传输,因此,必须用数字信号对载波进行调制,产生各种已调信号。我们通常采用数字键控的方法来实现数字调制信号,所以又将其称为键控法。当调制信号采用二进制数字信号时,这种调制就被称为二进制数字调制。最常用的二进制数字调制方式有二进制振幅键控、二进制移频键控和二进制移相键控。其中二进制移相键控又包括两种方式:绝对移相键控(2PSK)和相对(差分)移相方式(2DPSK )。在二进制数字调制中,当正弦载波的相位随二进制数字基带信号离散变化时,就产生了二进制移相键控,即所谓的绝对移相键控(2PSK)。虽然绝对移相键控的实现方法较为简单,但是却存在一个缺点,即我们所说的倒“

”现象。因此,在实际中一般不采用2PSK 方式,而采用2DPSK方式对数字信号进行调制解调[2]。

在本次课程设计中,我们将基于MATLAB软件平台,设计并实现2DPSK调制与解调技术的原理,以及如何进行调制与解调过程。具体来说,我们将探讨2DPSK调制与解调技术的基本原理,包括数字信号的采样与量化、信道编码、符号映射、调制与解调过程等。本文主要讨论关于2DPSK的调制解调。并将其与MATLAB结合进行研究和仿真。

  1. 设计内容及要求

  1. 设计内容

用MATLAB产生独立等概信源,码元数N=10000,码元宽度Ts=1。对信源进行二进制差分相移键控2DPSK调制,将调制信号送入高斯白噪声信道。载波信号为:A·cos(2πfct),其中振幅A、载频fc=2自行设定。信道中加入高斯白噪声,解调器输入信噪比自行设定,接收端采用相干解调法/非相干解调法进行解调。用MATLAB软件对上述条件下2DPSK调制解调系统进行仿真分析。

  1. 设计要求

1、掌握2DPSK调制解调系统的原理和设计方法。

2、用MATLAB绘制2DPSK调制信号的时域波形和功率谱。

3、用MATLAB绘制高斯白噪声信号的时域波形和功率谱。

4、用MATLAB分别绘制2DPSK信号经过带通滤波后信号、解调输出信号的时域波形和功率谱。

5、用MATLAB绘制2DPSK调制解调系统在AWGN信道中的误码率曲线。

6、对仿真结果进行分析,并调整参数,观察仿真结果的变化。

  1. 设计原理

  1. 2DPSK的基本原理

  1. 2DPSK的调制原理

  1. 2DPSK的解调原理

  1. 仿真设计方案

  1. 2DPSK调制与解调的总体的设计

  1. 信号产生模块:采用randi函数产生一组值为0 或 1 的随机二进制数据,作为通信仿真系统的数字基带信号输入。

  1. 差分编码模块:将信号源产生的数字基带信号进行差分编码。

  1. 2DPSK调制模块:对双极性不归零码进行绝对调相,产生信道中传输的2DPSK信号。

  1. 信道模块:为模拟井下复杂通信环境对井下短程通信的影响,信道模块加入高斯白噪声(AWGNChannel),即在输入信号中叠加高斯白噪声,为简单起见,假设信号在信道传输中没有时间或相位的延迟。

  1. 带通滤波模块:采用切比雪夫滤波器进行滤除带外噪声。

  1. 解调模块:2DPSK信号的解调采用载波相干解调。直接用与载波同频同相的正弦信号作为载波同步输出的相干载波.解调后的信号经相关接收,抑制与载波无关的噪声及干扰,使其在指定的抽样判决时刻有最大的信噪比。

  1. 低通滤波模块:采用低通滤波器进行对高频分量的滤除。

  1. 抽样判决模块:为无失真地恢复输入信号,解调后的基带信号必须要经过抽样判决器的判决。由于本文假设没有传输延迟,其抽样判决的位同步定时脉冲可用一个脉冲源替代。

  1. 差分解码模块:差分译码器把抽样判决输出的相对码转换成绝对码,需要注意的是,差分编码器和差分解码器的初始状态应该一致。

  1. 比较和显示模块:一是输入数字基带信号与解码恢复信号的比较和显示,二是输入基带信号与恢复信号之间误码率的分析与显示。

  1. 2DPSK具体模块设计

  1. 仿真结果分析


  1. 调制过程的结果及分析

  1. 信道结果及分析


  1. 解调过程的结果及分析

  1. 误码率结果

  1. 总结

在利用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)')


Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐