我在第124-125页上阅读了UdoZölzer撰写的DAFX书中关于失真效应的内容,它说失真的适当模拟由以下函数给出:

$$ f(x) = \ frac {x} {| x |} \ left(1-e ^ {x ^ 2 / | x |} \ right)$$

有人可以解释这个公式以及什么样的信号我们得到吗?

据我了解,“ x”是采样信号,所以这是一个数字序列。 | x |是什么意思?它是否为每个采样值引用x的绝对值?

因此,如果我想对失真效果进行这种模拟,


我需要知道x的长度(由样本数确定)
在循环中,我需要为每个样本值计算此公式
循环结束后,我得到失真的信号(以数字形式)

之后,我需要将其转换为模拟信号,以便我能听到。

评论

请注意,书中给出的公式有误(指数中应有一个负号)。请参阅下面的答案。

嗨,我已经尝试过了,这几乎是我想要的。我想知道是否可以为快船添加一条曲线。听起来真的很模糊而且刺耳,有没有办法使推子弯曲,使它听起来更平滑更柔和?问这个,因为我刚刚开始为synthedit创建模块。我希望它能像驱动装置一样听起来更加平滑,说窦变得更多是弯曲的脉冲,而不是浸入的脉冲。

#1 楼

| x |表示绝对值-x / | x |该公式的位用于确保输入的符号保留在输出中。关于实现,是的,您列出的步骤是正确的。

评论


$ \ begingroup $
“真实失真”是什么意思?绝对您对原始信号进行的任何操作都会失真!你想做什么?
$ \ endgroup $
–小食
2013年12月12日上午10:31

$ \ begingroup $
失真是一个非常模糊的术语,它描述了任何会改变信号的(通常是不需要的)变换。吉他失真是通过许多不同的过程实现的-削波,整流,过载-取决于发生这种情况的踏板/放大器的类型-没有单一的“真实”公式……您所看到的公式会给出一个类S形函数,将模拟重载;但我认为这可能在某个地方有错误。
$ \ endgroup $
–小食
2013年12月12日上午11:00

$ \ begingroup $
您必须在时域中执行此操作。
$ \ endgroup $
–小食
2013年12月13日在22:56

$ \ begingroup $
因为这是吉他失真效果的工作方式。它们最初是由非线性元件制成的,例如管,二极管和后来的晶体管,其行为在时域中由非线性函数来描述。而您正在尝试以数字方式模拟...
$ \ endgroup $
–小食
2013年12月14日上午8:39

$ \ begingroup $
变调,花式和声发生器(例如EHX micro pog)或花式频谱变形(不记得产品名称)需要频域处理。某些放大器/扬声器模拟器需要长的卷积,这可以通过频域中的乘法有效地执行。但是在任何情况下,它永远都不会“占用信号的整个FFT”-这是通过小长度FFT(1024个样本左右)的重叠相加来实现的。
$ \ endgroup $
–小食
2013年12月14日在12:33

#2 楼

多亏了Olli Niemitalo的回答,我才确信书中给出的公式有符号错误。用于模糊或失真的非线性始终是某种类型的平滑削波函数,该函数会压缩输入信号。因此,较小的输入幅度几乎没有变化,而较高的输入幅度(或多或少)被软限幅了。而且Olli答案中显示的数字恰好相反。

所以我坚信正确的公式应该是

$$ f(x)= \ frac {x } {| x |} \ left(1-e ^ {-x ^ 2 / | x |} \ right)=
\ text {sgn}(x)\ left(1-e ^ {-| x |} \ right)\ tag {1} $$

对于较小的$ x $,我们有$ f(x)\ approx \ text {sgn}(x)| x | = x $ ,对于大(幅值),我们得到$ f(x)\ approx \ text {sgn}(x)$,即削波。

这是校正后的非线性$的图f(x)$(WolframAlpha):



也应像$(1)$中最右边的表达式一样简化公式,因为初学者可能是倾向于从字面上实现另一个公式,并尝试评估项$ x / | x | $和$ x ^ 2 / | x | $,这不必要地复杂,并且在$ x $接近零时也会带来麻烦。一个典型的实现如下所示:

if (x > 0)
   y = 1 - exp(-x);
else
   y = -1 + exp(x);
end


评论


$ \ begingroup $
是的,这本书误引用了web.archive.org/web/20070826204128/http://www.notam02.no/…,以上是正确的公式。
$ \ endgroup $
–奥利·尼米塔洛(Olli Niemitalo)
16-2-21在21:33

$ \ begingroup $
好的,谢谢。您认为这是本书的出处吗?
$ \ endgroup $
– Matt L.
16-2-22在8:29

$ \ begingroup $
是的,这本书引用了该学生的论文。挪威的第二篇学生论文的公式错误,并引用了第一篇学生论文。我没有费心去检查日期,看看这本书是否抄袭了第二篇论文而不检查原始资料,还是第二篇论文也仿照了这本书。
$ \ endgroup $
–奥利·尼米塔洛(Olli Niemitalo)
16-2-22在8:38

$ \ begingroup $
@OlliNiemitalo:错误传播的典型情况。我也不确定为什么他们使用像$ x ^ 2 / | x | $这样的愚蠢的表达式。正如我添加到答案中一样,一些初学者可能最终会从字面上实现它。
$ \ endgroup $
– Matt L.
16-2-22在8:40

#3 楼

您可以将函数的主体直接编写到Wolfram Alpha中并对其进行绘制:但是公式中有错误,请参阅@Matt L.的答案。

评论


$ \ begingroup $
现在,我了解了您的情况,我非常相信书中的公式是错误的。看我的答案。你怎么看?
$ \ endgroup $
– Matt L.
16年2月21日在19:54

$ \ begingroup $
@MattL。是的,这更有意义。该书的功能也正在下降,这将导致不必要的相位反转。
$ \ endgroup $
–奥利·尼米塔洛(Olli Niemitalo)
16年2月21日在20:07