【问题标题】:Demodulating GFSK解调 GFSK
【发布时间】:2016-07-29 00:55:31
【问题描述】:

我正在尝试解调来自 nRF24L01+ 收发器芯片(连接到我的 Arduino)的 GFSK 信号。到目前为止,我一直遵循本指南: https://www.bitcraze.io/2015/06/sniffing-crazyflies-radio-with-hackrf-blue/#comment-38046

..并设法手动解调一个包(我发送的地址和消息“martijn”显然可以恢复): https://drive.google.com/open?id=0B9CJ42CGPiF2TWoyelRmWldZcU0

但是,现在我想接收数据包并在它们进入时对其进行解码。有人已经为这项工作制作了解码器,但不知何故找不到我的 nRF24 数据包: https://wiki.bitcraze.io/misc:hacks:hackrf

我的 Arduino 发送数据包代码如下:

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>

RF24 radio(9,10);
const uint64_t pipe = 0xe7e7e7e7e7;

char package[] = "martijn";

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.setDataRate(RF24_1MBPS);
  radio.setChannel(95);
  radio.openWritingPipe(pipe);
  radio.enableDynamicPayloads();
  radio.setAutoAck(true);
  radio.powerUp();
}

void loop() {

  radio.write(&package, strlen(package));
  delay(1);

}

基本上我只是想使用 GNU Radio Companion 来获取 nRF24 数据包,并将它们的二进制数据发送到一个文件中。我可以编写自己的解码器。但是,我不知道如何从输入信号中获取此二进制数据。

(bitcraze网站的cmet也是我的)

如果有人可以帮助我(甚至为我指明正确的方向),我会非常高兴。提前致谢!

【问题讨论】:

    标签: gnuradio gnuradio-companion


    【解决方案1】:

    Quadrature Demod 之后,您必须使用时钟恢复块。 GNU Radio 的M&amp;M Clock Recovery 应该可以完成这项工作。该块将显着提高解码性能。

    但是,您必须注意此块所需的一些参数。最重要的是'欧米茄'。 'Omega' 粗略地说对应于每个符号的样本数。例如,如果您的 GFSK 波特率为 9600,而您从硬件传入的信号是 96000,则每个符号对应 10 个样本。 omega 可以是任何浮点数。但是请注意,时钟恢复不适用于较大的omega 值。所以尽量将omega 保持在8.0。为此,请适当调整硬件采样率或进行一些重新采样。

    Clock Recover 之后只需使用“二进制切片器”块。这会将浮点数转换为01 的位。使用Pack K bits 块,您可以将比特流转换为字节流,可以通过“文件接收器”轻松保存到文件中。

    Here 是一个很好的关于FSK 接收器的分步教程。 GFSK 只添加了一个高斯滤波器,因此它们的过程完全相同。

    【讨论】:

    • 谢谢!我似乎无法弄清楚如何进行重采样。将硬件采样率降低到 70k 是行不通的。另外,Pack K bits 的值应该是多少?这是我当前的设置:drive.google.com/open?id=0B9CJ42CGPiF2NHVSYXU3Z0xwMWM 您是否知道为什么他们在您提到的教程中添加的第二个低通滤波器对我不起作用?它只会扰乱我的情节。如果没有第二个过滤器,信号看起来已经很好了。
    • 大多数硬件只支持一些预定义的采样率。通过重新采样输入信号,您可以将采样率更改为所需的速率。为什么过滤器不起作用很难说。也许它切断了感兴趣的信号。来自硬件的原始信号的 FFT 图可能会有很大帮助。
    • 这是 FFT 接收器(在低通滤波器之后)。我在这里使用 2M 作为采样率:drive.google.com/open?id=0B9CJ42CGPiF2Zm9SWUJDUFBtMlk 我尝试在过滤器之后添加一个 Rational Resampler(Dec. 20M 到 Int. 70k),但是文件接收器保持为空。我应该如何重新采样数据?
    • 您的示波器的分辨率带宽很低。所以我无法弄清楚那里发生了什么。您使用的理性重采样器的参数在我看来完全错误。您想将信号从 2M 下采样到 70k。 2M和70k的最小公倍数是14M。因此,您必须将信号插值 14M/2M=7,然后将其抽取 14M/70k=200。但是,具有这种配置的理性重采样器将在内部创建一个 200 抽头的滤波器用于下采样。这可能需要大量的处理能力。
    • 如果我是你,我会首先使用抽取 20 的 Xlating FIR 低通滤波器。这个滤波器的输出将是 100k,非常接近目标。然后使用多相任意重采样模块,信号可以轻松下采样到 70k。
    猜你喜欢
    • 2018-05-28
    • 2021-06-12
    • 2015-10-07
    • 2018-12-19
    • 2016-05-28
    • 2016-05-14
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多