实操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