实操BPSK载波调制解调笔记

BPSK调制

信源和参数设置

上采样

成型滤波器

载波调制

输出CSV文件

数据采集

信号,AWG和示波器的设置

*仿真模拟

BPSK解调

读取CSV数据

互相关去时延并修剪信号

相干解调

低通滤波

下采样

信号判决

误码率分析

后记

BPSK调制

信源和参数设置

按照实验所需合理设置比特率、每个符号采样点数和载波频率等各个参数值。注意此处参数设置会影响后续滤波器的设计。

% 参数设置

bit_rate = 10e7; % 比特率

sample = 20; % 每个符号采样点数

fc = 2*10e7; % 载波频率 200Mhz

fs = bit_rate * sample; % 采样率 = 比特率*每个符号采样点数 2Ghz

source_length = 446; % 发送信号长度

rollof_factor = 0.5; % 滚降因子

信源为随机生成的二进制序列。

% 信源

source = randi([0 1],1,source_length);

通常会在传输的数据流中添加标志性帧头,有多方面的好处: 作用1. 可用于同步接收端的时钟与发送端的时钟同步(有利于去时延的操作)。作用2. 标志性帧头可以明确地标识出每个数据帧的开始,有助于接收端正确地区分不同数据帧,以便后续的解码和处理等(本实验未用到)。 作用3. 包含冗余信息的标志性帧头可以用于错误检测和纠正,提高系统的可靠性。 作用4. 方便调试,通过查看帧头信息可以验证系统的正常运行,检测问题,并进行故障排除。

% 给出标志性帧头,方便调试

frame_pre = ones(1,32); % 用于捕获和同步

frame_begin = [0 1 1 1 1 1 1 0]; % 帧开始的标志

frame_head = [frame_pre frame_begin]; % 帧数据

frame_end = [0 1 1 1 1 1 1 0]; % 帧结束的标志

frame_msg = [frame_head source frame_end]; % 组帧

将随机二进制序列转化为BPSK的双极性信号(-1或1).

% 发射机

bipolar_msg_source = 2 * frame_msg - 1; % 双极性信号(-1/1)

figure;

plot(bipolar_msg_source);

title('时域波形');

plot(abs(fft(bipolar_msg_source)));

title('频域波形');

上采样

上采样即信号插值,即在原序列x(n)的两点之间插入L个0,等效于其在频域上做了频谱压缩。数据内插补零后,其贡献为零,因此傅里叶频谱形态只是更加细致。

% 上采样

bipolar_msg_source_temp = [bipolar_msg_source',zeros(size(bipolar_msg_source,2),sample-1)]; % size(A, 2)返回A列数

length_x = size(bipolar_msg_source_temp,1);

length_y = size(bipolar_msg_source_temp