解调GFSK

时间:2016-07-28 16:14:30

标签: gnuradio gnuradio-companion

我正在尝试解调来自nRF24L01 +收发器芯片的GFSK信号(连接到我的Arduino)。到目前为止,我已遵循本指南: 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网站上的评论也是我的评论)

如果有人可以帮助我(或者甚至指出我正确的方向),我会很高兴。提前谢谢!

1 个答案:

答案 0 :(得分:1)

Quadrature Demod之后你必须使用时钟恢复模块。 GNU Radio的M&M Clock Recovery应该可以胜任。该块将显着提高解码的性能。

但是你必须注意这个块需要的一些参数。最重要的是&#39; omega&#39;。 &#39;欧米茄&#39;粗略地说,对应于每个符号的样本数。例如,如果您的GFSK波特率为9600且来自硬件的输入信号为96000,则每个符号对应10个样本。 omega可以是任何浮点数。但请注意,时钟恢复不适用于较大的omega值。因此,请尽量将omega保持为8.0。为此,请正确调整硬件采样率或进行重新采样。

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

HereFSK接收器的一个很好的分步教程。 GFSK只添加了一个高斯滤波器,因此两个过程完全相同。