RH 上的采样率设置.蓝色文件的文件读取器



谁能解释为什么Redhawk FileReader组件在尝试读取蓝色/白金文件时忽略采样率设置?FileReader 使用固定的 25MSps 速率,而不考虑用于创建蓝色文件的内容。

每当我尝试更改速率设置时,控制台中的警告消息都会如下所示: FileReader_i:352 - 读取蓝色文件时忽略设置采样率的尝试

采样率将被忽略,因为采样率是在 bluefile 头数据中定义的。用户输入的采样率将被忽略,文件头中定义的采样率被优先考虑。有关详细信息,请参阅以下示例。

您没有提供您正在使用的 REDHAWK 版本或组件版本。我将运行 docker 镜像 axios/redhawk:2.0.4,所以如果你安装了 docker,你可以重现。这包括 REDHAWK 2.0.4 框架和版本 4.0.3 文件阅读器组件。

我写了两个简短的脚本来提供帮助;一个将使用rh.SigGenrh.FileWriter创建一个文件,/tmp/example.tmp其类型为BLUEFILE。它等待用户按回车键,然后使用默认采样率 5000 Sps 剪切文件。第二个脚本将读取文件rh.FileReader显示读取所需的时间与写入时间相同,显示 bluefile 标头的内容,并显示rh.FileReader正在使用标头中的采样率。

我调用的第一个脚本create_samplefile.py

#!/bin/env python
from ossie.utils import sb
import time
siggen = sb.launch('rh.SigGen')
filewriter = sb.launch('rh.FileWriter')
filewriter.file_format = "BLUEFILE"
filewriter.destination_uri = "file:///tmp/example.tmp"
siggen.connect(filewriter, usesPortName='dataFloat_out')
start_time = time.time()
sb.start()
time.sleep(1.0)
raw_input("Press any key to end the file creation test and cut the file: ")
siggen_sample_rate = float(siggen.sample_rate)
sb.stop()
filewriter.releaseObject()
siggen.releaseObject()
time.sleep(1.0)
print 'Sample rate of SigGen was: %s' % siggen_sample_rate
print 'Total time elapsed was %s' % (time.time() - start_time)

然后我调用的第二个脚本time_readfile.py

#!/bin/env python
from ossie.utils import sb
import time
from ossie.utils import bluefile
from pprint import pprint
hdr, data = bluefile.read('/tmp/example.tmp')
print 'Here is all the information from the blue file header: n %s' % pprint(hdr)
sink = sb.FileSink()
filereader = sb.launch('rh.FileReader')
filereader.source_uri = "file:///tmp/example.tmp"
filereader.file_format = "BLUEFILE"
filereader.advanced_properties.packet_size = "1024"
filereader.connect(sink, usesPortName='dataFloat_out')
start_time = time.time()
sb.start()
filereader.playback_state = "PLAY"
while not sink.eos():
time.sleep(1.0)
print 'xdelta received by sink: %s' % sink.sri().xdelta
print 'Sample rate on filereader: %s' % filereader.sample_rate
print "Total time elapsed was: %s" % (time.time() - start_time)

运行它们,你会得到以下内容(我已经删除了不相关的部分):

[redhawk@bd28992b6770 example]$ python create_samplefile.py 
Press any key to end the file creation test and cut the file:
...
Sample rate of SigGen was: 5000.0
Total time elapsed was 77.7008731365

[redhawk@bd28992b6770 example]$ python time_readfile.py
Here is all the information from the blue file header: 
...
'xdelta': 0.00020000000000000001,
2017-06-22 20:00:05 INFO  FileReader_i:352 - Using sample rate of 2.5e+07 Sps
2017-06-22 20:00:05 INFO  FileReader_i:352 - Using sample rate of 5000 Sps
xdelta received by sink: 0.0002
Sample rate on filereader: 5000
Total time elapsed was: 77.0785810947

因此,您会看到FileReader从25Msps开始,然后通过xdelta参数(1/0.0002 = 5000)切换到bluefile标头中定义的5000。我们已经打印了从文件接收器收到的 xdelta,并且由于播放时间和文件创建时间大致相同(77 秒),因此我们还有一个粗略的确认。您需要确保 packet_size 参数足够小,或者您有一个大文件,否则整个文件内容将在单个推送数据包中推送。

最新更新