配色: 字号:
关于数据采集时缓冲区大小的探讨.pdf
2019-04-14 | 阅:  转:  |  分享 
  
??????????????????????????????????????????????????????????????????
从说明中我们可以知道当采样率为20KHz时,NI–DAQmx将把100K作为缓冲区的大小,因
此N=100K。
由于缓冲区是环形的,程序在执行的过程中不断的从缓冲区读取数据,每当读取一部分
数据后缓冲区中读取之前的该部分将在读取后变为可写,便于数据采集卡不断的从外部采集
数据存储到环形缓冲区中。当缓冲区中的数据被填满即没有可写的部分后将发生溢出从而导
致上述错误。我们假设在发生错误之前程序运行之后的任意时刻程序运行时间为t,那么在
这t时间内数据采集卡一共采集的数据点数为
1
=×t
1
在t时间内DAQmx读取.vi一共读取的数据点数为
2
=×t
2
要想使环形缓冲区不溢出,就必须满足如下条件:
-由于在实际的程序中,、n、T、N都是确定的值,这就意味着-的结果是关于t的一
12
次函数,令K=-,则当K>0时,随着t的增加,最终会存在一个临界值使得K×=N,
00
虽然我不能阻止缓冲区的溢出,但是我们可以使程序出错时的t足够大。当K=0时,-
数据点数和DAQmx读取.vi从环形缓冲区中读取的数据点数相等,当K<0时,-也是永远成立!但是这种情况一般不采用。现在我们把前面演示示例程序的参数数值带入上
述公式:
200
20000t-=100000
0.1
解出时间t=5.556s=5556ms。这说明程序运行5556毫秒后缓冲区溢出,程序弹出错误,这
与我们前面观察到的5610毫秒非常接近。现在我们假设改变参数n和T,并且保证程序在3
个小时内不发生上述错误,那么n和T应满足如下关系:
19990.7407<<20000
考虑到n是一个整数,并且T的小数点后三位有效,经过实际的计算,我们发现这个n和T
的具体指的确很难选取,比如我们取n=1000,那么T的范围是(0.05,0.050023158),由于
T是以秒为单位,转换为毫秒后T就只能取50毫秒,n取其它值时的情况也是如此,那么这
样一来就是K=0的情况,即永远不会出现缓冲区溢出的情况。本文的探讨到此为止。
献花(0)
+1
(本文系敢拼才会赢x...原创)