首页 > 解决方案 > 从 USRP 接收数据

问题描述

我编写了一个从 USRP 接收数据的小型 c++ 程序。该程序可以接收 I/Q 数据并将其显示在频谱分析仪上。但接收器 LED 并不总是绿色。它有点闪烁和变暗。我怀疑计算机和 USRP 之间的速率不匹配。会是这样吗?如何确保计算机以与 USRP 获取样本相同的速率消耗样本?下面是我用于 I/Q 信号采集的线程函数。

void
USRPDriver::RxEventLoop()
{
    uhd::rx_metadata_t md;
    uhd::stream_cmd_t stream_cmd(uhd::stream_cmd_t::STREAM_MODE_NUM_SAMPS_AND_DONE);
    stream_cmd.stream_now = true;
    stream_cmd.num_samps = 1024;
    //std::cout << "Maximum num samps = " << rx_stream->get_max_num_samps() << std::endl;
    std::vector<std::complex<float> > fcpxIQ;
    fcpxIQ.resize(1024);
    usrp->issue_stream_cmd(stream_cmd);
    while(true)
    {
        usrp->issue_stream_cmd(stream_cmd);
        size_t num_rx_samps = rx_stream->recv(&fcpxIQ[0], 1024, md);
        emit ReceiveIQ(fcpxIQ);
        //std::cout << "Rx rate = " << usrp->get_rx_rate(0) << std::endl;
        //fcpxIQ.clear();
    }
}

标签: c++gnuradiousrp

解决方案


如果您想要连续流式传输,则不应使用NUM_SAMPS_AND_DONE这完全不是它的用例:它告诉 USRP 在收到 1024 个样本后停止接收。

根本不要使用那种模式。


推荐阅读