数据采集卡的采样率,怎样设置才既能保留需要的信号,又不增加多余的数据量?本文面向数据采集(DAQ,Data Acquisition)任务的测试方案设计,讲清信号需求、硬件速率与程序读取之间的关系,不展开连续采集的丢数排查。先从被测信号的最高频率开始。
• 01 采样率怎么定,十倍频率够用吗?
• 02 总速率和每通道速率,怎样看规格?
• 03 设定采样率后,怎样确认实际速率?
• 04 采样率、采样总数和每次读取点数,怎样配合?
01 采样率怎么定,十倍频率够用吗?
采样率是单位时间内取得的样本数,单位为 S/s,即每秒采样次数。确定采样率前,需要先明确最高需要保留到哪个频率,以及要观察波形、分析频谱,还是记录变化趋势。采样率与设备的模拟输入带宽是不同指标,选型时两项都要检查。
对常规带限基带信号,奈奎斯特—香农采样定理要求采样率高于信号最高频率的两倍,才能满足理想重构条件。工程设置还要考虑抗混叠滤波器的过渡带,不能把恰好两倍当作通用工作点。采样前没有充分滤除的高频分量,可能混叠为虚假的低频信号。
以观察 1 kHz 正弦波为例,采用 10 kS/s 采样,按二者之比计算,每周期有 10 个采样点,比贴近理论下限更便于观察波形。十倍可作为这类波形观察的起步参考,不是所有测量任务都必须满足的下限;有了十倍,也不能省略抗混叠检查。
温度趋势与振动声学的频率范围不同,不能套用同一采样率。请先列出需要保留的频带,再核对滤波通带和设备支持的速率;只记录慢变趋势时,没有必要因为设备支持高速就始终按最大速率采样。
02 总速率和每通道速率,怎样看规格?
多通道采样率必须连同采样架构一起看。多路复用通常由多个通道共享模数转换器(ADC,Analog-to-Digital Converter),总速率需要在通道间分配;同步采样则让通道在同一采样时刻取值,规格常按每通道给出。
以 NI(恩艾)的 mioDAQ 为例,USB-6421 标示的最大速率为 250 kS/s,官网注明单通道条件,不能理解为多通道同时各有这一速率。USB-6451 则支持在 8 通道同步采样配置下达到每通道 1 MS/s;扩展到更多通道时涉及多路复用,须查对应模式的规格。
不同信号对应的模块,也有不同速率口径。下列是 C 系列模块的最大采样率,不是各类信号的推荐设置值。表中的 /ch 表示每通道;kS/s、MS/s 分别表示每秒千次、百万次采样。
信号类型 模块 最大采样率 计数口径
热电偶 NI-9213 75 S/s 总速率
电阻温度探测器(RTD,Resistance Temperature Detector) NI-9216 400 S/s 总速率
桥路 NI-9237 50 kS/s/ch 每通道
振动、声学 NI-9234 51.2 kS/s/ch 每通道
NI-9213 的 75 S/s 是总速率,不能直接作为每通道设置值。NI-9216 的 400 S/s 也按总速率标示,需要区分实际通道配置。NI-9237 的最大采样率为每通道 50 kS/s,用于桥路信号采集。NI-9234 的最大采样率为每通道 51.2 kS/s,用于振动、声学信号采集。
选型时请带上实际启用通道数和接线方式,查相应模式的速率。需要比较通道相位时,还要检查通道间采样时间差;总速率满足要求,并不代表各通道同时取样。
03 设定采样率后,怎样确认实际速率?
采样时钟可能由板载时基经过整数分频得到,因此程序输入值与设备实际采用值可能不同。NI 知识库给出的 20 MHz 时基算例,展示了这种差别。
目标速率为 17,545 Hz 时,先计算分频系数:20 MHz ÷ 17,545 Hz ≈ 1,139.93。该算例的模拟输入将分频系数向下取整为 1,139,得到实际速率约 17,559.26 Hz;模拟输出与数字输入/输出(I/O,Input/Output)取最近整数 1,140,得到约 17,543.86 Hz。取整的是分频系数,不是采样率本身。
不同设备的时基并不相同。例如,X 系列默认使用板载 100 MHz 时基,不能直接套用上述 20 MHz 算例。Delta-Sigma(Δ-Σ)型 ADC 还可能有特定的可用速率,须按具体设备手册确认。
采用内部采样时钟时,在 LabVIEW 中配置并验证任务后,可以通过 NI-DAQmx 驱动的定时属性节点,读取“采样时钟 >> 速率”。把读回值与目标值核对,再用于后续时间与频率换算。读回的是驱动采用的速率设置,不是对时钟实际频率的独立测量;使用外部采样时钟时,也不能靠这个属性测出外部时钟的频率。
用 DAQmx 定时属性节点读回驱动实际采用的采样率
04 采样率、采样总数和每次读取点数,怎样配合?
硬件采样率决定每秒产生多少样本;采样总数决定一次有限任务采多久;每次读取点数决定程序一次从缓冲区取回多少数据。三个量分别控制不同环节。
数据从采集设备的 FIFO 进入主机内存,再由程序按批读取
在 DAQmx 定时中,“每通道采样”用于有限采集时,表示每个通道要采的总点数;用于连续采集时,参与计算机缓冲区的分配。驱动还会考虑采样率,实际分配量不一定等于这里填入的数,也不代表每次读取量。
DAQmx Read 中的“每通道采样数”才决定读取批量。每批数据覆盖时间可按“每通道读取点数 ÷ 每通道采样率”计算。批量小,程序有机会更频繁地处理数据;批量大,调用次数减少,但等待凑齐样本的时间可能增加。这个时间关系并不等于软件循环的实际耗时。
请根据更新需求设置读取批量,并检查返回点数与超时情况。单次读得多或少,不会直接改变硬件采样率;持续运行能否及时处理数据,还需要单独验证。
常见问题
Q:DAQ 助手弹窗和框图节点设的采样率,以哪个为准?
A:已连线的框图输入值会覆盖配置弹窗中的初始值,弹窗显示不一定随之更新;没有连线覆盖时,仍使用弹窗设置。
DAQ 助手弹窗里的待读取采样(示例 100)与采样率(示例 1 kHz)只是初值
Q:能在循环里随时改采样率吗?
A:上述 DAQ 助手任务需先停止,再改采样率并重启。反复停启会留下采集间隙,不能据此实现无缝连续采集。
Q:DAQmx Read 的每通道采样数设成 -1 会怎样?
A:LabVIEW 多样本读取在默认设置下,连续模式读取当前可用数据,没有数据时可返回空数组;有限模式等待该次采集的数据齐备,仍受超时约束。
Q:为什么读取会超时?
A:规定时间内没有取得所需点数。默认超时为 10 秒;除读取量与采样率外,还要检查任务是否启动、触发是否到达、采样时钟是否有效。
Q:用 Python 时采样率怎么设、单位是什么?
A:使用 nidaqmx 的 cfg_samp_clk_timing 方法,rate 表示每通道每秒的采样数。使用外部时钟时,这一参数用于声明预期最大速率,不会改变外部时钟。