我写了以下伪代码。它实现了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;
}
以下是我用作参考的架构:
我实施并测试了它。它起作用了,它产生了很多高音噪声。 为了减少噪音,我修改了代码并尝试编写second order delta sigma encoder
这是来自wiki的模式和我写的代码:
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;
}
但它确实起作用。输出信号/声音是完全听不见的和总垃圾。我一直无法找到问题所在。
答案 0 :(得分:1)
您在生成之前使用out[i]
。
而不是acc2 += acc - out[i];
,您需要acc2 += acc - out[i-1];
-1
是因为量化器+ DAC一起产生1个采样延迟(除了量化噪声之外)。