十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MATLAB生成IQ波形文件并回放到安捷伦信号源的完整指南

MATLAB生成IQ波形文件并回放到安捷伦信号源的完整指南 简介面向无线通信与信号处理领域的MATLAB开发者一套在MATLAB中生成IQ波形数据并下载至安捷伦信号源、通过其自带IQ调制功能直接回放的方法与配套文件。压缩包共19个文件仅94KB以10个.m脚本为主提供波形生成、连接管理、命令发送、波形加载等核心功能另有7个.p加密封装文件、1个sgIOmx.dll驱动接口及1个.chm帮助文档便于查阅函数说明与使用流程。已有572人学习下载对于需要掌握信号源远程控制或IQ波形回放流程的工程师具有实用参考价值。通过资源包内提供的关键接口可快速调用agt_waveformload、agt_sendcommand等命令配合示例脚本理解GPIB/USB控制逻辑从而高效实现从信号设计到硬件输出的全流程操作。1. 为什么用 MATLAB 生成 IQ 波形再丢给安捷伦信号源回放做接收机测试时最缺的不是调制器而是“想发什么就发什么”的发射机。直接在信号源面板上设置 QPSK、OFDM 这些调制当然可以但一旦遇到自定义协议包、多径衰落波形、带限噪声叠加信号面板根本不够用。把 MATLAB 算出来的基带 I/Q 数据变成波形文件下到安捷伦现在是是德科技信号源的 ARB 内存里再交给信号源内部的 IQ 调制器上变频等于把一台通用射频源改造成可编程的任意波形发射机。这套流程不需要额外搭硬件只需要 MATLAB、一根网线、一台支持 ARB 的信号源适合雷达、卫星、无线通信基带验证场景下做半实物仿真。很多人误以为信号源只吃厂商专用格式实际上安捷伦/是德源对“波形文件”有一套完整的存储、命名和调用规则。搞懂这套规则后MATLAB 生成的文件可以稳定复现换一台源也能跑。下文先从 IQ 调制和文件格式讲起再给完整的 MATLAB 生成代码和下载回放命令。2. IQ 波形文件格式与安捷伦信号源的存储约束2.1 IQ 调制的本质源里存的是基带样本不是射频波形信号源回放 IQ 文件时内部结构通常是一路 D/A 转换器同时输出 I 和 Q 两路模拟基带信号然后送进正交调制器与本振信号混频。因此波形文件里存的不是射频采样点而是基带复数样本或者对应的两列实数样本。MATLAB 端生成数据时必须明确自己是在做基带建模不能把射频载波直接当作采样值放进文件否则回放出来的信号会完全乱掉。基带采样率决定了文件能容纳的最大信号带宽。IQ 调制架构下可用的射频带宽约为基带采样率的一半。假设采样率是 40 MHz那么单边带信号带宽最大约 20 MHz实际使用时还要留出滤波器过渡带典型取 0.8 倍左右。这个约束决定了 MATLAB 里仿真参数怎么设计。2.2 常见波形文件格式和适用边界安捷伦/是德信号源支持的文件格式会随固件和硬件选件不同而变化不能一概而论。把几个常见类别放在一起对比方便在动手前先选定自己的路线文件类型典型扩展名内容特点使用场景文本波形.csv、.txt每行两个数I 和 Q 的十进制值教学演示、小点数离线转换二进制样本.bin、.dat交错存储 int16 或 float32 的 I/Q 对直接通过 SCPI 下载到 ARB 内存厂商专有波形.wfm、.wv带文件头、校验、压缩或序列信息需要长期保存、多段波形拼接时WAV 音频封装.wav双声道左右声道映射 I/Q通过音频接口类选件回放标题里说的“数据波形文件”并没有限定格式因此常见的做法是先在 MATLAB 里生成通用文本或二进制样本再由信号源自带的导入功能或 Signal Studio 之类工具转换成专有格式。如果源的面板菜单里提供了“Import I/Q”这类选项直接认 CSV 文件即可如果没有就给 MATLAB 脚本增加一步把 CSV 转成.wfm。这里不过度依赖某个型号的私有文件头而是把重点放在“I/Q 数据本身怎么组织”因为无论格式怎么包装采样率、点数、I/Q 数值范围这三种信息都必须准确地传给信号源。2.3 存储位置和命名规则安捷伦源的 ARB 文件通常存放在非易失性波形区从 SCPI 视角可以看到类似WFM1:xxx的路径。很多初学者直接用电脑的路径格式例如/usr/local/wave结果源返回错误。正确写法是让信号源识别为内部的WFM1:卷标。通过面板的 File Manager 能看到当前设备上的波形目录下载前最好先确认源里有没有WFM1:这个卷以及剩余空间是否足够。传输方式上老的 GPIB 或者串口也可以但最省事的是网线连接。信号源启用 LAN 后通常会开放 FTP 端口 21直接把波形文件扔到它的/USER/WAVEFORM/目录下。如果源支持 Web 管理页面也能在浏览器里上传。注意FTP 上传只解决了“文件到位”的问题要让源播放它还得再用 SCPI 命令指定波形名、打开调制和 RF 输出。3. 用 MATLAB 完成基带 IQ 波形的生成、量化与落盘3.1 生成一段带脉冲成形的 QPSK 波形下面这段脚本生成 8 倍过采样的 QPSK 信号加上根升余弦脉冲成形滤波器然后保存成两份文件一份是通用 CSV另一份是交错 int16 二进制。这个例子足够短可以直接在 MATLAB 里跑通换成 OFDM 或单音信号时只需要替换中间的调制映射部分。% iq_gen_qpsk.m fs 20e6; % 基带采样率 20 MHz symRate 2.5e6; % 符号速率 2.5 MHz sps round(fs / symRate); % 每符号采样点8 nSym 400; % 符号个数 % 1) 生成随机 QPSK 符号 rng(2025); symbols randi([0 3], nSym, 1); phase exp(1j * (pi/4 symbols * pi/2)); % 2) 上采样到 fs txup zeros(1, nSym * sps); txup(1:sps:end) phase; % 3) 根升余弦脉冲成形 rolloff 0.35; span 8; rrcFilter rcosdesign(rolloff, span, sps, sqrt); txSignal filter(rrcFilter, 1, txup); % 4) 归一化到满幅度的 75% peak max(abs(txSignal)); txSignal txSignal / peak * 0.75; % 5) 拆成 I/Q 两列并输出 I real(txSignal).; Q imag(txSignal).; writematrix([I Q], qpsk_iq.csv); % 6) 转成 int16写成交错二进制 scale 32767 * 0.9; % 留 10% 余量防止后续滤波或信号源幅度调整溢出 Ii round(I * scale); Qq round(Q * scale); iqInterleaved reshape([Ii Qq]., [], 1); fid fopen(qpsk_iq.bin, wb); fwrite(fid, iqInterleaved, int16); fclose(fid);这段代码的关键是第 3 步的rcosdesign。rcosdesign(rolloff, span, sps, sqrt)返回一个根升余弦 FIR 系数span是滤波器覆盖的符号数取值越大频带越干净但滤波延迟也会变长。第 4 步把信号峰值归一化到 0.75主要是为了给后续量化留出峰值因数余量。第 6 步乘以32767 * 0.9等于把浮点 I/Q 映射到 int16 动态范围同时保留 10% 的余量避免信号源内部再做一次插值或均衡时出现削波。如果想直接看波形质量和占用带宽可以在第 4 步后面加一个spectrogram画图spectrogram(txSignal, 256, 200, 512, fs, yaxis)。拉升载波看不出太多毛病但频谱图能直观检查邻道泄漏比是否够用。3.2 二进制样本的字节序和量化参数安捷伦信号源通过以太网或 GPIB 接收二进制数据时默认字节序常常是类似 SCPI 的“big-endian”风格但具体以仪器面板上的I/O Settings为准。如果下载后波形噪声很大或完全无声先检查两件事字节序是否反了以及 I/Q 两个通道是否交错成了I1,Q1,I2,Q2。如果源期望的是两个独立数组先全部 I再全部 Q代码就要改成fwrite(fid, Ii, int16); fwrite(fid, Qq, int16);这两种排布没有对错之分完全取决于信号源固件里波形读取函数的预期。常用的做法是把“交错”当成默认值因为它在内存里更连续和 D/A 采样时钟的时序也更匹配。调试不通时用 MATLAB 的isendian指令搭配一小段已知序列测试即可判断。3.3 采样率和点数选择要避开 ARB 最小长度限制ARB 波形通常有最小长度限制。老一些的安捷伦 ESG 系列要求波形段长度至少 96 到几千个采样点新一点的 VXT/MXG 虽然支持更短序列但太短会导致无法触发起始位置对齐。在 MATLAB 里生成样本总数最好不要低于 1024。如果测试场景只需要几十个码元就在调制映射阶段继续补零到 2048把尾部静默区当作前导和后导。这样既满足源的要求也保证接收端能统计到完整突发。文件大小也要提前估算。20 MHz 采样率、int16 双通道每秒数据量是 80 MB。如果信号源内存只有 64 MSa那就只能存约 3.2 秒波形。生成前脑子里先算一遍总采样点数 * 2 通道 * 2 字节。简单的 QPSK 几百个符号完全没问题但如果是伪随机噪声或者连续 OFDM最好设计成帧结构循环发送而不是无限长记录。4. 把波形文件下载到安捷伦信号源并拉起 IQ 调制回放4.1 用 FTP 将文件传进信号源内存盘和安捷伦信号源通过 LAN 连接时先确认电脑能 ping 通源面板上显示的 IP。例如信号源 IP 是192.168.1.100在 MATLAB 的ftp工具箱或者 Windows 自带 FTP 客户端里都能直接上传。但 MATLAB 命令行下更可控因为可以在同一个脚本里继续发 SCPI 指令。% 4.1 通过 FTP 上传 qpsk_iq.bin 到信号源波形目录 ip 192.168.1.100; username anonymous; % 很多仪器默认允许匿名 FTP password ; f ftp(ip, username, password); cd(f, /USER/WAVEFORM/); mput(f, qpsk_iq.bin); close(f);这段脚本执行完文件就出现在源的File Manager里了。/USER/WAVEFORM/是是德信号源常见的可写波形目录不同选件可能显示为/WAVEFORM/或/USER/WAV/。如果cd失败用dir(f)看一眼当前根目录下有哪些可选路径不要硬套本文的路径。部分仪器需要先切换到“File Transfer Mode”但绝大多数现代型号不需要。FTP 方式的好处是快几十 MB 的文件半秒内能完成。缺点是如果源只开了 GPIB 没开 LAN那 FTP 这条路就走不通必须用下面这种 SCPI 下载方式。4.2 用 SCPI 设置 IQ ARB 回放当文件已经在源的内存盘里接下来的步骤就和文件格式无关了。用 MATLAB 的visa、tcpclient或者 NI-VISA 都行这里以tcpclient示例因为它不依赖 VISA 驱动MATLAB 2019b 以后都有。% 4.2 连接信号源并配置 ARB 回放 ip 192.168.1.100; port 5025; % LAN SCPI 端口 tcpObj tcpclient(ip, port); tcpObj.ByteOrder big-endian; cmd_1 :SOURce1:FREQuency 1.5e9; % 射频载波 1.5 GHz cmd_2 :SOURce1:VOLTage -10dBm; % 输出功率 -10 dBm cmd_3 :SOURce1:RADio:ARB:WAVeform WFM1:qpsk_iq.bin; cmd_4 :SOURce1:RADio:ARB:STATe ON; cmd_5 :OUTPut:MODulation:STATe ON; cmd_6 :OUTPut:STATe ON; fprintf(tcpObj, [cmd_1 cmd_2 cmd_3 cmd_4 cmd_5 cmd_6]); % 查询回放状态 fprintf(tcpObj, :SOURce1:RADio:ARB:STATe?); state fscanf(tcpObj); disp([ARB state state]); clear tcpObj这里第 4 条命令是核心。:RADio:ARB:WAVeform后面指定的路径必须和前面 FTP 上传的位置一致。如果上传到/USER/WAVEFORM/SCPI 里就用WFM1:卷标加文件名如果源里看到的是INT:卷写法要相应改成INT:qpsk_iq.bin。第 5 条:OUTPut:MODulation:STATe ON经常被漏掉只开 RF 输出而不开调制输出结果面板显示有载波但看不到已调信号。第 6 条开启总输出后面再接一条查询指令确认状态避免脚本静默失败。4.3 常见下载异常和排查思路如果执行完上述命令后源面板显示Unrecognized file format问题几乎肯定出在波形文件内部格式上。此时不要反复试 SCPI先回到 MATLAB 检查三点二进制文件是否用了交错 int16、扩展名是否和源固件期望一致、是否有独立文件头。把.bin改成.wfm并不会让文件变成真正的.wfm因此遇到这种情况最可靠的做法是打开源的面板用它的波形导入工具把 CSV 转一次再存。如果回放时功率电平比设置值低很多或者信号底噪巨大绝大多数情况不是下载丢了数据而是量化时余量留得过大。比如前面用32767 * 0.9本意是防溢出结果信号源内部还要做插值滤波实际峰值因数会比文件里更大最终平均功率比设定功率掉好几 dB。解决办法是把 MATALB 端的峰值归一化改成 0.850.95或者在 SCPI 里把输出电平调高补偿峰值因数带来的平均功率损失。如果波形会周期性重复但每次重复之间有一段明显噪声那是波形文件的最后一个采样点和第一个采样点不连续。MATLAB 里生成数据时要用循环扩展法保证首尾相位衔接或者简单的做法是在波形尾部加一段与头部互补的过渡斜坡让信号源在 ARB 循环模式下跳跃时平滑过渡。5. 回放链路的技术边界与三条实用调优技巧当一条 IQ 波形能在安捷伦信号源上稳定回放后剩下要做的事情是让回放结果更接近 MATLAB 里的仿真值。这里整理三条针对回放链路的调优技巧属于“最后一公里”的内容。技巧一用源内的 IQ 校准文件补偿不平坦度。信号源从基带到射频输出的幅频响应不是无限平的尤其在宽带回放时边带会比中心频率低 0.51 dB。源内通常有IQ Frequency Response Calibration或I/Q Calibration菜单。下载波形后先跑一次内部校准再回放能明显改善 EVM。SCPI 层面可查询校准状态但最好的操作仍是手动在面板执行一次。技巧二控制波形的峰值因数再量化。回放 LTE、OFDM 这类高峰均比信号时不要让 I/Q 文件接近满量程。写入文件前用papr 10*log10(max(abs(sig).^2)/mean(abs(sig).^2))计算峰值因数。如果大于 8 dB建议先做一次限幅或套用削波算法将峰值因数压到 7 dB 以下。代价是引入少量带外杂散但能显著提高信号源输出平均功率接收机测试时更容易达到目标信噪比。技巧三采样率不需要和回放时要求完全一致但要满足 1:1 重采样顺手。很多 MATLAB 仿真直接跑在 122.88 MHz 这种信号源不支持的采样率上。与其在源端插值不如在 MATLAB 里降采样到 30.72 MHz 或 61.44 MHz再用resample函数配合rcosdesign重建基带信号。只要保证降采样后频谱不发生混叠降采样过程本身可以看成一次数字抽取不会改变 IQ 波形携带的信息。源端基带采样率设置得越低文件越小回放时间也能拖得越长。这三条技巧都围绕“回放结果还原度”展开。把 IQ 生成的边界条件、文件的量化精度和源端参数对齐后MATLAB 里的星座图与频谱分析仪上的结果就能高度吻合后面再做误码率测量时才会得到可信的参考值。本文还有配套的精品资源点击获取
返回列表