DSP / FPGA相位累加器如何工作?

时间:2008-10-17 17:58:55

标签: algorithm embedded signal-processing

我正在查看相位累加器的代码,我必须是一个简单的因为我没有得到它。 代码很简单:

  Every Clock Tick do:
    accum = accum + NCO_param;
    return accum;

accum是一个32位寄存器。显然,在某些时候它会翻滚。

我的问题是:这与阶段有什么关系?

3 个答案:

答案 0 :(得分:3)

This article可能有所帮助。

在运行步骤中,指示计数器(适当地称为相位累加器)在来自频率参考的每个脉冲上前进一定的增量。相位累加器的输出(相位)用于依次选择数据表中的每个项目。最后,DAC将此数据序列转换为模拟波形。

  

在跑步中,计数器   (适当地称为阶段   累加器)被指示前进   通过每个脉冲的一定增量   来自频率参考。该   相位累加器的输出(   阶段)用于选择每个项目   数据表依次。最后,   DAC将此数据序列转换为   模拟波形。   要生成周期性波形,   电路设置为一次通过   通过表花费时间相等   到波形的周期。对于   例如,如果参考频率是   1 MHz,表包含1000   条目,然后完整通过   相位增量为1的表   将需要1000/1 MHz = 1 ms,所以   输出波形的频率   是1 /(1 ms)= 1 kHz。

     

这个系统可以产生更高的效果   输出频率只需增加即可   相位增量使得   计数器更多地贯穿整个表格   很快。在上面的例子中,   相位增量等于1,所以   下一个可能的频率是通过   将增量设置为2,结果   在输出频率加倍。至   获得更好的频率控制   比这更标准的阶段   增量可以设置为,比方说,10   然后允许稍高或稍低   输出频率。例如,   将增量增加到11会   将输出频率提高10%,   并将其减少到9会减少   输出频率相同   比例。精度越高   要求超过频率,越多   计数器需要位。

答案 1 :(得分:3)

回答我自己的问题,我发现了另一篇有趣的文章online,描述了频率合成的相位累加器。

以下是我对相位累加器如何工作的理解:
累加器寄存器实际上代表360度。因此,值0表示0度,值2 ^ 32表示360度。

相位累加器在每个时钟周期添加一个值(M)。这表示围绕圆移动的角度为(M / 2 ^ 32)度。当寄存器溢出时,我们只需循环完整的360度并重新开始。

答案 2 :(得分:0)

公式如下:

使用周期为波形(x)周期= x(0-1)而不是x(0-2Pi)的示波器的示例

每个音频流一个变量,称为acc / accumulator,

每个样本,按accadd积累:

    var accadd = 1.0/( sampleRate / p2freq( note ) ) ;
    acc+= accadd;
    acc = acc%1.0;// not sure to do this as accurately using if statement. can reset acc every noteOn

如果您使用2pi周期的经典Sin,请使用2pi而不是1.0

就像波形将以每秒p2freq(音符)周期的0-1运行。