QPSK信号调制

本文最后更新于:2023年6月19日 晚上

b 测题目,由于学长写的代码有些步骤无法理解,而且代码不优雅,故重写之。

题目要求

  1. 源码信号为周期 63bits 的 m 序列, 源码比特速率(kbps) 数值上= 载波频率(kHz),数值范围 5—100,在数值范围内任取整数;
  2. 在 MATLAB 环境中编写 M 代码搭建 QPSK 调制系统模型;
  3. 观测基带时域波形、已调信号时域波形;
  4. 观测基带发射星座图;
  5. 观测已调信号的功率谱(优先)或频谱;

实验原理

比特率

比特率(bit rate)又称传信率、信息传输速率(简称信息速率,information rate)。其定义是:通信线路(或系统)单位时间(每秒)内传输的信息量,即每秒能传输的二进制位数,通常用 Rb 表示,其单位是比特/秒(bit/s 或 b/s,英文缩略语为 bps)。  
在二进制系统中,信息速率(比特率)与信号速率(波特率)相等,例如,当系统以每秒 50 个二进制符号传输时,信息速率为 50bit/s,信号速率也为 50Bd(波特)。在无调制的情况下,比特率等于波特率;采用调相技术时,比特率不等于波特率。通信系统的发送设备和接收设备必须在相同的波特率下工作,否则会出现帧同步错误。

波特率

波特率(Baud rate)又称传码率、码元传输速率(简称码元速率)、信号传输速率(简称信号速率,signaling rate)或调制速率。其定义是:通信线路(或系统)单位时间(每秒)内传输的码元(脉冲)个数;或者表示信号调制过程中,单位时间内调制信号波形的变换次数,通常用 RB 表示,单位是波特(Bd 或 Baud,前者规范)。如果每秒传输 1 个码元就称为 1Bd;如果 1 码元的时间长短为 200ms,则每秒可传输 5 个码元,那么码元速率(波特率)就是 5Bd。  
波特率(码元速率)并没有限定是何种进制的码元,所以给出波特率时必须说明这个码元的进制。对于 M 进制码元,比特率(信息速率)Rb 与波特率(码元速率)RB 的关系式为  
Rb=RB·lbM   
式中:lbM=log2M,表示 M 的以 2 为底的对数。显然,对于二进制码元,由于 lb2=1,所以 Rb=RB,即波特率与比特率在数值上相等,但单位不同,也即二者代表的意义不同。  
例如,波特率为 600Bd,则在二进制时,比特率也为 600bit/s;在四进制时,由于 lb4=2,所以比特率为 1200bit/s。可见,在一个码元中可以传送多个比特。

数据传输率

数据传输率(data transfer rate)又称数据传输速率、数据传送率。其定义是:通信线路(或系统)单位时间(每秒)内传输的字符个数;或者单位时间(每秒)内传输的码组(字块)数或比特数。其单位是字符/秒;或者码组/秒、比特/秒(可见,当数据传输率用“bit/s”作单位时,即等于比特率)。 所以它的单位在不同的应用中是不同的。 
 例如,在某计算机异步串行通信系统中,数据传输率为 960 字符/s,每个字符包括 1 个起始位、8 个数据位、1 个停止位,则对应的比特率为 10×960 位/s=9600 位/s=9600bit/s;因为是二进制编码,所以对应的波特率也为 9600Bd。可见,在我们平时用的串口通信中,波特率是 9600Bd,其实比特率也是 9600bps,因为默认就是 2 进制,波特率和比特率就是 M 进制的差别。

采样频率 fs

定义:每秒从连续信号中提取并组成离散信号的采样个数。
采样次数 Ns,每个码元被采样的次数,必须为 2 的幂。
fs=fb*Ns
其中 fb 为波特率,每秒能传输的二进制位数。

实际中,要处理的为模拟信号,想要在数字系统中处理必须为数字信号,即采用抽样、量化、编码的处理方案。
处理的第一步为抽样,即模数转换。以电话为例,每秒 3000 次取样,每个取样是 7 比特,那么电话的比特率是 21000。而 CD 是每秒 44100 次取样,两个声道,每个取样是 13 位 PCM 编码,所以 CD 的比特率是 44100_2_13=1146600,这个参数也被称为数据带宽,它和 ADSL 中的带宽是一个概念。将码率除以 8,就可以得到这个它的数据速率,1146600/8=143325,也就是说 CD 每秒的数据量大约是 144KB,而一张 CD 的容量是 74 分等于 4440 秒,就是 639360KB = 640MB。即刚好为一张 cd 的容量。

快速傅里叶变换 FFT

做 n 个点的 FFT,表示在时域上对原来的信号取了 n 个点来做频谱分析,n 点 FFT 变换的结果仍为 n 个点。
换句话说,就是将 2pi 数字频率 w 分成 n 份,而整个数字频率 w 的范围覆盖了从 0-2pi*fs 的模拟频率范围。这里的 fs 是采样频率。根据奈科斯特定律,只有 f=fs/2 范围内的信号才是被采样到的有效信号。
举例说,如果做了 16 个点的 FFT 分析,你原来的模拟信号的最高频率 f=32kHz,采样频率是 64kHz,n 的范围是 0,1,2…15。(注:这意味着已经将原来的模拟信号采样了 8 遍。)这时,64kHz 的模拟频率被分成了 16 分,每一份是 4kHz,这个叫频率分辨率(卢注:做 FFT 用的点越多,频率分辨率越高)。那么在横坐标中,n=1 时对应的 f 是 4kHz, n=2 对应的是 8kHz, n=15 时对应的是 60kHz,你的频谱是关于 n=8 对称的。你只需要关心 n=0 到 7 以内的频谱就足够了,因为,原来信号的最高模拟频率是 32kHz。
https://blog.csdn.net/weixin_39591031/article/details/110392352

QPSK

QPSK 又叫四相绝对相移调制(4PSK),QPSK 利用载波的四种不同相位来表征数字信息。它的频带利用率高,是 BPSK(二相相移键控)的 2 倍。当数据码元速率相同时,QPSK 信号的传输波特率为 BPSK 信号的传输波特率的一半,所以 QPSK 的传输带宽是 BPSK 信号的一半。QPSK 调制技术的抗干扰能力强,采用相干检测时其误码性能与 BPSK 相同,故得到广泛应用。
image.png
写成正交形式:
image.png
QPSK 调制是利用载波的 4 种不同相位来表征数字信息。每一种载波相位代表两个比特的信息。例如,若输入二进制数字信息,序列为 10011100,…,则应该先将其进行分组,每两个比特编为一组。可将它们分为 10,01,11,00 等,然后分别用四种不同的相位来表示。故每个四进制码元又称为双比特码元。把组成双比特码元的前一个信息比特用 a 表示,后一个信息比特用 b 表示。双比特码元中两个信息比特 ab 与载波相位的矢量关系如图 1 所示。图(a)表示 A 方式时 QPSK 信号矢量图,图(b)表示 B 方式时 QPSK 信号的矢量图。由于正弦和余弦的互补特性,对于载波相位的四种取值,在 A 方式中:0°、90°、180°、270°,则数据通过处理后输岀的成形波形幅度有三种取值;B 方式中:45°、135°、225°、315°,则数据通过处理后输出的成形波形幅度有两种取值。
image.png
image.png
在本次实验中我们采取 B 方式进行调制。
image.png
原理图如上。
image.png

QPSK 的功率谱

由于 QPSK 信号可被理解为由同相支路和正交支路两路 2PSK 叠加而成,但是载波的幅度与码元速率不同,因此 QPSK 信号的功率谱密度相当于 2PSK 信号的功率谱密度的线性叠加:
image.png
因此 QPSK 信号的功率谱示意图如下:
image.png
由上图可以看出其带宽等于基带码元速率,峰值频率为等于载波频率。

星座图的基本概念

在数字通信领域中,经常将数字信号在复平面上表示,以直观的表示信号以及信号之间的关系,这种图示就是星座图。星座图可以看成数字信号的一个“二维眼图”阵列,同时符号在图中所处的位置具有合理的限制或判决边界。如果要将数字信号发送出去,一般不会直接发 0 或 1,而是先将 0,1 信号(bit)按照一个或者几个组成一组,比如每两个 bit 组成一组,即有 00,01,10,11,总共四种状态,此时可以选择 QPSK 调制,QPSK 四个点组成一个 QPSK 的星座图,每个点与相邻的点相差 90 度(幅度是相同的),一个星座点对应一个调制符号。星座图的作用主要是在调制时用于映射,而接收时用于判断发送的到底是哪个点,从而正确解调数据。

实验代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
clear all;clc;
%% 生成伪随机码

len = 64;

orderNum = 6;%m序列为6阶

xulie = idinput((2^orderNum-1),'prbs');% 生成伪随机序列,长度为63

fb = 10; % 波特率10kHz ,比特率值=波特率值,每秒能传输的二进制位数

Ns = 64; % 采样次数

fs=fb*Ns; % 采样频率,每秒从连续信号中提取并组成离散信号的采样个数

fc = fb; %载波频率=比特率

dt=1/fs; % 采样时间,又称时域采样间隔

Ts = dt;

N = Ns*length(xulie); % 总采样点个数


%% 生成两路调制信号

I_carrier = zeros(1,N);
Q_carrier = zeros(1,N);
I = zeros(1,N);
Q = zeros(1,N);

%采用绘图比较I、Q比特流
bit_data=zeros(1,N);

for i=1:len-1
bit_data(Ns*(i-1)+1:Ns*i)=xulie(i);%在一个比特周期里面有Fs个1和采样点一模一样
end

%对奇数抽样
for i=1:len/2
I(2*Ns*(i-1)+1:2*Ns*i) = xulie(2*i-1);
end
%对偶数采样
for i=1:len/2-1
Q(2*Ns*(i-1)+1:2*Ns*i) = xulie(2*i);
end

for i=1:N
I_carrier(i) = cos(2*pi*fc*(i-1)/(fs));
Q_carrier(i) = -sin(2*pi*fc*(i-1)/(fs));
end
%补充采样(最后一个采样点)
I_carrier = [I_carrier,ones(1,64)*cos(2*pi*fc*(i-1)/(fs))];
Q_carrier = [Q_carrier,zeros(1,64)];
Q = [Q,zeros(1,64)];

T = N*dt*fb; % 截断时间

%绘图
figure();
subplot(3,1,1)
plot(bit_data,'color',[55/255 108/255 176/255]);legend('Bitstream')%比特信息
subplot(3,1,2)
plot(I,'color',[55/255 108/255 176/255]);legend('I Bitstream')%I路信息
subplot(3,1,3)
plot(Q,'color',[55/255 108/255 176/255]);legend('Q Bitstream')%Q路信息
%% 调制

I_data = I.*I_carrier;
Q_data = Q.*Q_carrier;
QPSK_data = (I_data + Q_data)/sqrt(2);

figure();%产生一个新图
subplot(3,1,1)
plot(I_data,'color',[55/255 108/255 176/255]);legend('I signal')%I路信号
subplot(3,1,2)
plot(Q_data,'color',[55/255 108/255 176/255]);legend('Q signal')%Q路信号
subplot(3,1,3)
plot(QPSK_data,'color',[55/255 108/255 176/255]);legend('QPSK signal')%QPSK信号

%% 频谱
Bs =fs/2; % 系统带宽
QPSK = abs(fftshift(fft(QPSK_data,N)));
ff = linspace(-Bs,Bs,N); % 频域横坐标
figure()
plot(ff,QPSK,'color',[55/255 108/255 176/255])
%axis([-50,50,0,60]);
title('QPSK调制信号频谱图');
xlabel('f/kHz');
ylabel('频谱');
%% 功率谱密度
Bs =fs/2; % 系统带宽
QPSK = 10*log10(abs(fftshift(fft(QPSK_data,N))).^2/T);
ff = linspace(-Bs,Bs,N); % 频域横坐标
figure()
plot(ff,QPSK,'color',[55/255 108/255 176/255])
axis([-50,50,0,60]);
title('QPSK调制信号功率谱图');
xlabel('f/kHz');
ylabel('功率谱密度/db');
%% 绘制星座图

signal = cat(2, I', Q'); % 将两路串行信号码元合并在一个length(xulie)*2的矩阵中

[a1,~]=find(signal(:,1)==-1&signal(:,2)==-1); % 返回满足条件的矩阵元素对应的坐标

xinzuotu(a1)=-1-1i;

[a2,~]=find(signal(:,1)==-1&signal(:,2)==1);

xinzuotu(a2)=-1+1i;

[a3,~]=find(signal(:,1)==1&signal(:,2)==-1);

xinzuotu(a3)=1-1i;

[a4,~]=find(signal(:,1)==1&signal(:,2)==1);

xinzuotu(a4)=1+1i;

scatterplot(xinzuotu) % 以散点图的形式画出星座图

axis([-2 2 -2 2])

title('理想情况基带发射星座图')

实验结果

基带时域波形图
image.png
QPSK 调制信号波形图
image.png
QPSK 调制信号功率谱图
image.png


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!