为什么我的二阶delta sigma编码器实现不起作用?

时间:2016-11-20 12:57:27

标签: audio signal-processing

我写了以下伪代码。它实现了first order delta sigma encoder

float in[N];
float out[N];
float acc = 0.0f;

for(i = 1 ; i < N ; i++)
{
    acc += in[i] - out[i - 1];

    if(acc > 0)
       out[i] = 1;
    else
       out[i] = -1;
}

以下是我用作参考的架构:

enter image description here

我实施并测试了它。它起作用了,它产生了很多高音噪声。 为了减少噪音,我修改了代码并尝试编写second order delta sigma encoder

这是来自wiki的模式和我写的代码:

enter image description here

float in[N];    
float out[N];

float acc = 0.0f;
float acc2 = 0.0f;

for(i = 1 ; i < N ; i++)
{
    acc += in[i] - out[i - 1];
    acc2 += acc - out[i];

    if(acc2 > 0)
       out[i] = 1;
    else
       out[i] = -1;
}

但它确实起作用。输出信号/声音是完全听不见的和总垃圾。我一直无法找到问题所在。

1 个答案:

答案 0 :(得分:1)

您在生成之前使用out[i]

而不是acc2 += acc - out[i];,您需要acc2 += acc - out[i-1];

-1是因为量化器+ DAC一起产生1个采样延迟(除了量化噪声之外)。