BPSK收发系统
BPSK收发系统
理论部分
数字调制信号的表示
调制方式的种类
有记忆调制
📌无记忆调制

在无记忆调制方式中,二进制序列分成每段长度为$k$的序列,再将每段序列映射成$s_m(t)$ ,而不考虑先前发送的信号如何。


无记忆调制方式——以BPSK为例
MPSK表达式

BPSK表达式

图形简述过程如下:

PSK和QAM

- QAM 和 PSK 的区别

从左边的星座图可以很显然看出,QAM 的幅度是不恒定的,而 PSK 的幅度是恒定的,即 PSK 只会改变信号的相位,而 QAM 不仅改变信号的相位,还改变信号的幅度。
根升余弦成型
-
带限信道
我们的所有通信信道都一定不是无限带宽的,对于带限信道,我们可以将其表征为等效低通频率响应 $C(f)$。根据以前通信原理相关知识,我们可以知道信号通过带限滤波器后,其非理想信道频率响应特性 $C(f)$ 会引起幅度和延时失真,在接收端特定时间采样时,不同信号间产生重叠,因此出现符号间干扰。这个时候,我们就要从想办法克服码间串扰 $ISI$。
-
奈奎斯特准则

- 情况1

- 情况2

- 情况3

- 拓展

- 情况1
-
升余弦
-
根升余弦滤波器
AWGN 信道的最佳接收机——理论部分
- AWGN信道
- 最佳判决的定义
MATLAB仿真设计
系统实现
收发系统框图

MATLAB代码实现
系统分模块实现
发射序列
1 | data_len = 10; %数据长度 |
映射(0 -> -1)
1 | s = (data-1/2)*2; |
1 | figure(1); |

成型滤波
1 | alfs = 0.35; % 滚降系数 |
-
上采样:
upsample(x,n)函数;在序列x的每个数后插入n-1个0上采样又称信号插值,即在原序列_x_(n)的两点之间插入L个0,等效于其在频域上做了频谱压缩。数据内插补零后,其贡献为零,因此傅里叶频谱形态只是更加细致。
-
根升余弦函数:
rcosdesign(alfs,span,sps,shape);alfs为滚降系数;span为表示截断的符号范围;sps为单个符号采样的个数(数值上等于osr,即上采样倍数);shape处可加上’normal',可加上’**sqrt',不加默认'sqrt'*
1 | figure(2); |

上变频(乘以载波)
1 | fs = 16000; % 采样率 |
1 | figure(3); |

物理信道(添加噪声)
1 | r_n = awgn(s_up,10,'measured'); |
awgn函数:y= awgn(x,snr,'measured')将白高斯噪声添加到向量信号x中。标量snr指定了每一个采样点信号与噪声的比率,单位为dB。如果x是复数的,awgn将会添加复数噪声。'measured'在添加噪声之前测量了x的能量。
下变频(乘以载波)
1 | r_down = r_n .* carrier; |
1 | figure(4); |

匹配滤波器接收
1 | r_bx = conv(fir_rcos,r_down); |

采样/判决(最佳接收)
1 | r_data = (r_bx(N:osr:end-N+1)) > 0; |
1 | figure(6); |

由于发送端数据为10,长度较小,只是为了测试整个程序运行正常,因此最后采样判决输出结果应该基本完全一致,用这个思路可以初步检验代码是否正确。
代码
1 | % bpsk收发系统 |
误码率分析
-
整体代码
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%仿真作业——-----——输出误码率图像
clc;clear all;close all;
fs = 16000; % 采样率
% Rb = 1000; % bit速率
fc = 2000; % 载波频率
% symbol_rate = 1000; %符号速率
alfs = 0.35; % 滚降系数
data_len = 1000000; %数据长度
% osr = fs/Rb; % 过采样倍数 = 采样率 / 符号速率
osr = 8;
data = randi([0 1],1,data_len); %生成0/1序列
data_bio = (data-1/2)*2; %映射,0变-1
data_up = upsample(data_bio,osr); %上采样
fir_rcos = rcosdesign(alfs,6,osr,'sqrt');
data_bx = conv(data_up,fir_rcos); %根升余弦滤波
% figure(1);
% plot(data_bx);title('经过成型滤波之后的图像');
carrier = cos(2*pi*fc/fs*(0:length(data_bx)-1)); %载波
s_up = carrier.*data_bx; %上变频(乘以载波)
% figure(2);
% plot(s_carrier);title('调制波形');
errbit = zeros(1,10);
snr = zeros(1,10);
i=1;
for ebn0 = 1:10
snr(i) = ebn0 + 10*log10(2) - 10*log10(osr); %SNR和EbN0的转化
%物理信道(加性高斯白噪声)
r_noise = awgn(s_up,snr(i),'measured');
%下变频(乘以载波)
r__down = r_noise.*carrier;
%匹配滤波器
%根升余弦滤波
r_bx = conv(r__down,fir_rcos);
%判决
recv_data = (r_bx(osr*6+1:osr:end-osr*6)) > 0;
errbit(i) = sum(abs(recv_data-data))/data_len;
i = i + 1;
end
ebn0 = 1:10;
ber_theory = 0.5*erfc(sqrt(power(10,ebn0/10)));%理论误码率
figure
semilogy(ebn0,ber_theory,'-or');
grid on;hold on;
semilogy(ebn0,errbit,'-sb');
grid on;hold on;
xlabel('EbN0(dB)');ylabel('BER')
title('BPSK误码率曲线图');
legend('理论误码率曲线','仿真误码率曲线');
-
仿真过程中的部分要求
观测根升余弦成型信号的频谱和方波成型信号的频谱形状
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
38clc;clear all;close all;
fs = 16000; % 采样率
% Rb = 1000; % bit速率
fc = 2000; % 载波频率
% symbol_rate = 1000; %符号速率
alfs = 0.35; % 滚降系数
data_len = 100; %数据长度
% osr = fs/Rb; % 过采样倍数 = 采样率 / 符号速率
osr = 8;
data = round(rand(1,data_len));
%data = ones(1,data_len);
s = (data-1/2)*2;
s_up = upsample(s,osr); %上采样
%成型滤波器——---根升余弦
fir_rcos = rcosdesign(alfs,6,osr,"sqrt");
N = length(fir_rcos); %滤波器长度
data_bx = conv(fir_rcos,s_up); %通过滤波器
figure(1);
subplot(211);
plot(data_bx);title('时域波形');
subplot(212);
N1 = 1024;
y = fft(data_bx,N1);
x = (1/N1).*(0:length(y)-1);
plot(x,abs(y));title('频域波形'); %画坐标轴理解有点不到位
%成型滤波器-----方波
data_rect = rectpulse(s,osr);
figure(2);
subplot(211);
stairs(data_rect);title('时域波形');
ylim([-1.5 1.5]);
N2 = 1024;
subplot(212);
y1 = fft(data_rect,N2);
x1 = (1/N2).*(0:length(y1)-1);
plot(x1,abs(y1));title('频域波形');








