更新:请参阅本文底部的补充说明。


在不受以下描述约束的一般采样条件下(与采样时钟无关的信号),量化噪声通常估计为均匀在一个量化级别上分布。当将两个ADC与I和Q路径组合以创建复杂信号的采样时,量化噪声同时具有幅度和相位噪声分量,如下所示。如图所示,当I和Q分量对幅度和相位的贡献相同时(例如,信号呈45°角时),该噪声呈三角形分布;当信号位于轴上时,该噪声呈均匀分布。这是可以预期的,因为每个I和Q的量化噪声都是不相关的,因此当它们都对输出结果有贡献时,分布就会卷积。

问题是相干采样的情况下相位噪声的这种分布是否发生了显着变化(假设采样时钟本身的相位噪声要好得多,而不是一个因素)?具体来说,我试图了解相干采样是否会显着降低量化相关的相位噪声。

考虑实信号(一个ADC)或复数信号(两个ADC;一个用于I,一个用于Q,一起描述)一个复杂的样本)。在实信号的情况下,输入为满量程正弦波,相位项是从分析信号中得出的。与正弦波的零交叉点变化相关的抖动将是实际信号产生的相位噪声的一个示例。对于复杂信号,输入为满量程$ Ae ^ {j \ omega t} $,其中实部和虚部都将是满量程的正弦波。

这是与这个问题有关,其中描述了相干采样,但是没有提到相位噪声:

相干采样和量化噪声的分布

为了更清楚地描述诱发的AM和PM噪声分量,我在下面添加了下图,用于复杂量化的情况:给定采样时刻,并且关联的量化样本为红点,并假设信号的实部和虚部的量化电平呈线性均匀分布。
在上图中量化发生的位置,以说明感应的幅度误差和相位误差:



因此给定任意信号

$$ \ begin {align}
s(t)&= a(t)e ^ {j \ omega t} \\
&= a(t)\ cos(\ omega t)+ ja(t)\ sin(\ omega t)\\
&= i(t)+ jq(t)\\
\ end {align} $$

量化信号是由

$$ s_k = i_k + j q_k $$

给出的最近距离点,其中$ i_k $和$ q_k $代表nt量化的I和Q级别分别根据以下项映射:

$$ \ mathcal {Q} \ {x \} = \ Delta \ Bigl \ lfloor \ frac {x} {\ Delta} + \ tfrac {1} {2} \ Bigr \ rfloor $$

其中$ \ lfloor(\ cdot)\ rfloor $表示下限函数,而$ \ Delta $表示离散量化级别。

$$ \开始{align}
i_k = \ mathcal {Q} \ {i(t_k)\} \\
q_k = \ mathcal {Q} \ {q (t_k)\} \\
\ end {align} $$

幅度误差为$ | s(t_k)|-| s_k | $,其中$ t_k $是时间对$ s(t)$进行采样以生成$ s_k $。

相位误差为$ \ arg \ {s(t_k)\}-\ arg \ {s_k \} = \ arg \ {s(t_k)\ cdot(s_k)^ * \} $其中*表示复共轭。

本文的问题是,当采样时钟与输入信号(整数倍)相对应时,相位分量的性质是什么?

为了提供帮助,以下是在I和Q上具有6位量化的复杂量化情况下幅度和相位误差的一些模拟分布。对于这些模拟,假定实际信号“真相”同样可能存在于量化中的任何位置扇区定义为上图所示的网格。请注意,当信号沿一个象限(全部为I或全部为Q)时,分布与实际信号在单个ADC情况下所期望的一致。但是,当信号沿45°角时,分布为三角形。这是有意义的,因为在这些情况下,信号具有相等的I和Q贡献,每个贡献都是不相关的均匀分布;因此这两个分布都卷积为三角形。 br />将信号矢量旋转到0°后,幅度和角度直方图将更加均匀:




更新:由于我们仍然需要针对特定​​问题的答案(下面的奥利(Olli)答案很好地阐明了导致我更新三角形的噪声特性和均匀的噪声密度,但是相干采样条件下的相位噪声特征仍然难以捉摸),我提供了以下想法,这些想法可能会激起实际的答案或进一步的发展(请注意,这些想法可能被误导了,但出于我还没有答案):

请注意,在相干采样条件下,采样率是输入频率的整数倍效率(以及锁相)。这意味着当我们通过复杂平面旋转一次以获取复杂信号和采样时,将始终有整数个样本,或者对于真实信号和采样(单个ADC)而言,将有一个正弦波周期的整数个采样。 br />
如前所述,我们假设采样时钟本身优越得多,因此不被认为是一种情况。因此,每次采样都将落在完全相同的位置。

考虑实际信号的情况,如果在确定相位噪声时仅考虑零交叉,则相干的结果采样只会是固定但一致的延迟变化(尽管当相干为奇数整数时,上升沿和下降沿会具有不同的延迟)。显然,在复杂的采样情况下,我们关心每个样本的相位噪声,我怀疑对于实际情况也是如此(我怀疑在“真相”的任何时刻样本的时间延迟都是相位噪声分量,但是如果我重复计算振幅差又是什么,我会感到困惑...)如果有时间,我会模拟这一点,因为在给定重复模式的情况下,所有失真都会在输入信号的整数谐波处出现周期和相位相对于幅度的测试将是谐波相对于基频的相对相位-通过仿真或计算可以发现有趣的是,这些谐波(对于实际信号而言,它们都具有复共轭对应项)求和与基频或同相正交,因此显示为所有相位噪声,所有振幅噪声或两者的组合。 (样本数量为偶数和奇数之间的差异可能会影响这一点。)

对于复杂的情况,如果Olli的图形显示的位置与显示的每个量化样本相关联的“真实”位置,则可以用更多数量的样本绘制的Olli图形可能会提供更多的见解。再次,我发现如果样本数量为奇数或偶数(他的图形是偶数,我观察到的对称性,但是从相位和幅度噪声的角度看,再也看不到),就有可能出现有趣的差异。但是,对我来说似乎很清楚的是,在实际和复杂情况下,当采样是连贯的时,噪声成分将仅存在于基频的整数谐波处。因此,即使相位噪声可能仍然像我怀疑的那样存在,但它位于整数谐波处更有利于通过后续滤波消除。

(注意:这适用于参考的生成高光谱纯度的时钟信号。)

评论

我希望您可以从数学上更清楚地了解实际问题是什么。

让我考虑一下如何做;我要描述的是量化噪声可以分解为幅度和相位分量(AM和PM)。当我们量化与采样时钟不相关或不匹配的任意正弦波音调时,采样结果将同时具有原始波形确定的“真相”的幅度误差和相位误差。我怀疑在相干采样($ f_s = N f_ {sig} $)的情况下,相位误差会显着降低或消除,其中$ f_s $是采样率,$ f_sig $是信号率。

我同意rbj。相位-振幅分布是什么意思?我相信数学。有关问题的模型将有助于解决问题。另外,更具体地说,如何将量化噪声分解为幅度和相位?

这是关于文本中提到的任意信号,还是数学描述所暗示的正弦信号?如果只考虑正弦信号,这种情况将大大简化,但这可能无法反映真实信号的行为。在正弦信号的相应情况下,量化误差是周期性的,并转化为周期性的相位误差。这种类型的相关性不会显示在直方图中,但是对于描述“相位分量的性质”而言,这可能很重要(这就是说相位误差正确吗?)。
我还更新了这个问题,以澄清它是为了生成时钟信号,以防您想使最后一段保持同步(您建议将其用于测量)。

#1 楼

我对此有疑问(编辑:此问题后来从问题中删除了):


只要输入可以合理地假设这些AM和PM噪声分量的分布是一致的信号与采样时钟无关


考虑信号:
$$ \ operatorname {signal}(t)= \ cos(t)+ j \ sin(t) $$
及其量化:
$$ \ operatorname {quantized \ _signal}(t)= \ frac {\ operatorname {round} \ big(N \ cos(t)\ big)} {N } + j \ times \ frac {\ operatorname {round} \ big(N \ sin(t)\ big)} {N} $$

量化步长为$ 1 / N $ I和Q分量(图中的$ N = 5 $)。

图1.信号的轨迹(蓝线)及其量化(黑点),以及它们之间的变形,以查看信号的不同部分被量化的方式,其中$ N = 5 $ 。 “变形”只是一组附加的参数图$ a \ operatorname {signal}(t)+(1-a)\ operatorname {quantized \ _signal}(t)$ at $ a = \ left [\ frac {1} {5},\ frac {2} {5},\ frac {3} {5},\ frac {4} {5} \ right]。$

该阶段的错误是由于量化误差为:

$$ \ operatorname {phase \ _error}(t)= \ operatorname {atan} \ Big(\ operatorname {Im} \ big(\ operatorname {quantized \ _signal}( t)\ big),\ operatorname {Re} \ big(\ operatorname {quantized \ _signal}(t)\ big)\ Big)\\-\ operatorname {atan} \ Big(\ operatorname {Im} \ big(\运算符名称{信号}(t)\ big),\运算符名称{Re} \ big(\运算符名称{信号} {t} \ big)\ Big)
\\ = \运算符名称{atan} \ Big(\ operatorname {round} \ big(N \ sin(t)\ big),\ operatorname {round} \ big(N \ cos(t)\ big)\ Big)-
\ operatorname {atan} \ big(N \ sin(t),N \ cos(t)\ big)
\\ = \ operatorname {atan} \ Big(\ operatorname {round} \ big(N \ sin(t)\ big),\ operatorname {round} \ big(N \ cos(t)\ big)\ Big)-\ operatorname {mod}(t- \ pi,2 \ pi)+ \ pi $$

减去包装阶段有风险但有效在这种情况下。

图2. $ \ operatorname {phase \ _error}(t)$ for $ N = 5 $。

那是分段线性函数。所有线段都越过零电平,但结束于其他各种电平。这意味着,将$ t $作为统一随机变量,在$ \ operatorname {phase \ _error}(t)的概率密度函数中,接近零的$值被过度表示。因此,$ \ operatorname {phase \ _error}(t)$不能具有均匀的分布。

考虑实际问题,请参见图1,其中具有足够高的$ N $且信号在每个采样间隔内旋转经过多个量化边界的复正弦波频率,采样中的量化误差实际上是固定的伪随机数序列,该序列来自数论怪癖。如果频率是采样频率的倍数,则误差取决于频率,$ N,$和初始相位,在这种情况下,量化误差是一个重复序列,其中不包含所有可能的量化误差价值观。在大$ N $的限制下,I和Q误差的分布是均匀的,并且相位和幅值误差是来自依赖于信号相位的分布的伪随机数。存在相位依赖性是因为矩形量化网格具有方向。

在大的$ N的限制中,相位误差和幅度误差是复数误差的垂直分量。幅度误差可以与无穷小量化步长成比例地表示,相位误差可以与量化步长的$ \ arcsin $成比例地表示。在信号相位$ \ alpha $,幅度误差在角度方向$ \ alpha $,相位误差在角度方向$ \ alpha + \ pi / 2 $。复数量化误差在沿I和Q轴定向的量化步长正方形中均匀分布,坐标角与量化步长成比例表示:

$$ \ big [(1/2,1/2),\ quad(-1/2,1/2),\ quad(-1/2,-1/2),\ quad(1/2,- 1/2)\ big] $$

旋转这些坐标或等效地将它们投影到比例相位误差和比例幅度误差轴上,可以得到相同的平顶分段线性概率密度具有节点的函数:

$$ \ left [\ frac {\ cos(\ alpha)} {2}-\ frac {\ sin(\ alpha)} {2},\ quad
\ frac {\ cos(\ alpha)} {2} + \ frac {\ sin(\ alpha)} {2},\ quad
-\ frac {\ cos(\ alpha)} {2} + \ frac {\ sin(\ alpha)} {2},\ quad
-\ frac {\ cos(\ alpha)} {2}-\ frac {\ sin(\ alpha)} {2} \ right ]
= \ left [\ sqrt {2} \ cos(\ alpha + \ pi / 4),\ quad
\ sqrt {2} \ sin(\ alpha + \ pi / 4),\ Quad
-\ sqrt {2} \ cos(\ alpha + \ pi / 4),\ quad
-\ sqrt {2} \ sin(\ alpha + \ pi / 4)\ right] $图3.给定信号角$ \ alpha $,比例相位误差和比例幅度误差的共享分段线性平顶概率密度函数(PDF)的节点。在$ {alpha \ in \ {-\ pi,-\ pi / 2,0,\ pi / 2,\ pi \} $中,PDF是矩形。一些节点也以$ \ alpha \ in \ {-3 \ pi / 4,-\ pi / 4,\ pi / 4,3 \ pi / 4 \} $合并,给出了三角形PDF和最坏情况的大$ N $渐近估计:1)$ \ sqrt {2} / 2 $量化步长的最大绝对幅值误差和2)$ \ sqrt {2} / 2 $的最大绝对相位误差乘以量化的\\ arcsin $步骤。

在中间阶段,PDF看起来像这样:

图4. $ \ alpha = \ pi / 8。$

如Dan所建议的,PDF也是投影到幅度和相位误差轴上的I和Q误差的矩形PDF的卷积。一个投影的PDF的宽度为$ | \ cos(\ alpha)| $,另一个的宽度为$ | \ sin(\ alpha)| $。它们的合并方差为$ \ cos ^ 2(\ alpha)/ 12 + \ sin ^ 2(\ alpha)/ 12 = 1/12,$统一于$ \ alpha $。

可能存在一些初始阶段的“假性”组合,以及复杂正弦曲线频率与采样频率的有理数比,这对于重复序列中的所有样本仅给出很小的误差。由于图1中误差的对称性,在最大绝对误差意义上,那些频率的优势在于圆上访问的点数是2的倍数,因为需要运气(低误差)只有一半的分数。其余各点的错误与第一个错误相同,并带有符号翻转。 6、4和12的至少倍数具有更大的优势。我不确定确切的规则是什么,因为这似乎并不是事物的倍数。这是关于网格对称性与模运算相结合的东西。然而,伪随机错误是确定性的,因此详尽的搜索显示出最佳的安排。在均方根(RMS)绝对误差意义上找到最佳排列最容易:

位深度,使用正方形量化网格。详尽的搜索伪幸运排列的源代码在答案的结尾。下图)细节,为了比较(浅蓝色),显示RMS绝对量化误差的$ N \ to \ infty $渐近估计,$ \ sqrt {1/6} / N,$ N = 2 ^ k-1时的$, $,其中$ k + 1 $是振荡器的位数。

最突出的误差频率的幅度决不超过RMS绝对误差。对于8位振荡器,一个特别好的选择是这些$ 12 $点大约位于单位圆上:


答案末尾的Octave源代码证实,离散的复杂正弦曲线以递增的角度顺序通过复杂平面上的这些点,仅具有5次谐波失真,与基波相比失真度为$ -91.5 $ dB。

为了获得低RMS绝对量化误差,频率不必像近似相位$ [0、1、2、3、4、5、6、7那样经过这些点。 ,8、9、10、11] \ cdot 2 \ pi / 12 $,则频率为$ 1/12 $乘以采样频率。例如,频率$ 5/12 $乘以采样频率将经过相同的点,但顺序不同:$ [0,5,10,3,8,1,1,6,11,4,4,2,7] \ cdot 2 \ pi / 12 $。我认为这是可行的,因为5和12是互质的。频率(每个样本的相位\\ pi / 2 $)。在正方形网格上,没有其他这样的完美安排。在I轴或Q轴之一被拉伸$ \ sqrt {3} $的六边形网格或非正方形矩形网格上(由此,它等于蜂窝网格上的第二行),相位增量每个样本$ \ pi / 3 $即可完美运行。这样的缩放可以在模拟域中完成。这增加了网格的对称轴数,这导致了对伪幸运排列的大多数有利变化:使用矩形量化网格(其中一个轴的缩放比例为$ \ sqrt {3} $)来设置各种振荡器位深度。可能的RMS绝对误差在正方形网格上为-51.3 dB,在非正方形矩形网格上为-62.5 dB,其中最低RMS-absolute-error伪幸运序列具有以下误差:

图7.长度为30的8位伪幸运序列在IQ平面上的误差值利用了在量化网格中找到的对称轴,该对称轴水平扩展了\\ sqrt {3} $。这些点仅来自围绕对称轴翻转的三个伪幸运复数。

我没有IQ时钟信号的实践经验,所以我不确定什么是重要的。在使用数模转换器(DAC)生成时钟信号的过程中,我怀疑除非使用良好的伪幸运排列,否则具有较低的白噪声基底要比具有较高的谐波噪声频谱更好。来自重复量化误差序列的尖峰(请参阅相干采样和量化噪声分布)。这些频谱尖峰以及白噪声可能会通过寄生电容泄漏,并在系统的其他部分产生不良影响,或影响设备的电磁兼容性(EMC)。作为一个类比,扩频技术通过将频谱尖峰转换为较低峰值的本底噪声来改善EMC。您可以将其整夜运行,以找到至少$ 16 \ le M \ le 100 $的最多16位振荡器的最佳配置。使用IScale = 1找到的第一个示例序列:

// Compile with g++ -O3 -std-c++11

#include <stdio.h>
#include <math.h>
#include <complex>
#include <float.h>
#include <algorithm>

// N = circle size in quantization steps
const int maxN = 127;
// M = number of points on the circle
const int minM = 1; 
const int maxM = 100;
const int stepM = 1;
// k = floor(log2(N))
const int mink = 2;
const double IScale = 1; // 1 or larger please, sqrt(3) is very lucky, and 1 means a square grid

typedef std::complex<double> cplx;

struct Arrangement {
  int initialI;
  int initialQ;
  cplx fundamentalIQ;
  double fundamentalIQNorm;
  double cost;
};

int main() {
  cplx rotation[maxM+1];
  cplx fourierCoef[maxM+1];
  double invSlope[maxM+1];
  Arrangement bestArrangements[(maxM+1)*(int)(floor(log2(maxN))+1)];
  const double maxk(floor(log2(maxN)));
  const double IScaleInv = 1/IScale;
  for (int M = minM; M <= maxM; M++) {
    rotation[M] = cplx(cos(2*M_PI/M), sin(2*M_PI/M));
    invSlope[M] = tan(M_PI/2 - 2*M_PI/M)*IScaleInv;
    for (int k = 0; k <= maxk; k++) {
      bestArrangements[M+(maxM+1)*k].cost = DBL_MAX;
      bestArrangements[M+(maxM+1)*k].fundamentalIQNorm = 1;
    }
  }
  for (int M = minM; M <= maxM; M += stepM) {
    for (int m = 0; m < M; m++) {
      fourierCoef[m] = cplx(cos(2*M_PI*m/M), -sin(2*M_PI*m/M))/(double)M;
    }
    for (int initialQ = 0; initialQ <= maxN; initialQ++) {
      int initialI(IScale == 1? initialQ : 0);
      initialI = std::max(initialI, (int)floor(invSlope[M]*initialQ));
      if (initialQ == 0 && initialI == 0) {
    initialI = 1;
      }
      for (; initialI*(int_least64_t)initialI  <= (2*maxN + 1)*(int_least64_t)(2*maxN + 1)/4 - initialQ*(int_least64_t)initialQ; initialI++) {
    cplx IQ(initialI*IScale, initialQ);
    cplx roundedIQ(round(real(IQ)*IScaleInv)*IScale, round(imag(IQ)));
        cplx fundamentalIQ(roundedIQ*fourierCoef[0].real());
    for (int m = 1; m < M; m++) {
      IQ *= rotation[M];
      roundedIQ = cplx(round(real(IQ)*IScaleInv)*IScale, round(imag(IQ)));
          fundamentalIQ += roundedIQ*fourierCoef[m];
    }
    IQ = fundamentalIQ;
    roundedIQ = cplx(round(real(IQ)*IScaleInv)*IScale, round(imag(IQ)));
    double cost = norm(roundedIQ-IQ);
    for (int m = 1; m < M; m++) {
      IQ *= rotation[M];
      roundedIQ = cplx(round(real(IQ)*IScaleInv)*IScale, round(imag(IQ)));
      cost += norm(roundedIQ-IQ);
    }
    double fundamentalIQNorm = norm(fundamentalIQ);
    int k = std::max(floor(log2(initialI)), floor(log2(initialQ)));
    //  printf("(%d,%d)",k,initialI);
    if (cost*bestArrangements[M+(maxM+1)*k].fundamentalIQNorm < bestArrangements[M+(maxM+1)*k].cost*fundamentalIQNorm) {
      bestArrangements[M+(maxM+1)*k] = {initialI, initialQ, fundamentalIQ, fundamentalIQNorm, cost};
    }
      }
    }
  }
  printf("N");
  for (int k = mink; k <= maxk; k++) {
    printf(",%d-bit", k+2);
  }
  printf("\n");
  for (int M = minM; M <= maxM; M += stepM) {
    printf("%d", M);
    for (int k = mink; k <= maxk; k++) {
      printf(",%.13f", sqrt(bestArrangements[M+(maxM+1)*k].cost/bestArrangements[M+(maxM+1)*k].fundamentalIQNorm/M));
    }
    printf("\n");
  }

  printf("bits,M,N,fundamentalI,fundamentalQ,I,Q,rms\n");
  for (int M = minM; M <= maxM; M += stepM) {
    for (int k = mink; k <= maxk; k++) {
      printf("%d,%d,%.13f,%.13f,%.13f,%d,%d,%.13f\n", k+2, M, sqrt(bestArrangements[M+(maxM+1)*k].fundamentalIQNorm), real(bestArrangements[M+(maxM+1)*k].fundamentalIQ), imag(bestArrangements[M+(maxM+1)*k].fundamentalIQ), bestArrangements[M+(maxM+1)*k].initialI, bestArrangements[M+(maxM+1)*k].initialQ, sqrt(bestArrangements[M+(maxM+1)*k].cost/bestArrangements[M+(maxM+1)*k].fundamentalIQNorm/M));
    }
  }
}


示例输出描述了使用IScale = sqrt(3)找到的第二个示例序列: />用于测试第一个示例序列的八度代码:

bits,M,N,fundamentalI,fundamentalQ,I,Q,rms
8,12,112.0029761113937,112.0029761113937,0.0000000000000,112,0,0.0000265717171


用于测试第二个示例序列的八度代码:

评论


$ \ begingroup $
非常好。每个轴I和Q的大小都很好地近似为均匀;我想知道我们是否看到两个均匀分布的卷积-您是否尝试过对结果进行直方图处理?我也将使用这种未经验证的逻辑来假设我正在使用的是,复杂信号的幅度分布也可能是三角形的?您是否有任何见解,当采样时钟相当时会发生什么?
$ \ endgroup $
–丹·博申(Dan Boschen)
17年4月9日在22:27

$ \ begingroup $
但是,我将更新问题以表明不统一!
$ \ endgroup $
–丹·博申(Dan Boschen)
17年4月10日在2:12

$ \ begingroup $
查看我的更新-我模拟并证实了我对三角形分布的怀疑。在我看来,分布将根据角度在均匀和三角形之间变化(有关说明,请参阅我的更新);因此,如果我们的角度是均匀分布的,那么我们必须最终得到一个整体的圆形分布。
$ \ endgroup $
–丹·博申(Dan Boschen)
17年4月10日在3:58

$ \ begingroup $
@OlloNiemitalo非常酷。如果我们将单位圆上的位置限制为相称采样,您是否进一步了解会发生什么(特别是相位误差分量)?是单个复杂音调旋转速率的固定倍数?当然,随着采样率的增加,这将接近您所显示的。但是,当我们限制选择相称时,如何用数学方式描述相位分量与速率的关系呢?
$ \ endgroup $
–丹·博申(Dan Boschen)
17年4月13日在15:33

$ \ begingroup $
感谢您对此问题的思考,并就可能的答案给出了进一步的指导。请注意,如果该比率是偶数整数倍,则该模式将在每个周期重复两次,然后更快地乘以2的高次幂可整除的倍数。由模数理论确定的模式可能是答案所在
$ \ endgroup $
–丹·博申(Dan Boschen)
17年4月13日20:00