题
任何人都不会知道的任何地方我可以找到实际代码软件的实例锁相循环(SPLLs)?
我需要一个软件锁相环结合,可以跟踪调调制信号之间的某个地方1.1千赫和1.3千赫。一个谷歌搜索带来了大量的学术论文和专利,但没有使用。甚至一趟大学图书馆,其中包含一架子上的书籍硬件PLL的只有一个章节在一本书上SPLLs和更理论上比实际的。
感谢您的时间。
Ian
解决方案
这是一个互动的设计软件包 设计数字(即软件) 锁相环(Pll).填写 形式并按`提交"按钮, 和一个PLL将为您设计的。
这个会让你开始的,但是你 真的 需要了解的基础PLL的设计很好足以建立自己以解决以后-这是该领域的数字信号处理,而不是黑色魔力它一定会给你一个运行你的钱在调试。
-亚当
其他提示
我想这可能是太晚,以帮助您(什么你在做什么?) 但它可以帮助下一个家伙。
这里有一个奋力一击的例子有软件锁相环我只是在写一行为C,这将一起唱你:
main(a,b){for(;;)a+=((b+=16+a/1024)&256?1:-1)*getchar()-a/512,putchar(b);}
我这小小的奋力一击的第一个版本的,以便说服你的软件锁相循环,实际上是相当简单,因为软件的推移,尽管他们可能会非常棘手。
如果你给它的8位直线样本上stdin,它将产生的8位样本的锯齿波试图追踪一个高八度上stdout。在8000样每第二,它跟踪频率在附近250赫兹,只要上下文B中C.在Linux上你可以这样做的打字 arecord | ./pll | aplay
.低9位 b
是的振荡器(可能是什么控振荡器,在有硬件的执行情况),这产生的一方波(1或-1)被乘以输入波形(getchar()
)产生的输出相探测器。这输出,然后低通过滤到 a
产生所平滑阶段错误的信号被用于调整的振荡频率 b
推 a
朝0.自然频率的方波时 a == 0
, 是的对 b
增加16每一个样品,其增量,它通过512(一个完整的周期)每32样本。32样在8000样每秒都是以1/250第二,这就是为什么自然频率为250赫兹.
然后 putchar()
需要低8比特 b
, ,从而弥补了一个锯齿波至500左右,喷出他们作为输出音频流。
有几个东西缺失,这个简单的例子:
它没有好 的方式来检测锁定.如果你已经沉默,噪音,或一个强大的纯250赫兹输入调,将大致零和b将摆在其默认的频率。根据应用程序的,你可能想知道你是否已经找到了一个信号或不!Camenzind的建议在第12章的 设计的模拟芯片 是喂第二个"相检测器的"90°相位,从真正的相检测器;其平滑的输出给你信号的幅度从理论上讲你已经锁上。
自然振荡器频率是固定的, 不打扫.的 捕范围 PLL,间隔的频率内的其它会注意到一个振荡,如果它目前还不是锁定在一个,是非常狭窄;它的 锁定范围, ,超过其它会将范围,以便按照信,一旦它被锁上,是大得多。因此,这是共同的扫PLL的频率范围内,你会找到一个信号,直到你得到一个锁,然后停止扫地。
该奋力一击的版本上减少来自一个 更具可读性的例子有软件锁相环C 我写了今天,这不会做的锁检测,但没有扫描。它需要大约100CPU周期的每个样品输入每PLL在原子CPU在我上网本。
我认为,如果我们在你的情况,我将做以下(除了显而易见的事,就像在找一个人谁知道更多有关信号处理比我做的,并产生检验数据)。我可能不会过滤器和下变频信号在一个前端,因为它是在如此低的频率。下变频到200Hz-400Hz带似乎有必要的。我怀疑,调会带来了一些新的问题,因为如果信号突然转变阶段过90°或更多,你失去了相锁;但我怀疑这些问题将容易解决,并且它几乎没有未知的领土。
有Matlab与Simulink?有PLL演示文件可在Matlab中心 在这里,.Matlab的代码生成能力,可能会让你从那里来的PLL写C。