obsidian-notes/射频/PLL/整数边界杂散.md
CSSC-WORK\murmur 3e6078442b init version
2024-04-15 11:19:57 +08:00

2.6 KiB
Raw Blame History

title updated created
整数边界杂散 2022-01-11 02:21:09Z 2022-01-10 03:35:59Z

产生原因

当$f_{VCO}$不是$f_{PD}$的整数倍时就可能产生此杂散,即$f_{Spur}=f_{VCO}%f_{PD}$。

杂散靠近整数边界或在两整数边界的中间位置时影响最大。

整数边界杂散_clip.png

抑制原理

The concept of Spur-b-Gone is to put a multiplier after the input frequency so that the phase detector frequency can be dynamically changed to avoid bad integer boundary spurs.

整数边界杂散_clip_2.png整数边界杂散_clip_1.png

The general concept in using Spur-b-Gone is to maximize the distance from the integer boundaries.

简而言之,就是通过改变鉴相频率$f_{Spur}=f_{VCO}%f_{PD}$的值,以让其远离整数边界。 最简单的方法自然是在参考频率后加入倍频器因为R是始终存在的。

CodeLoader中抑制整数边界杂散的算法

节选自应用笔记《snaa289

The general concept in using Spur-b-Gone is to maximize the distance from the integer boundaries. However, it also turns out that if one is close to or at the midpoint of two integer channels, then again the spurs will be higher, although not as bad as being right at the integer boundary. Also, as the multiplier value becomes too large, then it also can add noise.

The Spur-b-Gone button on CodeLoader works by iterating through all valid PLL_R_PRE, PLL_R and MULT values and calculates an index for each one. Then it chooses the highest (best) index. The index works by putting 40x more weight on the distance to the closest integer channel compared to the midpoint and doing a parallel combination of these. Then it divides by the multiplier value to discourage higher multiplier values unless it provides some benefit.

IBS = Fvco % Fpd (Distance to closest integer channel)
IBS2 = Fvco % (Fpd/2) (Distance to closest midpoint between 2 integer channels
If IBS = 0 then
Index = Infinite (Ideal to be exactly on an integer channel)
Else If IBS2=0 then
Index = 0 (Stay away from ½ of integer boundary)
Else
If IBS<IBS then	 //此处疑是IBS<IBS2
Index = IBS / Mult
Else
Index = IBS * (40 * IBS2) / (IBS + 40 * IBS2) / Mult       //IBS权重为40IBS//40*IBS2再*1/Mult
End If
End If