GNU Radio + HackRF: RuntimeError: firdes check failed: 0 < fa <= sampling_freq / 2

我刚开始使用 GNU Radio,我必须说我是个菜鸟,但我对 RF 相关的东西有一些背景。事情是这样的:我录制了一个文件,现在我想通过我的 HackRF 和 GNU Radio 重复该文件。

GNU Radio WorkFlow

这是过滤器的确切设置: Filter settings

您看到的设置是随意的(因为我无法使其正常工作,所以我开始使用随机值进行测试)。 这是我得到的错误:

Executing: /usr/bin/python3 -u /home/scare/LAB/RadioFrequencies/GNU Radio/reply_433.py

gr-osmosdr 0.2.0.0 (0.2.0) gnuradio 3.8.2.0
built-in sink types: uhd hackrf bladerf soapy redpitaya file 
[INFO] [UHD] linux; GNU C++ version 11.1.0; Boost_107600; UHD_4.0.0.0-0-unknown
Using HackRF One with firmware 2017.02.1
Traceback (most recent call last):
  File "/home/scare/LAB/RadioFrequencies/GNU Radio/reply_433.py", line 211, in <module>
    main()
  File "/home/scare/LAB/RadioFrequencies/GNU Radio/reply_433.py", line 187, in main
    tb = top_block_cls()
  File "/home/scare/LAB/RadioFrequencies/GNU Radio/reply_433.py", line 137, in __init__
    firdes.high_pass(
  File "/usr/lib/python3.9/site-packages/gnuradio/filter/filter_swig.py", line 124, in high_pass
    return _filter_swig.firdes_high_pass(*args, **kwargs)
RuntimeError: firdes check failed: 0 < fa <= sampling_freq / 2

Done (return code 1)

显然,有趣的部分是 RuntimeError: firdes check failed: 0 < fa <= sampling_freq / 2

不幸的是,我不明白“fa”代表什么。

任何想法?

干杯

stack overflow GNU Radio + HackRF: RuntimeError: firdes check failed: 0 < fa <= sampling_freq / 2
原文答案

答案:

作者头像

我刚刚解决了同样的错误。该错误是由过滤器的截止和过渡参数设置不正确(在我的情况下太大)引起的。 GNU radio 为每个块以不同的方式处理变量“samp_rate”,过滤器似乎将其解释为将过滤器居中的一个点(这是我的看法,所以不要引用我的话)。

我还查看了源代码,在 'fa' 上找不到任何有用的东西

因此,请尝试将您的截止值调整为低于 samp_rate,并使您的过渡宽度达到 250e3。我使用 GUI 滑块来设置我喜欢的过滤器,我将在最终版本中使它们永久化。

Screen Cap of Settings Here Slider Settings For Both Sliders

Mike Ossmann 的“SDR with HackRF One,第 10 课 - 过滤器帮助了我”。如果您还没有遇到过它们,这也只是一个很棒的 GNU 无线电 SDR 讲座系列。 (只要确保使用 QT GUI)。

我希望这会有所帮助。如果解释有点半生不熟,我对 GNU 还很陌生。

作者头像

fa 是函数中抛出错误消息的截止频率。截止频率必须大于 0 且不超过奈奎斯特极限。在 GitHub 上的 GNU Radio 存储库中的 gr_filter/lib/firdes.cc 中的第 750 行附近有一些称为 sanity_check_xxx 的函数(xxx 是一个截止值还是 2,即带通,可选的 c 表示复数)。

在这个问题中,samp_rate 需要至少为 800MHz 才能支持 400Mhz 的高通截止频率。据我所知,采样率在这些过滤器函数中的使用方式与 GNU Radio 中的其他任何地方相同。

我遇到了同样的错误消息,因为我使用了 'firdes.band_pass instead of firdes.complex_band_pass` 并且低截止是负的,它应该是复杂的带通滤波器。