数字失真效果算法


10

我在第124-125页阅读了UdoZölzer撰写的DAFX书中有关失真影响的书,它说该函数可以对失真进行适当的模拟:

f(x)=x|x|(1ex2/|x|)

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

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

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

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

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


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

Answers:


5

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


1
您所说的“真实失真”是什么意思?绝对您对原始信号执行的任何操作都会失真!你想做什么?
pichenettes 2013年

1
失真是一个非常模糊的术语,它描述了任何会改变信号的(通常是不需要的)变换。吉他失真是通过许多不同的过程实现的-削波,矫正,过载-取决于发生这种情况的踏板/放大器的类型-没有单一的“真实”公式...您所看到的公式会给出一个类似于S形的函数,可以模拟重载;但我认为在某处可能有一个错误。
pichenettes 2013年

1
您必须在时域中执行此操作。
pichenettes 2013年

1
因为这就是吉他失真效果的工作方式。它们最初是由非线性元件制成的,例如管,二极管和后来的晶体管,其行为在时域中由非线性函数来描述。而您正在尝试以数字方式模拟...
pichenettes

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

10

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

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

(1)f(x)=x|x|(1ex2/|x|)=sgn(x)(1e|x|)

xf(x)sgn(x)|x|=xf(x)sgn(x)

f(x)

在此处输入图片说明

(1)x/|x|x2/|x|x

如果(x> 0)
   y = 1-exp(-x);
其他
   y = -1 + exp(x);
结束

哦,是的,这本书错误地引用了web.archive.org/web/20070826204128/http://www.notam02.no/…,以上是正确的公式。
Olli Niemitalo '16

好,谢谢。您认为这是本书的出处吗?
马特·

是的,这本书引用了该学生的论文。挪威的第二篇学生论文的公式错误,并引用了第一篇学生论文。我没有费心检查日期,看看这本书是否抄袭了第二篇论文而不检查原始资料,还是第二篇论文也仿照了这本书。
Olli Niemitalo

1
x2/|x|

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.