需要软件锁相环示例代码

2023-12-23

有谁知道在哪里可以找到软件锁相环(SPLL)的实际代码示例?

我需要一个可以跟踪 1.1 KHz 到 1.3 KHz 之间 PSK 调制信号的 SPLL。谷歌搜索显示了大量学术论文和专利,但没有任何可用的。即使去一趟大学图书馆,那里摆满了关于硬件 PLL 的书,一本关于 SPLL 的书中也只有一章,而且理论性多于实践性。

谢谢你的时间。

Ian


我想这可能已经太晚了,无法帮助你(你最终做了什么?),但它可能会帮助下一个人。

这是我刚刚用一行 C 语言编写的软件锁相环的高尔夫球示例,它将与您一起唱歌:

main(a,b){for(;;)a+=((b+=16+a/1024)&256?1:-1)*getchar()-a/512,putchar(b);}

我首先展示这个小型高尔夫球版本是为了让您相信软件锁相环实际上相当简单,就像软件一样,尽管它们可能很棘手。

如果您在标准输入上向其提供 8 位线性样本,它将生成锯齿波的 8 位样本,尝试在标准输出上跟踪高一个八度。以每秒 8000 个样本的速度,它跟踪 250Hz 附近的频率,位于 B 上方、C 中间下方。在 Linux 上,您可以通过键入来完成此操作arecord | ./pll | aplay。的低 9 位b是振荡器(硬件实现中可能是 VCO),它生成方波(1 或 -1),并乘以输入波形(getchar())产生鉴相器的输出。然后该输出被低通滤波为a产生平滑的相位误差信号,用于调整振荡频率b推动a朝向 0。方波的固有频率,当a == 0,是为了b每个样本增加 16,即每 32 个样本增加 512(一个完整周期)。每秒 8000 个样本的 32 个样本是 1/250 秒,这就是自然频率为 250Hz 的原因。

Then putchar()取低 8 位b,形成 500Hz 左右的锯齿波,并将其作为输出音频流喷出。

这个简单的例子缺少一些东西:

  1. 它没有什么好处检测锁的方法。如果您有静音、噪音或强烈的纯 250Hz 输入音,a 将大致为零,b 将以其默认频率振荡。根据您的应用程序,您可能想知道是否找到了信号! Camenzind 在第 12 章中的建议设计模拟芯片 http://designinganalogchips.com/是向第二个“相位检测器”提供与实际相位检测器90°异相的信号;其平滑输出为您提供理论上锁定的信号的幅度。

  2. 振荡器的固有频率是固定的,不扫. The 捕获范围对于 PLL 来说,如果当前没有锁定某个频率,那么它会注意到振荡的频率间隔非常窄;它是锁定范围,一旦锁定,为了跟随信号,它的范围要大得多。因此,通常会在您期望找到信号的整个范围内扫描 PLL 频率,直到获得锁定,然后停止扫描。

上面的高尔夫版本是从更易读的 C 语言软件锁相环示例 http://lists.canonical.org/pipermail/kragen-hacks/2012-February/000534.html我今天写的,它确实进行锁定检测,但不进行扫描。在我上网本的 Atom CPU 上,每个 PLL 的每个输入样本大约需要 100 个 CPU 周期。

我认为,如果我处于您的情况,我会执行以下操作(除了明显的事情,例如寻找比我更了解信号处理的人以及生成测试数据)。我可能不会在前端对信号进行滤波和下变频,因为它的频率已经很低了。下变频到 200Hz-400Hz 频段似乎几乎没有必要。我怀疑 PSK 会带来一些新问题,因为如果信号突然移相 90° 或更多,就会失去锁相;但我怀疑这些问题很容易解决,而且这并不是一个无人涉足的领域。

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

需要软件锁相环示例代码 的相关文章

  • 使用 C# 从线路输入连续采样的最简单方法是什么

    我想使用 C 从 PC 的音频线路中连续采样 然后处理该数据 进行采样的最佳方法是什么 您可以使用开源进行一些 基本 音频捕获NAudio http www codeplex com naudio NET 音频库 查看 NAudioDemo
  • 计算两幅图像之间的模糊内核

    与标准 且更具挑战性 去模糊和超分辨率场景不同 我可以访问原始 清晰 图像G而且是模糊版本B 我只是在寻找模糊内核h 所以因为B使用真实相机拍摄 关系为 B G h N 在哪里 表示卷积和N是一些附加噪声 自然 这是一个过度约束的问题 因为
  • matlab中矩阵的排序

    我正在对矩阵进行模拟 假设是 5x5 矩阵 该矩阵的元素之一是已知的 下面的后方块 该位置不会始终位于中心 我想从该位置开始并螺旋式访问其他元素 我已按数字显示了顺序 如何在大矩阵 例如 1000x1000 中定义这个顺序 因为我无法手动完
  • 相位展开问题(相位展开不正确)?

    我对随着时间的推移展开阶段有一个问题 I have a radar which monitors a slow periodic moving object From the received signal i want to see th
  • C++ 中的音频操作

    我希望这是发布此内容的正确位置 并且有人可以提供帮助 我是一名音乐技术学生 最近开始学习 C 因为了解一门编程语言对我的职业生涯有很大帮助 尤其是这种语言 因为它用于视频游戏行业 无论如何 进入主题 我想要创建一个程序 用 C 编写 让用户
  • 集成陀螺仪和加速度计读数[重复]

    这个问题在这里已经有答案了 可能的重复 结合陀螺仪和加速度计数据 https stackoverflow com questions 1586658 combine gyroscope and accelerometer data 我读过很
  • 如何更改 pyplot.specgram x 和 y 轴缩放?

    我以前从未使用过音频信号 对信号处理知之甚少 尽管如此 我需要使用来表示音频信号pyplot specgram函数来自绘图库图书馆 我是这样做的 import matplotlib pyplot as plt import scipy io
  • MATLAB 中的反向谱图 A La Aphex Twin

    我正在尝试将图像视为频谱图 从而在 MATLAB 中将图像转换为音频信号就像 Aphex Twin 的歌曲中那样舔窗者 http www bastwood com aphex php 不幸的是 我很难得到结果 这是我现在所拥有的 funct
  • 20hz-20000hz 巴特沃斯滤波爆炸

    我想过滤掉 20 Hz 20000 Hz 之外的所有内容 我正在使用巴特沃斯滤波器 from scipy io import wavfile from scipy import signal import numpy sr x wavfil
  • 如何找到DWT信号变换的频段?

    我是信号处理方面的新手 我想找出 Daubechies 小波 db4 变换输出的每个级别的频率范围 转换是通过 PyWavelet 完成的 我正在 python 中工作 下面的代码输出 5 个细节级别和 1 个近似值 但是我不确定每个级别描
  • NAudio 算法播放正弦波,其频率可以实时平滑地改变[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 到目前为止 我已经实现了在此找到的算法博客文章 http mark dot net blogspot com 2009
  • 获取 Librosa 中与 STFT 相关的频率

    使用时librosa stft 要计算频谱图 如何获取相关的频率值 我对生成图像不感兴趣 如librosa display specshow 而是我希望掌握这些价值观 y sr librosa load recordings high pi
  • 在python中应用巴特沃斯带通滤波器后,如何去除信号开头的大尖峰?

    我想使用带通滤波器消除信号的趋势 我在 python 中使用了 FL 0 1 Hz 和 FH 20Hz 的巴特沃斯滤波器 但在应用这个带通滤波器后 我在去趋势信号的开始处观察到一个大尖峰 这个尖峰是做什么用的 以及如何删除 python 中
  • 如何使用 scipy 找到最大峰值位置、索引?

    我想找到最大峰值的位置我该怎么做 我正在使用 scipy signal 来查找峰值 我希望代码返回峰值的位置 以微米为单位 如果您想找到由 确定的最高峰值scipy signal find peaks那么你可以执行以下操作 import n
  • 上采样的正确方法是什么?

    我有一组 75 Hz 的样本 我想以 128 Hz 存储它们 如果是 64 Hz 和 128 Hz 那很简单 我只需将所有样本加倍即可 但是 如果采样率不是彼此的一小部分 那么正确的方法是什么 当您想避免过滤时 您可以 将信号处理为一组连接
  • 在 MATLAB 中调整 3D 矩阵(图像)的大小

    我有一个 3D 矩阵 MxNxK 想将其大小调整为 M xN xK 就像 matlab 中的 imresize 一样 我正在使用图像金字塔 但其结果不是很准确 需要一个更好的 有什么解决办法吗 你可以使用interp3 因为您想要插入 3D
  • 我的傅立叶逆变换中的尖峰

    我正在尝试在 MATLAB 中比较两个数据集 为此 我需要通过傅里叶变换数据来过滤数据集 对其进行过滤 然后对其进行逆傅里叶变换 然而 当我对数据进行逆傅里叶变换时 我在红色数据集的两端都出现了一个尖峰 图片显示了第一个尖峰 它在开始时应该
  • matlab中简单正弦波的傅里叶变换

    我尝试显示简单正弦波的频谱 因为我们知道具有固定频率的单个正弦波必须在其频谱中出现峰值我编写了这段代码 但我无法得到这个峰值我的代码中有什么问题 clc nsteps 200 number of signal elements in tim
  • Python 中的可逆 STFT 和 ISTFT

    有没有通用的形式短时傅立叶变换 https en wikipedia org wiki Short time Fourier transform与内置于 SciPy 或 NumPy 或其他什么中的相应逆变换 这是pyplotspecgram
  • VB FFT - 难以理解结果与频率的关系

    试图理解我正在使用的 fft 快速傅里叶变换 例程 窃取 回收 输入是 512 个数据点的数组 它们是样本波形 测试数据生成到该数组中 fft 将该数组变换到频域 尝试理解频率 周期 采样率和 fft 数组中位置之间的关系 我用例子来说明

随机推荐