有人可以解释为什么Redhawk FileReader组件在尝试读取Blue / Platinum文件时会忽略采样率设置吗?无论用于创建蓝色文件的内容如何,FileReader都使用固定的25MSps速率。
每当我尝试更改费率设置时,控制台中的警告消息显示如下: FileReader_i:352 - 忽略尝试在读取蓝色文件时设置采样率
答案 0 :(得分:0)
忽略采样率,因为采样率是在bluefile头数据中定义的。忽略用户输入的采样率,并优先考虑文件头中定义的采样率。有关详细信息,请参阅下面的示例。
您没有提供正在使用的REDHAWK版本或组件版本。我将运行docker image axios / redhawk:2.0.4所以如果你安装了docker,你可以重现。这包括REDHAWK 2.0.4框架和版本4.0.3文件阅读器组件。
我写了两个简短的脚本来帮忙;一个人将使用rh.SigGen
中的rh.FileWriter
和/tmp/example.tmp
创建一个文件,其类型为BLUEFILE。它等待用户按Enter键,然后使用5000 Sps的默认采样率剪切文件。第二个脚本将使用rh.FileReader
读取文件,显示读取和写入时间相同,显示蓝色文件头的内容并显示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参数足够小或者您有一个大文件,否则整个文件内容将被推送到一个推送数据包中。