我一直遇到写文件的一些问题 - 即无法写得足够快.
为了解释,我的目标是捕获通过千兆以太网传输的数据流,并将其保存到文件中.
原始数据以10MS/s的速率进入,然后将其保存到缓冲区并随后写入文件.
以下是相关的代码部分:
    std::string path = "Stream/raw.dat";
    ofstream outFile(path, ios::out | ios::app| ios::binary);
    if(outFile.is_open())
        cout << "Yes" << endl;
    while(1)
    {
         rxSamples = rxStream->recv(&rxBuffer[0], rxBuffer.size(), metaData);
         switch(metaData.error_code)
         {
             //Irrelevant error checking...
             //Write data to a file
                std::copy(begin(rxBuffer), end(rxBuffer), std::ostream_iterator<complex<float>>(outFile));
         }
    } 
我遇到的问题是将样本写入文件需要很长时间.大约一秒钟后,发送样本的设备报告其缓冲区已溢出.在对代码进行一些快速分析之后,几乎所有的执行时间都花在了std::copy(...)(确切地说是99.96%的时间).如果我删除这一行,我可以运行该程序几个小时而不会遇到任何溢出.
也就是说,我对如何提高写入速度感到困惑.我已经浏览了这个网站上的几个帖子,看起来最常见的建议(关于速度)是实现文件写入,就像我已经完成的那样 - 通过使用std::copy.
如果它有用,我在Ubuntu x86_64上运行这个程序.任何建议,将不胜感激.
当尝试执行使用USRP的GNU Radio程序时,我得到一个错误回溯,(在Python中)通常以以下结尾:
    self.u = uhd.usrp_source(device_addr=args, stream_args=uhd.stream_args('fc32'))
  File "/home/marcus/.usrlocal/lib64/python2.7/site-packages/gnuradio/uhd/__init__.py", line 122, in constructor_interceptor
    return old_constructor(*args)
  File "/home/marcus/.usrlocal/lib64/python2.7/site-packages/gnuradio/uhd/uhd_swig.py", line 2351, in make
    return _uhd_swig.usrp_source_make(*args)
RuntimeError: LookupError: KeyError: No devices found for ----->
USRP正在运行.
我已成功安装了REDHAWK版本1.8.3的UHD设备.我不清楚如何将波形中的组件连接到由设备管理器管理的设备.我也不清楚IDL接口和USRP设备上的数据端口之间的相互作用.
我无法找到一个简单的例子来发送和接收利用USRP设备的波形(例如,信号发生器组件向USRP发送正弦波).有没有人有这个或任何建议的经验?