RH.Filereader 上蓝色文件的采样率设置

Sample rate setting on RH.Filereader for BLUE files

谁能解释为什么在尝试读取 Blue/Platinum 文件时 Redhawk FileReader 组件会忽略采样率设置? FileReader 使用固定的 25MSps 速率,无论使用什么创建蓝色文件。

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

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

您没有提供您正在使用的 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 header 的内容并显示 rh.FileReader 正在使用来自 header.

的采样率

我调用的第一个脚本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 header 中定义的 5000。我们已经打印了从文件接收器接收到的 xdelta,并且我们也有一个粗略的确认,因为播放时间和文件创建时间大致相同(77 秒)。您需要确保 packet_size 参数足够小,否则您的文件很大,否则整个文件内容将被推送到一个推送数据包中。