zedboard + AD-FMCOMMS3-EBZ AD9361 (八) matlab BPSK 发送测试
BPSK 相移键控 代表 0 和 1 数据 ,是 相位不同
(2 条消息) 从零开始搞信号处理——第三篇(软件无线电[2]BPSK调制流程与发射机基本结构) - 知乎
上面 这位老师的 博客 讲述的 比较详细 , 下面是 网上 找的一个 BPSK 大致过程 的图 ,比较 形象:

matlab + zedboard + AD9361 发送 BPSK 信号 流程如下:
信号参数定义:
- 调制方式 : BPSK
- 符号速率:1024 bps
- AD9361 采样率:1024*1024 Hz , AD9361 采样率设置范围 520.833 kHz ~ 61.44 MHz , 我的理解 为 AD9361的 DAC 输出速率 是 1024*1024 Hz ;
第一步 :把 0x12345678 转换成 bit , 用于 发送 的数据 matlab byte 转 bit 函数编写 - 所长 - 博客园
% 生成二进制数据(可根据需求调整长度) % N_symbols = 32; % 符号数量 % bits = randi([0,1], 1, N_symbols); % 随机0/1序列 tx_data_byte = [ 0x12, 0x34, 0x56, 0x78 ]; bits = f_byte2bit( tx_data_byte );
第二步: 将随机的数据 映射位 BPSK
% BPSK调制:0→1,1→-1(基带I路信号,Q路为0) bpsk_symbols = 2*bits - 1; % 映射后符号:1或-1
第三步:数据进行过采样 , AD9361 的 发送 采样率 设置为 1024*1024 hz, 符号速率是 1024, 因此过采样 倍数 = 1024;
% 过采样(每个符号扩展为N_os个采样点) N_os = 1024; % 过采样倍数 oversampled_symbols = upsample(bpsk_symbols, N_os); % 插入零值实现过采样
为什么 进行过采样 , 是为了 下一步 成形滤波 做准备 ,
第四步: 升余弦滤波参数生成 和 对上面的数据 进行滤波 生成 I路数据, Q 路数据全部为0 ,因为 BPSK 的调制 ,为什么 请看 :(2 条消息) 从零开始搞信号处理——第三篇(软件无线电[2]BPSK调制流程与发射机基本结构) - 知乎
% 升余弦脉冲成形(减少频谱泄漏) rolloff = 0.35; % 滚降系数(0~1,越小带外辐射越小) span = 8; % 滤波器跨度(覆盖8个符号周期) num_taps = span * N_os; % 滤波器抽头数 rcos_filter = rcosdesign(rolloff, span, N_os, 'normal'); % 生成升余弦滤波器 % 滤波(得到最终基带I/Q信号,BPSK的Q路为0) baseband_I = conv(oversampled_symbols, rcos_filter, 'same'); % I路信号 baseband_Q = zeros(size(baseband_I)); % Q路信号(BPSK中为0)
第五步: 因为 AD936X 的 SDRTX 发送接口 , 数据格式为 复数, 数据范围 【-2047,2047】
baseband_I = baseband_I * 4096; baseband_Q = baseband_Q * 4096; tx_data = complex(baseband_I,baseband_Q);
此时, plot(real(tx_data))

第六步: 设置 SDRTX 接口 参数
%% 创建发射 接口 tx
% 接口名称 AD936x
% 如果连接的 是 pluto 则这里可以填写 'Pluto'
tx = sdrtx('AD936x');
% 设置发射接口 IP 地址
tx.IPAddress = '169.254.0.2';
% 设置发射接口 中心频率 400Mhz
tx.CenterFrequency = 400e6;
% 设置发射接口 带宽采样速率 1024*1024
tx.BasebandSampleRate = 1024*1024;
% 设置发射接口 通道编号 1
tx.ChannelMapping = 1;
ping 测试 zedboard

第七步 发送数据 :
%% 重复发送 IQ 数据
tx.transmitRepeat(tx_data);
浙公网安备 33010602011771号