向信号添加奇/偶谐波?

信息处理 声音的 信号检测 C 失真
2022-01-01 01:59:38

如何将奇数或偶数谐波添加到浮点信号?

我必须使用 tanh 还是 sin?

我想做的是实现一些非常简单的失真效果,但我很难找到准确的参考。我想要的是类似于Culture Vulture通过在其五极管和三极管设置中添加奇偶谐波所做的事情。浮点值是样本流中的单个样本。

2个回答

您的失真盒所做的是将非线性传递函数应用于信号:output = function(input)y = f(x)您只是将相同的函数应用于每个单独的输入样本以获得相应的输出样本。

当您的输入信号是正弦波时,会产生一种特定类型的失真,称为谐波失真失真产生的所有新音调都是输入信号的完美谐波:

  • 如果您的传递函数具有奇对称性(可以围绕原点旋转 180°),那么它将仅产生奇次谐波(1f、3f、5f、...)。具有奇对称性的系统的一个例子是对称削波放大器。
  • 如果您的传递函数具有偶数对称性(可以在 Y 轴上反射),那么产生的谐波将只是偶次谐波(0f、2f、4f、6f、...) 基波 1f 是奇次谐波,并且被移除。具有均匀对称性的系统的一个例子是全波整流器。

所以是的,如果您想添加奇次谐波,请将您的信号通过一个奇对称传递函数,例如y = tanh(x)y = x^3

如果您只想添加偶次谐波,请将您的信号通过一个偶数对称的传递函数加上一个恒等函数,以保持原始基频。y = x + x^4或之类的东西y = x + abs(x)x +保留了否则会被破坏的基波,而x^4偶对称的并且只产生偶次谐波(包括 DC,您可能希望之后使用高通滤波器将其去除)。

均匀对称:

具有均匀对称性的传递函数:

y = x^6 传递函数

原始信号为灰色,失真信号为蓝色,失真信号频谱仅显示偶次谐波而无基波:

y = x^6 谱

奇对称:

奇对称的传递函数:

y = x^7 传递函数

原始信号为灰色,失真信号为蓝色,失真信号频谱仅显示奇次谐波,包括基波:

y = x^7 谱

均匀对称 + 基本:

具有偶对称性的传递函数加上恒等函数:

y = x + x^4 传递函数

原始信号为灰色,失真信号为蓝色,失真信号频谱显示偶次谐波加基波:

y = x + x^4 谱

当人们说失真盒“添加奇次谐波”时,这就是人们所说的,但这并不准确。问题是谐波失真只存在于正弦波输入大多数人演奏乐器,而不是正弦波,因此他们的输入信号具有多个正弦波分量。在这种情况下,您会得到互调失真,而不是谐波失真,并且这些关于奇数和偶数谐波的规则不再适用。例如,对以下信号应用全波整流器(均匀对称):

  • 正弦波(仅基波奇次谐波)→全波整流正弦波(仅偶次谐波)
  • 方波(仅奇次谐波)→ DC(仅偶数次谐波)
  • 锯齿波(奇次谐波和偶次谐波)→三角波(仅奇次谐波)
  • 三角波(仅奇次谐波)→2×三角波(仅奇次谐波)

所以输出频谱在很大程度上取决于输入信号,而不是失真设备,每当有人说“我们的放大器/效果器产生更多音乐性的偶次谐波”时,你应该持保留态度

(有一些说法是,偶次谐波的声音比只有奇次谐波的声音“更具音乐性”,但这些频谱实际上并没有在这里产生,如上所述,而且这种说法仅在以下情况下有效无论如何都是西方音阶。奇次谐波声音(方波、单簧管等)在基于 3:1 比例而不是 2:1 八度音阶的Bohlen-Pierce 音阶上更加和谐。)

要记住的另一件事是,数字非线性过程可能会导致混叠,这可能很难听清。请参阅是否存在带限非线性失真之类的东西?

您试图达到的目标称为失真当您想向给定信号添加一些谐波时使用此技术。您有两种基本方法可以做到这一点:波形整形和环形调制。我将尝试解释第一个。

波形整形

Waveshaping允许您通过使用特别选择的功能进行失真。一种有用的方法是切比雪夫多项式它们有一个非常重要的特性,当通过它们填充单位幅度的谐波信号(例如,正弦波)时,我们获得相同的信号,只是高几倍。倍频器将取决于多项式的阶数。所有多项式如下所示:

 y=f(x)=d0+d1x+d2x2+d3x3++dNxN;

在我们的例子中,每个元素都会产生一个口琴,然后它们都加起来。每个成员的视图由以下递归关系确定:

Tk+1(x)=2xTk(x)Tk1(x);

其中,每个成员都是根据前一个成员确定的,都是从零开始的,在我们的例子中它等于一,第一个等于x(当然你可以改变它)

T0(x)=1;

T1(x)=x;

知道了就可以确定第三个和第四个:

T2(x)=2xx1=2x21;

T3(x)=2x(2x21)x=4x33x;

正如您可能猜到的那样,第二项 - 一次谐波,第三项 - 第二次等等。

切比雪夫多项式的另一个特点是,当通过它们给出幅度小于单位的信号时,输出的谐波饱和度较低。这允许创建过载效果。

毕竟,您的信号是一个浮点数组,您可以选择数组的任何部分并将切比雪夫多项式应用于它们,这将产生额外的谐波。并使用sin功能就足够了。