相干采样的量化噪声-相位噪声?


9

更新:请参阅本文底部的新增想法。


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

要问的问题是,相干采样的情况下相位噪声的这种分布是否发生了显着变化(假设采样时钟本身的相位噪声要好得多,因此不是一个因素)?具体来说,我试图了解相干采样是否会显着降低量化相关的相位噪声。这将直接适用于时钟信号的产生,在时钟信号的产生中,相干性易于保持。

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

这与以下问题有关,在该问题中很好地描述了相干采样,但是没有特别提到相位噪声:

相干采样和量化噪声分布

为了更清楚地描述诱发的AM和PM噪声分量,我在下面添加了下图,用于复杂量化的情况:在给定采样时刻,连续时间中的复数矢量,以及关联的量化样本为红点(假设线性)信号实部和虚部的量化电平的均匀分布。

在此处输入图片说明

放大上图中量化发生的位置,以说明引起的幅度误差和相位误差:

在此处输入图片说明

因此给定任意信号

s(t)=a(t)ejωt=a(t)cos(ωt)+ja(t)sin(ωt)=i(t)+jq(t)

量化信号是下式给出的最近距离点

sk=ik+jqk

其中和表示分别根据以下内容映射的量化的I和Q级:q ķikqk

Q{x}=ΔxΔ+12

其中表示下限函数,而表示离散量化级别。()Δ

ik=Q{i(tk)}qk=Q{q(tk)}

幅度误差为其中是对进行采样以生成。|s(tk)||sk|tks(t)sk

相位误差为其中*表示复共轭。arg{s(tk)}arg{sk}=arg{s(tk)(sk)}

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

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

45度量化

量化放大45度

角度直方图

大小直方图

将信号矢量旋转到0°后,幅度和角度直方图将更加均匀:

0度角度量化

0°时的角度直方图

0°时的大小直方图


更新:由于我们仍然需要针对特定​​问题的答案(以下奥利的答案很好地阐明了噪声的特性,这导致我更新了三角形和均匀噪声密度,但是在连贯的采样条件仍然难以捉摸),我提出以下想法,可能会激起实际的答案或进一步的进展(请注意,这些想法可能会被误导,但为了获得我尚未知道的答案):

请注意,在相干采样条件下,采样率是输入频率的整数倍(并且也锁相)。这意味着,当我们通过复杂平面旋转一次以获取复杂信号和采样时,将始终有整数个样本,或者对于真实信号和采样(单个ADC)而言,将有一个正弦波周期的整数个采样。

如前所述,我们假设采样时钟本身优越得多,因此不被认为是一种贡献。因此,每次样本都将落在完全相同的位置。

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

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

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


2
我希望您可以从数学上更清楚地了解实际问题是什么。
罗伯特·布里斯托

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

我同意rbj。相位-振幅分布是什么意思?我相信数学。有关问题的模型将有助于解决问题。此外,可以更具体地讲,如何将量化噪声分解为幅度和相位?
马克西米利安·马特

1
这是关于文本中提到的任意信号,还是数学描述中所暗示的正弦信号?如果只考虑正弦信号,这种情况将大大简化,但这可能无法反映真实信号的行为。在正弦信号的相应情况下,量化误差是周期性的,并转化为周期性的相位误差。这种类型的相关性不会显示在直方图中,但是对于描述“相位分量的性质”而言,这可能很重要(这就是说相位误差对吗?)。
Hops'Apr

1
我还更新了问题,以阐明它是为了生成时钟信号,以防您想保持最后一段同步(您建议将其用于测量)。
Dan Boschen

Answers:


5

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

只要输入信号与采样时钟不相关,就可以合理地假设这些AM和PM噪声分量的分布是均匀的。

考虑信号: 及其量化:

signal(t)=cos(t)+jsin(t)
quantized_signal(t)=round(Ncos(t))N+j×round(Nsin(t))N

对于I和Q分量的的量化步长(图中)。1/NN=5

信号轨迹及其量化
图1.信号的迹线(蓝线)及其量化(黑点),以及它们之间的变形,以查看在下对信号的不同部分进行量化的方式。“变形”只是一组附加参数图,其中 atN=5asignal(t)+(1a)quantized_signal(t)a=[15,25,35,45].

由于量化误差导致的相位误差为:

phase_error(t)=atan(Im(quantized_signal(t)),Re(quantized_signal(t)))atan(Im(signal(t)),Re(signal(t)))=atan(round(Nsin(t)),round(Ncos(t)))atan(Nsin(t),Ncos(t))=atan(round(Nsin(t)),round(Ncos(t)))mod(tπ,2π)+π

减去包裹的阶段是有风险的,但是在这种情况下它可以工作。

相位误差
图2.为。phase_error(t)N=5

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

考虑到实际问题,请参见图1,它具有足够高的和复杂的正弦波频率,以至于在每个采样间隔内信号旋转超过几个量化边界,采样中的量化误差实际上是固定的伪随机序列来自数论怪癖的数字。如果频率是采样频率的整数倍,则误差取决于频率和并且还取决于初始相位,在这种情况下,量化误差是一个重复序列,其中不包含所有可能的量化误差值。在大的极限NN,NI和Q误差的分布是均匀的,相位和幅值误差是伪随机数,它们来自与信号相位有关的分布。由于矩形量化网格具有方向,因此对相位有依赖性。

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

[(1/2,1/2),(1/2,1/2),(1/2,1/2),(1/2,1/2)]

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

[cos(α)2sin(α)2,cos(α)2+sin(α)2,cos(α)2+sin(α)2,cos(α)2sin(α)2]=[2cos(α+π/4),2sin(α+π/4),2cos(α+π/4),2sin(α+π/4)]

PDF的节点
图3.给定信号角,比例相位误差和比例幅度误差的共享分段线性平顶概率密度函数(PDF)的节点。在,PDF是矩形。一些节点也以合并,给出了具有最坏情况下大渐近估计的三角形PDF 的1)的最大绝对幅值误差的量化步长和2)的最大绝对相位误差倍的量化步长的。αα{π,π/2,0,π/2,π}α{3π/4,π/4,π/4,3π/4}N2/22/2arcsin

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

中级PDF
图4.处的共享PDFα=π/8.

正如Dan所建议的,PDF也是投影到幅度和相位误差轴上的I和Q误差的矩形PDF的卷积。投影的PDF之一的宽度为,另一个的宽度为。它们的组合方差为在均匀。|cos(α)||sin(α)|cos2(α)/12+sin2(α)/12=1/12,α

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

伪幸运排列中的RMS绝对误差详情
图5.顶部)使用正方形量化网格,对于各种振荡器位深度,复数IQ振荡器中的最低RMS绝对量化误差均最低。详尽的伪伪安排搜索源代码在答案的结尾。底部)细节,示出了用于比较(浅蓝色)的的RMS绝对量化误差的渐近估计,对于其中是振荡器位数。N1/6/N,N=2k1,k+1

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

{(0,±112),(±112,0),(±97,±56),(±56,±97)}112.00297611139371

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

为了获得低RMS绝对量化误差,频率不必按照近似相位顺序经过这些点。表示采样频率的倍。例如,频率是采样频率的倍将经过相同的点,但顺序不同:。我认为这是可行的,因为5和12是互质的[0,1,2,3,4,5,6,7,8,9,10,11]2π/121/125/12[0,5,10,3,8,1,6,11,4,9,2,7]2π/12

关于可能的最佳布置,如果正弦波的频率为采样频率的四分之一(每个采样的相位增量为),则在所有点上的误差都可以恰好为零。在正方形网格上,没有其他这样的完美布置。在I轴或Q轴之一被拉伸的六边形网格或非正方形矩形网格上(因此,它等于蜂窝网格上的第二行),相位增量为每个样本的可以完美工作。这样的缩放可以在模拟域中完成。这增加了网格的对称轴的数量,这导致了对伪幸运排列的最有利的更改:π/2 π/33π/3

具有缩放系数sqrt(3)的非正方形矩形网格的伪幸运排列中的RMS绝对误差
图6.使用矩形量化网格(其中一个坐标轴由缩放),3对于各种振荡器位深度,在复杂IQ振荡器中,最低可能的RMS绝对量化误差。

值得注意的是,对于在圆上有30个点的8位振荡器,最小可能的RMS绝对误差在正方形网格上为-51.3 dB,在非正方形矩形网格上为-62.5 dB,其中RMS-绝对误差最低伪幸运序列有错误:

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

我没有IQ时钟信号的实践经验,所以我不确定什么重要。在使用数模转换器(DAC)生成时钟信号的过程中,我怀疑除非使用良好的伪幸运排列,否则具有较低的白噪声基底要比具有较高的谐波噪声频谱更好。来自重复量化误差序列的尖峰(请参阅相干采样和量化噪声分布)。这些频谱尖峰以及白噪声可能会通过寄生电容泄漏,并在系统的其他部分产生不良影响,或影响设备的电磁兼容性(EMC)。举例来说,扩频技术通过将频谱尖峰转换为较低峰值的本底噪声来提高EMC。

下面是C ++中详尽的伪幸运排列搜索的源代码。您可以将其整夜运行,以找到至少最多16位振荡器的最佳配置。1M100

// 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 = 1

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

示例输出描述了发现的第二个示例序列IScale = sqrt(3)

8,30,200.2597744568315,199.1627304588310,20.9328464782995,115,21,0.0007529202390

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

x = [112+0i, 97+56i, 56+97i, 0+112i, -56+97i, -97+56i, -112+0i, -97-56i, -56-97i, 0-112i, 56-97i, 97-56i];
abs(fft(x))
20*log10(abs(fft(x)(6)))-20*log10(abs(fft(x)(2)))

用于测试第二个示例序列的倍频程代码:

x = exp(2*pi*i*(0:29)/30)*(199.1627304588310+20.9328464782995i);
y = real(x)/sqrt(3)+imag(x)*i;
z = (round(real(y))*sqrt(3)+round(imag(y))*i)/200.2597744568315;
#Error on IQ plane
star = z-exp(2*pi*i*(0:29)/30)*(199.1627304588310+20.9328464782995i)/200.2597744568315;
scatter(real(star), imag(star));
#Magnitude of discrete Fourier transform
scatter((0:length(z)-1)*2*pi/30, 20*log10(abs(fft(z))/abs(fft(z)(2)))); ylim([-120, 0]);
#RMS error:
10*log10((sum(fft(z).*conj(fft(z)))-(fft(z)(2).*conj(fft(z)(2))))/(fft(z)(2).*conj(fft(z)(2))))

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

但是,我将更新问题以免暗示它是统一的!
Dan Boschen

看到我的更新-我模拟并证实了我对三角形分布的怀疑。在我看来,分布将根据角度在均匀和三角形之间变化(有关说明,请参阅我的更新);因此,如果我们的角度是均匀分布的,那么我们必须最终得到一个整体的圆形分布。
Dan Boschen

1
@OlloNiemitalo非常酷。如果我们将单位圆上的位置限制为相称采样,您是否会进一步了解会发生什么(尤其是相位误差分量)?是单个复杂音调的旋转速率的固定倍数?当然,随着采样率的增加,这将接近您所显示的。但是,当我们限制选择相称时,如何用数学方式描述相位分量与速率的关系?
Dan Boschen

1
感谢您对此进行细心的介绍,并就可能的答案给出进一步的指导。请注意,如果比率是偶数整数倍,则模式将在每个周期重复两次,然后更快地乘以2的高次幂可整除的倍数。由模数理论确定的模式可能确实是答案所在
Dan Boschen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.