DCF77 解码器与噪声信号

2024-02-20

我几乎完成了我的开源 DCF77 解码器项目。当我注意到标准 (Arduino) DCF77 库在噪声信号上表现非常差时,这一切就开始了。特别是当天线靠近计算机或洗衣机正在运行时,我永远无法从解码器中获取时间。

我的第一个方法是向输入信号添加(数字)指数滤波器+触发器。

虽然这大大改善了情况,但仍然不是很好。然后我开始阅读一些关于数字信号处理的标准书籍,尤其是Claude Elwood Shannon的原著。我的结论是,正确的方法是根本不“解码”信号,因为它(除了闰秒)是完全先验已知的。相反,将接收到的数据与本地合成信号相匹配并确定正确的相位会更合适。这反过来又会将有效带宽降低几个数量级,从而显着降低噪声。

相位检测意味着需要快速卷积。高效卷积的标准方法当然是快速傅里叶变换。不过我正在为 Arduino / Atmega 328 实现。因此我只有 2k RAM。因此,我没有采用直接的 FFT 方法,而是开始堆叠匹配的锁相环滤波器。我在这里记录了不同的项目阶段:

  • 第一次尝试:指数过滤器 http://blog.blinkenlight.net/experiments/dcf77/binary-clock/
  • 更好方法的开始:信号锁相/秒滴答 http://blog.blinkenlight.net/experiments/dcf77/phase-detection/
  • 锁相至分钟 http://blog.blinkenlight.net/experiments/dcf77/second-decoder/
  • 解码分钟和小时数据 http://blog.blinkenlight.net/experiments/dcf77/decoding-time-data//
  • 解码整个信号 http://blog.blinkenlight.net/experiments/dcf77/decoding-everything/
  • 添加本地时钟来处理信号丢失 http://blog.blinkenlight.net/experiments/dcf77/local-clock/
  • 使用本地合成信号在信号丢失后更快地重新获取锁定 http://blog.blinkenlight.net/experiments/dcf77/the-clock/

我在互联网上进行了广泛的搜索,没有发现类似的方法。我仍然想知道是否有类似(也许更好)的实现。或者是否存在这种信号重建的研究。

我不是在寻找:设计优化代码以接近香农极限。我也不是在寻找有关 DCF77 上叠加的 PRNG 代码的信息。我也不需要有关“匹配过滤器”的提示,因为我当前的实现是匹配过滤器的近似值。关于维特比解码器或网格方法的具体提示不是我要寻找的 - 除非它们解决了严格的 CPU 和 RAM 限制的问题。

我正在寻找什么:是否有其他非平凡算法的描述/实现,用于解码信号,如 DCF77,CPU 和 RAM 有限在有明显噪音的情况下?也许在前互联网时代的一些书籍或论文中?


您是否考虑过使用芯片匹配滤波器来执行卷积?

http://en.wikipedia.org/wiki/Matched_filter http://en.wikipedia.org/wiki/Matched_filter

它们几乎很容易实现,因为每个码片/位周期都可以实现为 n 加减延迟线(使用循环缓冲器)

对于未知序列(但频率已知)的方波(也可以工作,但对于其他波形不太理想),可以实现如下简单的方法:

// Filter class
template <int samples_per_bit>
class matchedFilter(
   public:
      // constructor
      matchedFilter() : acc(0) {};

      // destructor
      ~matchedFilter() {};

      int filterInput(int next_sample){
        int temp;
        temp = sample_buffer.insert(nextSample);
        temp -= next_sample;
        temp -= result_buffer.insert(temp);
        return temp;
      };

   private:
     int acc;
     CircularBuffer<samples_per_bit> sample_buffer;
     CircularBuffer<samples_per_bit> result_buffer;
);

// Circular buffer
template <int length>
class CircularBuffer(
   public:
      // constructor
      CircularBuffer() : element(0) {
         buffer.fill(0);
      };
      // destructor
      ~CircularBuffer(){};

      int insert(int new_element){
        int temp;
        temp = array[element_pos];
        array[element_pos] = new_element;
        element_pos += 1;
        if (element_pos == length){
           element_pos = 0;
        };
        return temp;
      }

   private:
      std::array<int, length> buffer;
      int element_pos;
);

正如您所看到的,从资源角度来看,这是相对微不足道的。如果您需要特定的波形,您可以将它们级联在一起以提供更长的相关性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DCF77 解码器与噪声信号 的相关文章

  • 更快的第二好 MST 算法?

    我正在为此苦苦挣扎 我们可以使用 Kruskal 算法或 Prim 算法得到 MST 对于 第二好的 MST 我可以 首先使用上述任一算法获取 MST 对于来自 MST 的最优边缘的每个 V 1 A 首先删除或标记边缘b 继续计算 MST
  • 是否有可能比 O(n log n) 更好地计算数字列表的中位数?

    我知道可以在 O n 中计算数字列表的平均值 但是中位数呢 有没有比排序 O n log n 和查找中间元素 或者如果列表中有偶数个项目则两个中间元素的平均值 更好的算法 是的 您可以在 O n 时间内 确定性地 完成此操作 http ww
  • 有效地将相似的数字分组在一起[重复]

    这个问题在这里已经有答案了 可能的重复 一维数数组聚类 https stackoverflow com questions 11513484 1d number array clustering 我有一个数字数组 例如 1 20 300 4
  • Arduino C++ 代码:可以使用虚函数和异常吗?

    跟进这条评论 https stackoverflow com questions 452139 writing firmware assembly or high level 452401从问题中编写固件 汇编还是高级 https stac
  • 对于范围从 0 到最大值的 uint64_t 键,最佳哈希函数是什么?

    假设我们有一组元素并希望将它们存储在哈希映射中 例如std unordered set 并且每个元素都有一个 type 的键uint64 t其值可以从 0 到最大可能值变化 使用简单哈希函数 其中键的哈希值就是键本身 是最佳选择吗 它是否取
  • JS中的递归排序

    在一次采访中 我被要求编写一个程序 算法来使用递归对数字数组进行排序 虽然我含糊地回答了它 但我尝试并想出了以下代码 您可以使用以下JSFiddle https jsfiddle net RajeshDixit 2u9mLegv 1 链接来
  • 求矩阵 (n x n) 的最小总和,在每一行和每一列中只选择一个

    这是与动态规划相关的另一个算法问题 问题是这样的 找到给定矩阵的最小总和 以便在每一行和每一列中选择一个 例如 3 4 2 8 9 1 7 9 5 最小的一个 4 1 7 我认为解决方案是网络流量 最大流量 最小切割 但我认为它不应该那么难
  • 如何找到给定数组的所有可能的子集?

    我想在 C 或 C 中提取数组的所有可能子集 然后计算所有子集数组各自元素的总和 以检查其中有多少等于给定数字 我正在寻找的是算法 我确实理解这里的逻辑 但我现在还无法实现这一逻辑 考虑一组S of N元素 以及给定的子集 每个元素要么属于
  • 在 O(nloglogn) 最坏情况时间内对具有 O(logn) 个不同元素的 n 元素数组进行排序

    目前的问题是标题本身的内容 即给出一种算法 该算法在 O log logn 最坏情况时间内对具有 O log n 个不同元素的 n 元素数组进行排序 有任何想法吗 此外 您通常如何处理具有多个非不同元素的数组 O 日志 日志 n 时间足以让
  • 如何使PHP库松耦合? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 所需的最少攻击次数[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们有一个二维的细胞网格 每个细胞可能包含也可能不包含怪物 我们得到了包含怪物的单元格列表 在一次攻击中 我们可以杀死所有排成一排或一列的
  • 计算产生相同 BST 的唯一节点序列的数量

    问题 给定一个最多 50 个整数的特定序列 它们代表 某个二叉搜索树 BST 的节点 有多少种排列 这个序列在那里 这也会产生完全相同的 空白石板时间 将原始序列作为 1 个序列包含在总计数中 例如 对于这样的序列 5 2 1 9 8 答案
  • 计算流数据的直方图 - 在线直方图计算

    我正在寻找一种算法来生成大量流数据的直方图 最大值和最小值事先未知 但标准差和平均值在特定范围内 我很欣赏你的想法 Cheers 我刚刚找到了一个解决方案 秒 从流式并行决策树算法构建在线直方图 论文的 2 2 该算法由 Hive 项目中的
  • 查找二维空间中圆内的所有点

    我表示我的 2D 空间 考虑一个窗口 其中每个像素显示为 2D 数组中的一个单元格 即 100x100 的窗口由相同维度的数组表示 现在给定窗口中的一个点 如果我画一个半径的圆r 我想找到该圆圈中的所有点 我想我应该检查半径周围方形区域中的
  • 使用Redis从有限范围内生成唯一ID

    我有一些数据库项目 除了主键之外 还需要项目所属组的唯一索引 我们来调用属性nbr 以及将项目分组在一起并定义唯一范围的属性nbr 我们会打电话group This nbr必须在 1 N 范围内 并且may从外部源导入项目时进行设置 由于所
  • 以与版本页面上相同的方式区分两个字符串的算法是什么?

    我正在尝试按短语区分两个字符串 类似于 StackOverflow 在版本编辑页面上区分两个字符串的方式 执行此操作的算法是什么 是否有 gems 或其他标准库可以实现此目的 编辑 我见过其他比较算法 Differ http github
  • 用 ruby​​ 解决旅行商问题(50 多个位置)

    我在一家快递公司工作 目前 我们 手动 解决了 50 多个地点的路线 我一直在考虑使用 Google Maps API 来解决这个问题 但我读到有 24 点的限制 目前我们在服务器中使用 Rails 因此我正在考虑使用 ruby 脚本来获取
  • 优雅的折线“左移”测试

    Given X Y 坐标 即车辆的位置 X Y 数组 它们是折线中的顶点 请注意 折线仅由直线段组成 没有圆弧 我想要的是 计算车辆是在折线的左侧还是右侧 当然还是在顶部 我的做法 迭代所有线段 并计算到每个线段的距离 然后 对于最近的段
  • C# 计算LRC(纵向冗余检查)

    我一直在到处研究这个问题 所有 LRC 实现似乎都没有给我正确的答案 花了几天时间后 我决定将我的代码放在这里 看看其他人是否可以发现问题 这是代码 C Input Data 31303030315E315E31303030325E315E
  • 给定与总和匹配的长度的唯一 3 位数字 (-1,0,1) 序列的数量

    假设您有一个长度为 n 即空格数 的垂直游戏板 你有一个三面骰子 有以下选项 前进一 停留和后退 如果您低于或高于棋盘游戏空间的数量 则该游戏无效 一旦到达棋盘末端 唯一有效的动作就是 停留 给定确切的骰子投掷次数 t 是否可以通过算法计算

随机推荐

  • 在 C++11 上下文中使用 std::Optional

    我正在编写一个小型 C 11 库 我相信其中std optional在某些可以返回的函数中将是一个很好的补充nullptr 然而 std optional是 C 17 的一项功能 由于 C 11 是一项要求 我正在寻找使用方法std opt
  • 获取数据后reactjs useEffect清理功能

    我已经阅读了一些使用 useEffect 的 Reactjs 良好实践 我遇到一种情况 我将函数分开来获取数据并在 useEffect 挂钩上调用它 在这种情况下我怎样才能做一些清理功能呢 我见过一些像这样的 useEffect 清理 us
  • Google Data Studio 中社区连接器配置的多个选项

    无论如何 在配置过程中是否可以根据第一个分组中的内容生成一个列表 例如 我知道 Google Analytics 连接器有 帐户 gt 属性 gt 视图 您必须在设置之前选择它 我想创建一个连接器 如果您输入一个网址 它会拉入 json 文
  • PHP 接受所有组合

    我看到了这个算法将采用数字或单词并找到所有可能的组合 https stackoverflow com questions 1256117 algorithm that will take numbers or words and find
  • 如何使用OpenCV在Android中调整图像亮度?

    我创建了一个在 Android 中调整亮度的示例图像 我使用Bitmap来调整亮度 但是运行时间很长 相反 我想使用 OpenCV 在 Android 中设置图像亮度 这是我的示例代码 但它只改变图像的颜色 Bitmap bmp Bitma
  • 如何在reactJS中的嵌套状态对象中使用reduce函数?

    我的状态值为 this state content text tag1 line data1 tag2 line data2 我怎样才能使用JavaScriptreduce 函数来改变值line两者的tag1 and tag2 to cha
  • 安装节点版本高于当前系统节点版本的 NPM 包时,如何抛出“包中发现较低节点版本”错误?

    如果该模块支持的节点版本低于 高于系统 服务器节点版本 我想在安装 NPM 包时抛出错误 我的用例是 我不想安装任何支持 8 及以下版本的 npm 模块 任何帮助表示赞赏 尽管文档相反 但此功能显然不起作用 无论如何我都无法让它触发 如果您
  • 如何在 Excel VSTO 插件中将 WPF 窗口居中

    问题是 WPF 窗口仅采用 system form window 因此我无法将 Excel 设置为 VSTO 应用程序中的所有者对象 因为 VSTO 插件仅公开 Excel 的 hwnd 或其活动窗口作为本机窗口 因为它是COM 这意味着当
  • CLR 如何定位 pdb 符号文件

    我想知道 CLR 如何定位 pdb 符号文件 以及是否可以覆盖此行为 我上网查看 MSDN 和其他资源 但找不到好的答案 在我的应用程序中 我将 DLL 放置在主 EXE 路径的几个子目录中 我想要一个 Symbols 目录 其中包含我的应
  • 在 R 中具有负值的 3d 黄土平滑上设置上限 0

    我有一个有点奇怪的问题 但希望有人能帮助我 我正在尝试创建湖底的表面图 然后添加一些显示植物频率的点 以便直观地了解整个湖中水生植物的分布情况 现在 我正在分别使用 R 中的 scatterplot3d 和lattice 包在 scatte
  • SceneKit - 向场景添加新的 SCNNode 会导致严重的滞后

    我发现向场景中添加 SCNNode 使用 SCNGeometry 会导致严重的滞后峰值 根据时间分析器 它必须生成几何图形 至少函数 方法是这样调用的 它是在节点添加到场景时执行的 而不是在创建节点时执行的 因此 使用 SCNNode 创建
  • 保存下载但不带文件引用

    无论如何 是否可以使用 URLLoader 下载文件 然后将其保存到磁盘而不使用文件引用或任何使用对话框的内容 这是我拥有但不起作用的 public function onDownloadComplete e Event void Down
  • Golang 中 logrus 的 CustomFormatter 显示文件名和行号

    我在用github com sirupsen logrus用于登录我的 golang 脚本 但是我想获取记录消息的文件名和行号 我可以使用下面的代码得到它 package main import fmt os runtime strings
  • Monodevelop 2.8、XCode 3.2.6、界面生成器:出口和操作

    编辑 由于我还没有安装 XCode 4 我想知道 MD 2 8 是否与 XCode 3 2 6 完全兼容 特别是 我是否能够将插座和操作与中描述的新过程连接起来机器翻译文档 http docs xamarin com ios tutoria
  • 如何在 swift 3+ 中调整键盘的滚动视图

    如何调整滚动视图以垂直补偿键盘 继续阅读 是的 我知道这是一些基本信息 但今天我随机注意到 我看到的关于这个主题的所有答案都充满了信息 版本和 或到处使用刘海 但对于 Swift 来说没有什么可靠的3 斯威夫特 4 2 代替滚动视图对于 U
  • Android ExpandableListView:单击时设置所选项目的背景颜色

    当用户单击我的子项目时 我试图为项目设置背景颜色expandableListView 这是代码 expListView setOnChildClickListener new OnChildClickListener Override pu
  • 在 FluentValidation 中覆盖默认 ASP.NET MVC 消息

    我收到验证消息 值 xxx 对于 yyy 无效 当我为双精度类型发布错误的值时 就会发生这种情况 我不知道如何改变它 不幸的是 FluentValidation 无法覆盖这一点 MVC 验证的可扩展性模型在许多地方都受到一定限制 而且我无法
  • iOS - 通过渲染从 UIView 生成 PDF 会降低质量

    我使用以下方法从 UIView 生成 PDF 它们都创建了 PDF 但质量下降了 方法一 implementation UIView PDFWritingAdditions void renderInPDFFile NSString pat
  • 如何在validationif装饰器nestjs类验证器中使用else条件?

    我需要有条件地验证在 Nestjs 类验证器中提交的输入 有一个 validateif 装饰器 但如何在 else 部分添加另一个验证 例如 如果第一个输入是电子邮件 则使用电子邮件装饰器 如果它是电话 则与我的正则表达式匹配 IsNotE
  • DCF77 解码器与噪声信号

    我几乎完成了我的开源 DCF77 解码器项目 当我注意到标准 Arduino DCF77 库在噪声信号上表现非常差时 这一切就开始了 特别是当天线靠近计算机或洗衣机正在运行时 我永远无法从解码器中获取时间 我的第一个方法是向输入信号添加 数