3

我正在查看相位累加器的代码,我一定是个傻瓜,因为我不明白。代码很简单:

  每个时钟滴答做:
    累加 = 累加 + NCO_param;
    返回累积;

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

我的问题真的是:这与灵态有何关系?

4

3 回答 3

4

这篇文章可能会有所帮助。

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

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

该系统可以简单地通过增加相位增量来产生更高的输出频率,以便计数器更快地通过表格。在上面的示例中,相位增量等于 1,因此通过将增量设置为 2 来获得下一个可能的频率,从而使输出频率增加一倍。为了获得比这更精细的频率控制,可以将标准相位增量设置为例如 10。这样就允许稍高或稍低的输出频率。例如,将增量增加到 11 将使输出频率增加 10%,将其减少到 9 将按相同比例降低输出频率。频率所需的精度越高,计数器中需要的位就越多。

于 2008-10-17T18:47:34.350 回答
3

在回答我自己的问题时,我在网上找到了另一篇有趣的文章,描述了用于频率合成的相位累加器。

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

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

于 2008-10-18T02:59:13.140 回答
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(note) 周期从 0-1 运行。

于 2015-01-02T19:18:49.787 回答