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

55 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 整数边界杂散
updated: 2022-01-11 02:21:09Z
created: 2022-01-10 03:35:59Z
---
# 产生原因
当$f_{VCO}$不是$f_{PD}$的整数倍时就可能产生此杂散,即$f_{Spur}=f_{VCO}\%f_{PD}$。
杂散靠近整数边界或在两整数边界的中间位置时影响最大。
![整数边界杂散_clip.png](../../../_resources/整数边界杂散_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](../../../_resources/整数边界杂散_clip_2.png "传统PLL结构")![整数边界杂散_clip_1.png](../../../_resources/整数边界杂散_clip_1.png "可抑制杂散的PLL结构")
> 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](file:///E:\文档\应用笔记\snaa289-Using a Programmable Input Multiplier to Minimize Integer Boundary Spurs.pdf)》
> 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 <mark>parallel combination</mark> of these. Then it <mark>divides</mark> by the multiplier value to discourage higher
multiplier values unless it provides some benefit.**
```vb
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
```