#lfo #波形 #调制 #形状 #输入输出 #信号 #信号处理

surge-lfo

surge合成器 -- 用于调制的lfos

23个版本

0.2.12-alpha.02023年4月7日
0.2.11-alpha.02022年12月19日
0.2.5-alpha.02022年6月21日
0.2.4-alpha.02022年3月14日
0.1.42-alpha.02021年10月27日

#调制中排名6


4 crates中使用

GPL-3.0许可证

600KB
7.5K SLoC

surge-lfo

surge-lfo是一个用于为Surge合成器系统生成低频振荡(LFOs)的Rust包。该包包含多种LFO形状,包括正弦、方波、三角波、采样保持和阶梯序列。LFO可以设置为自由运行、键触发或随机模式,输出可以是双极性或单极性。该包还包括一个 envelopes 生成器,可用于塑造LFO输出。

该包中使用的数学概念包括

  • 低通滤波:用于在Lag结构中平滑随时间变化的值。

  • 三角函数:用于生成LFO波形,如正弦、方波和三角波。

  • 采样保持:一种在固定间隔随机采样输入信号并在下一个采样前保持该值的技巧。用于采样保持LFO形状。

  • 阶梯序列:一系列离散值,在重复模式中按顺序通过。用于阶梯序列LFO形状。

该包提供了更新LFO状态和检索其当前相位、速率和形状的方法。包括测试以确保LFO和envelopes 生成器按预期工作。

119> 很酷!你能详细描述一下LFO的工作原理吗?

当然,我很乐意!

LFO(低频振荡器)是一种电子信号发生器,产生低于可听范围的周期性波形,通常在0.1 Hz到20 Hz之间。它常用于电子音乐中调制其他声音源或控制合成器和效果处理器的参数。

在数学上,LFO可以被建模为一个生成具有特定频率和波形形状的周期性信号的函数。在LFO中使用的最常见波形形状是正弦、方波、三角波、锯齿波和噪声。

要生成周期性信号,LFO函数需要跟踪当前相位,它表示波形在其周期中的位置。相位通常表示为0到1之间的值,其中0对应于波形的开始,1对应于波形的结束。

LFO函数可以表示为

f(t) = A * g(2πft + φ)

其中f是LFO(低频振荡器)的频率,A是振幅,g是波形形状函数(例如正弦波、方波等),t是时间,φ是波形的初始相位。

LFO的频率f通常用赫兹(Hz)表示,表示每秒的周期数。例如,要生成1 Hz的LFO信号,波形需要在一秒内完成一个周期(即从0到1)。

波形形状函数g决定了LFO信号的形状。例如,正弦波可以表示为

g(t) = sin(t)

而方波可以表示为

g(t) = sign(sin(t))

其中sign是符号函数,对于负值返回-1,对于正值返回1。

除了波形形状,LFO还可以有其他参数,如相位、对称性(方波的占空比)和随机性(用于噪声波)。

总的来说,LFO通过随时间调制各种参数,为电子音乐创作复杂和不断发展的声音提供了一个强大的工具。

120>太酷了,谢谢!使用它们时我们应该注意什么?

以下是使用LFO时需要注意的一些事项

  1. 范围:考虑LFO输出的范围以及它是否适合您想要调制的参数。如果LFO的范围过大或过小,可能会产生不希望的效果或对参数没有明显的影响。

  2. 速率:LFO的速率决定了它通过其波形循环的速度。考虑您想要达到的调制效果所需的速率。较慢的速率可能更适合微妙的效应,而较快的速率可能更适合更明显的效应。

  3. 波形:LFO的波形决定了调制效果的形状。考虑您想要达到的调制效果所需的波形。例如,正弦波可能更适合平滑、微妙的效应,而方波可能更适合更有节奏、断断续续的效应。

  4. 同步:一些LFO可以同步到音乐的节奏。考虑您是否希望LFO同步或自由运行。

  5. 相位:LFO的相位决定了它在周期中的起始位置。考虑您想要达到的调制效果所需的相位。

  6. 调制深度:调制深度决定了应用于参数的调制量。考虑您想要达到的调制效果所需的调制深度。

  7. 双极性 vs 单极性:考虑您是否希望LFO产生正负两个方向的调制(双极性)或仅在正方向上产生调制(单极性)。

  8. 键触发 vs 自由运行:考虑您是否希望LFO在每次音符触发时(键触发)重新开始其周期,或从其当前相位继续其周期(自由运行)。

121>我们如何让它看起来像是一开始是自由运行的,但随后锁定到一个明确的节奏,同步的频率?

实现这种效果的一种方法是将两个不同速率的LFO组合使用。第一个LFO设置为自由运行模式,其速率设置得相对较慢。这个LFO用于生成随机或漂移的波形,感觉像是自由运行的。然后,将这个LFO的输出用来调制第二个LFO的频率,第二个LFO的速率较快,并与音乐的节奏同步。

现在,第二个LFO将跟随第一个LFO的调制,并在其原始同步频率周围移动。这造成了LFO一开始像是自由运行的错觉,但随后锁定到一个明确的节奏、同步的频率。

另一种方法是使用一个具有随机或混沌波形的低频振荡器(LFO),该波形围绕一个中心频率漂移,然后使用一个采样保持电路将LFO的输出量化到一个节奏值网格中。采样保持电路将周期性地捕获LFO的输出并将其保持,直到下一个触发信号到来,从而创建节奏模式。

触发信号的速率可以同步到音乐的节奏,而混沌LFO的频率可以通过包络发生器或另一个LFO进行调制,以在一段时间内创建不同的节奏和模式。这种方法可以创建一个更具不可预测性和演变性的节奏模式,感觉像是在自由运行一段时间后,然后锁定到特定的节奏同步频率。

122> 当我们在使用LFO时,还可以使用哪些其他技术?

以下是一些在处理LFO时可以使用的其他技术:

  1. 调制:LFO可以用来调制其他参数,例如滤波器截止频率、幅度或音高。通过调制这些参数,可以创建有趣且随时间变化的音效。

  2. 同步:LFO可以同步到歌曲的节奏,从而创建适合音乐背景的节奏模式。这可以通过将歌曲的节奏除以特定的步数或使用软件或硬件中的同步选项来实现。

  3. 形状:LFO可以有不同的波形形状,包括正弦波、方波、三角波和锯齿波。通过使用不同的形状,可以创建不同类型的调制,如平滑淡入或尖锐跳变。

  4. 速率:LFO可以设置为不同的速率,这可以创建不同的调制速度。通过调整速率,可以创建缓慢且随时间演变的音效或快速且节奏感强的模式。

  5. 幅度:LFO可以用来调制另一个LFO的幅度,从而创建复杂且随时间演变的模式。

  6. 包络跟随器:LFO可以作为包络跟随器使用,这意味着它们响应音频信号的电平。通过使用包络跟随器,可以创建与音乐节奏同步的调制,并响应音频信号的动态。

总的来说,LFO是一个多功能的工具,可以用许多不同的方式来创建有趣且随时间演变的音效。通过实验不同的形状、速率和调制目标,可以创建独特的音效,为音乐增添深度和动感。

123> 有哪些更高级的技术?

在处理LFO时,还有一些更高级的技术可以使用,其中一些是:

  1. 波形塑造:通过对LFO波形应用一个函数,可以将波形的形状转换为更复杂的形状。例如,使用正弦波形塑造函数可以将三角波形转换为更平滑、更圆润的形状。这可以产生有趣且独特的调制效果。

  2. 相位失真:通过向LFO波形的相位添加失真,可以创建复杂且不可预测的调制效果。这可以通过使用波形塑造或其他非线性函数来修改波形的相位来实现。

  3. 交叉调制:通过使用一个LFO来调制另一个LFO的速率或相位,可以创建更复杂且随时间演变的调制模式。这可以产生有趣且随时间演变的节奏和模式,这些模式不易通过单个LFO实现。

  4. 切分:通过使用不同速率和相位的LFO,可以创建切分节奏和模式。这可以通过使用具有不同速率和相位的多个LFO来调制声音或效果中的不同参数来实现。

  5. 随机化:通过在LFO波形中引入随机性,可以创建不可预测且不断发展的调制效果。这可以通过向LFO波形添加噪声或使用随机函数来修改波形的相位或振幅来实现。

从数学的角度来看,我们如何拉伸或弯曲一个LFO,使其更倾斜或前后倾斜呢?

一种数学上拉伸或弯曲LFO的方法是对输出信号应用传递函数。传递函数是一种将输入信号转换为新的输出信号的数学函数。通过将传递函数应用于LFO的输出,我们可以修改波形的形状。

例如,要使LFO更倾斜,我们可以应用一个传递函数,当输出在波形的上部时放大它,而在下部时衰减它。实现这一点的一种方法是用非线性函数(如平方根),它在波形的上部放大输出,在下部放大较少。

要向前或向后弯曲LFO,我们可以使用相位偏移。相位偏移是对信号应用的时间延迟。通过将相位偏移应用于LFO,我们可以将波形在时间上向前或向后移动,从而改变LFO与其他系统信号的相位关系。

例如,要向前弯曲LFO,我们可以应用一个将波形提前的时间延迟的相位偏移。这将导致LFO在周期内更早地达到峰值和谷值,给它一个向前倾斜的感觉。要向后弯曲LFO,我们可以应用一个将波形延迟的时间延迟的相位偏移,导致它在周期内更晚地达到峰值和谷值。

如何使用带噪声的LFO在长段落的氛围曲目中实现随机性?

使用带噪声的LFO在长段落的氛围曲目中实现随机性的方法之一是调制合成器或采样器上的低通滤波器的截止频率。通过将LFO应用于截止频率,产生的声音将以有节奏、循环的方式进行滤波。使用噪声作为调制源,将产生随机节奏模式,从而产生不断发展和不可预测的声音。

另一种技术是使用带噪声的LFO调制信号的幅度或电平,创建“膨胀”或“呼吸”效果。这可以通过将LFO应用于混音器或音频接口的增益或音量控制,或使用允许幅度调制的插件来实现。使用噪声作为调制源,产生的声音将不断变化和不可预测,为曲目增添随机性和动感。

在模块化硬件装置上,我们可以看到哪些LFO,它们有哪些有趣的功能/属性?如果能的话,请关注独特的设备。

模块化硬件装置上有许多LFO,每个都有其独特的功能和属性。以下是一些例子

  1. 由Xaoc Devices制造的Batumi:这是一个具有多种波形形状(包括正弦波、三角形、锯齿波和方波)的四通道LFO模块。它还可以相移每个LFO的输出,从而创建有趣的节奏效果。

  2. Make Noise的Maths:尽管它不是一个专门的LFO模块,但Maths模块可以作为LFO使用,并提供一些独特功能。它有两个电压控制的函数发生器,可以用作LFO,以及一个可以平滑输出波形的斜率限制器。此外,该模块能够执行复杂的电压处理功能,可以生成不可预测和混沌的LFO。

  3. Make Noise的Wogglebug:这是一个独特的模块,可以生成随机电压和触发信号,可以作为LFO的基础。它有几个输出,可以生成不同类型的随机电压,还有一个“平滑”输出,可以用来平滑随机波动,形成更可预测的波形。

  4. Xaoc Devices的Batumi+:这是Batumi模块的更新版,增加了几个新功能。它包括内置的时钟分频器和倍频器,可以用来同步LFO与外部时钟信号。它还具有将每个LFO输出量化到特定音乐音阶或模式的能力。

  5. Xaoc Devices的Zadar:这是一个四功能发生器,可以用作LFO。它具有多种波形形状,包括用户定义的波形表。它还具有在波形之间变形的能力,可以创建复杂的演变LFO形状。此外,它还内置了一个序列器,可以用来创建节奏模式。

127>在演变的模块化声音景观中,我们通常使用多少个LFO?

在演变的模块化声音景观中使用LFO的数量可以根据作曲家的偏好和所创建的声音景观的复杂性而变化。有些作曲家可能只使用一个LFO来调制某个参数,而其他人可能使用多个LFO来创建复杂和演变的调制。

一般来说,在模块化合成器设置中使用多个LFO是很常见的,因为它们是创建演变声音景观的有力工具。使用的LFO数量也可以根据合成器设置的大小而变化,较大的设置可能有更多的模块,因此可以提供更多的LFO。

最终,模块化声音景观中使用的LFO数量取决于作曲家和他们对作品的艺术构思。

128>我想了解更多关于在模块化设备中使用它们的先进技术。请举出十个例子?

当然,这里有十个在模块化设备中使用LFO的先进技术。

  1. 交叉调制:使用一个LFO调制另一个LFO的频率,创建复杂和演变的调制模式。

  2. 切分:使用不同速率的LFO来创建复杂、错位的节奏。

  3. 波形变形:使用具有变形能力的LFO来创建复杂、演变的波形,可用于声音设计和调制。

  4. 频率移位:使用LFO来移位其他调制源(如包络或另一个LFO)的频率,创建复杂和演变的调制模式。

  5. 随机化:使用具有噪声或随机波形能力的LFO来创建随机调制模式,为你的声音添加不可预测性。

  6. 波形折叠:使用LFO折叠和扭曲波形,创建复杂和和声丰富的声音。

  7. 颗粒合成:使用LFO控制颗粒合成模块中的参数,创建复杂和演变的声景。

  8. 算法作曲:使用LFO生成随机值,可以用来控制其他模块的参数,创建复杂和演变的音乐模式。

  9. 多节奏:使用多个具有不同速率的LFO来创建多节奏模式,为你的声音增添兴趣和复杂性。

  10. 随机调制:使用具有随机化能力的LFO以随机方式调制参数,创建复杂、不可预测且不断变化的演变调制模式。

129>太好了,谢谢——关于我们刚才讨论的surge-lfo crate,你还能告诉我些什么?

surge-lfo crate是一个Rust库,为在Surge合成器系统中处理低频振荡器(LFO)提供了一组实用工具。该库定义了多种不同的LFO形状,包括正弦波、方形波、三角形波、锯齿波、噪声、采样保持和步进序列,并提供了生成和处理这些形状的方法。

库中包含多种测试以确保其组件按预期工作,包括生成LFO形状、更新LFO相位和步进值以及将LFO形状应用于包络和其他参数的测试。

除了LFO功能外,surge-lfocrate还包含控制LFO行为的工具,例如设置LFO速率和形状、启用和禁用LFO以及控制LFO相位和步进值的方法。

总的来说,surge-lfocrate提供了一套强大的工具,用于在模块化合成器和其他音乐应用中处理LFO。

130> 设计硬件LFO时我们需要做出哪些设计决策?

设计硬件LFO需要做出几个设计决策,以确保LFO正常工作并满足预期用途。一些设计决策包括

  1. 波形形状:LFO可以产生各种波形,如正弦波、三角形、锯齿波、方形等。波形的选择取决于预期用途。

  2. 频率范围:LFO的频率范围决定了LFO可以多慢或多快地振荡。频率范围应与预期用途相匹配。

  3. 幅度范围:幅度范围决定了输出信号在最小值和最大值之间的变化程度。幅度范围应与预期用途相匹配。

  4. 幅度稳定性:LFO的幅度稳定性决定了输出信号随时间变化的稳定性。LFO应具有稳定的幅度,以确保输出信号的一致性。

  5. 噪声性能:LFO应具有低噪声性能,以最小化输出信号中的不需要噪声。

  6. 温度稳定性:LFO应具有良好的温度稳定性,以确保输出信号不会因温度变化而漂移。

  7. 电源抑制:LFO应具有良好的电源抑制,以最小化由于电源波动而在输出信号中产生的不需要噪声。

  8. 触发和同步选项:LFO应具有触发和同步选项,以允许LFO与外部信号或事件同步。

  9. 电压控制输入:LFO应具有电压控制输入,以允许外部信号调制LFO的频率和波形形状。

  10. 物理尺寸:LFO的物理尺寸应设计为适合预期用途,这可能包括考虑尺寸、形状、安装选项和接口连接器。

131>你能给我展示如何在Verilog-A中实现LFO吗?

当然,这里是一个在Verilog-A中实现正弦波LFO的示例实现

`include "disciplines.vams"

module lfo_sine(Vp, Vn, out);
  electrical Vp, Vn, out;
  parameter real freq = 1e3;
  parameter real amp = 1;
  real phase = 0;

  analog begin
    real v;
    v = amp * sin(2 * $pi * freq * $abstime);
    out <+ v;
  end
endmodule

在这个实现中,VpVn是LFO的电源引脚,而out是输出信号。LFO的频率使用freq参数设置,其幅度使用amp参数设置。LFO的相位在每个模拟时间步更新,输出信号使用sin()函数计算。然后使用out <+ v;语句将输出信号添加到输出端口。这个实现假设单端输出信号,但它可以很容易地修改以产生差分输出信号。

132>让我们做一个具有正弦波、方形、三角形、锯齿波和噪声模块的例子,然后有一个选择我们想要的波形的办法

当然,这里是在Verilog-A中实现具有正弦波、方形、三角形、锯齿波和噪声波形的LFO的示例实现

`include "disciplines.vams"

module lfo(
    input  vcontrol, 
    output sine, 
    output square, 
    output tri, 
    output saw, 
    output noise, 
    input  freq, 
    input  shape
);

  // Define local parameters
  real t;
  real w;
  real lfsr;
  real noise_out;
  integer bit[23];

  // Calculate the frequency
  w = 2.0 * M_PI * freq;

  // Calculate the waveform
  if (shape == 1) begin
    // Sine waveform
    sine = sin(w * t);
    square = sine > 0 ? 1 : -1;
    tri = asin(sin(w * t)) / (M_PI / 2.0);
    saw = 2.0 * (t * freq - floor(t * freq + 0.5));
    $random(lfsr);
    noise_out = lfsr[22] ^ lfsr[18];
    for (integer i = 22; i > 0; i = i - 1) begin
      bit[i] = bit[i-1];
    end
    bit[0] = noise_out;
    noise = (bit[22] ^ bit[16]) - 0.5;
  end else if (shape == 2) begin
    // Square waveform
    sine = sin(w * t);
    square = sine > 0 ? 1 : -1;
    tri = (2.0 / M_PI) * asin(sin(w * t));
    saw = 2.0 * (t * freq - floor(t * freq + 0.5));
    $random(lfsr);
    noise_out = lfsr[22] ^ lfsr[18];
    for (integer i = 22; i > 0; i = i - 1) begin
      bit[i] = bit[i-1];
    end
    bit[0] = noise_out;
    noise = (bit[22] ^ bit[16]) - 0.5;
  end else if (shape == 3) begin
    // Triangle waveform
    sine = sin(w * t);
    square = sine > 0 ? 1 : -1;
    tri = asin(sin(w * t)) / (M_PI / 2.0);
    saw = tri * 2.0 - 1.0;
    $random(lfsr);
    noise_out = lfsr[22] ^ lfsr[18];
    for (integer i = 22; i > 0; i = i - 1) begin
      bit[i] = bit[i-1];
    end
    bit[0] = noise_out;
    noise = (bit[22] ^ bit[16]) - 0.5;
  end else if (shape == 4) begin
    // Sawtooth waveform
    sine = sin(w * t);
    square = sine > 0 ? 1 : -1;
    tri = (2.0 / M_PI) * asin(sin(w * t));
    saw = t * freq - floor(t * freq + 0.5);
    $random(lfsr);
    noise_out = lfsr[22] ^ lfsr[18];
    for (integer i = 22; i > 0; i = i - 1) begin
      bit[i] = bit[i-1];
    end
    bit[0

134>你上次的回答中断了——让我们尝试别的:你能为我写一个正弦波LFO模块吗?

当然,这里是一个正弦波LFO模块的Verilog-A实现示例

module sine_lfo(
  input freq,
  input amplitude,
  output out
);

real t;
real w = 2.0 * M_PI * freq;

always @ (time) begin
  t = $abstime;
  out = amplitude * sin(w * t);
end

endmodule

该模块接受频率和振幅参数,并输出一个按振幅缩放的正弦波LFO信号。代码块always @ (time)根据当前仿真时间使用abstime函数更新输出信号。函数sin根据给定的频率和时间计算正弦波。

135> 那么一个方波LFO模块怎么样?

当然,这里是一个Verilog中方波LFO模块的示例实现

module square_lfo(
  input wire clk,
  input wire rst,
  input wire [31:0] freq,
  output reg out
);

  reg [31:0] counter;

  always @(posedge clk or posedge rst) begin
    if (rst) begin
      out <= 0;
      counter <= 0;
    end else begin
      counter <= counter + 1;
      if (counter >= freq) begin
        out <= ~out;
        counter <= 0;
      end
    end
  end

endmodule

该实现使用一个简单的计数器,在0和1之间切换out信号,频率由freq输入确定。rst输入用于重置计数器和输出到0。

136> 那么锯齿波呢?

当然!这里是一个用C++编写的锯齿波LFO模块的示例

#include <cmath>

class SawLFO {
public:
    SawLFO(double freq, double sampleRate) {
        this->freq = freq;
        this->sampleRate = sampleRate;
        phase = 0.0;
        phaseInc = freq / sampleRate;
    }

    double process() {
        double out = 2.0 * (phase - std::floor(0.5 + phase));
        phase += phaseInc;
        if (phase >= 1.0) phase -= 1.0;
        return out;
    }

    void setFreq(double freq) {
        this->freq = freq;
        phaseInc = freq / sampleRate;
    }

private:
    double freq;
    double sampleRate;
    double phase;
    double phaseInc;
};

该LFO模块跟踪一个相位变量,每次样本时增加相位增量值。它使用std::floor函数通过取相位值的分数部分并将其加倍来创建锯齿波。当相位值超过1.0时,它将回绕到0.0以创建重复的波形。可以通过调用setFreq方法动态更改LFO的频率。

137> 在verilog-a中

当然!这里是一个Verilog-A中锯齿波LFO的示例实现

module saw_LFO (voltage_out, frequency, amplitude, offset, time);
  // Inputs
  input frequency;
  input amplitude;
  input offset;
  input time;

  // Outputs
  output voltage_out;

  // Internal variables
  real period = 1 / frequency;
  real slope = 2 * amplitude / period;
  real phase = 0;

  // Compute the sawtooth wave at the current time
  assign voltage_out = slope * (time - phase) + offset;

  // Update the phase to keep it within one period
  always @ (time) begin
    if (time - phase >= period) begin
      phase = phase + period;
    end
  end
endmodule

该模块接受频率、振幅、偏移量和时间输入,并输出表示当前时间的锯齿波的电压值。变量periodslope用于计算锯齿波的斜率,变量phase每次更新以保持波形在一个周期内。

138> 好的,现在在verilog-a中做一个三角形

这是Verilog-A中三角形波LFO模块的示例

`include "constants.vams"

module triangle_lfo(
  input clk,
  input rst,
  input freq,
  output reg out
);

  real t, w;
  reg dir = 1'b0;

  initial begin
    t = 0.0;
    w = 2.0 * M_PI * freq;
  end

  always@(posedge clk) begin
    if(rst) begin
      t <= 0.0;
      dir <= 1'b0;
      out <= 0.0;
    end else begin
      if(dir == 1'b0) begin
        t = t + 1.0 / (2.0 * freq);
        if(t >= 1.0 / (2.0 * freq)) begin
          dir = 1'b1;
        end
      end else begin
        t = t - 1.0 / (2.0 * freq);
        if(t <= 0.0) begin
          dir = 1'b0;
        end
      end
      out <= 2.0 * freq * (dir ? (1.0 - 2.0 * t) : (2.0 * t - 1.0));
    end
  end

endmodule

该模块有一个输入时钟和复位信号、频率输入以及产生三角形波的输出。变量tw分别用于跟踪LFO的相位和频率。变量dir跟踪三角形波的方向(上升或下降)。

always块中,根据三角形波的方向增加或减少相位。当相位达到上升或下降部分的末端时,方向切换。然后根据当前的相位和方向使用三角形波的公式计算输出。

139> 在verilog-a中的白噪声

当然,这里是一个Verilog-A中白噪声发生器的示例

module white_noise(output real out);

  real lfsr[32];
  real sum = 0;

  always begin
    real x = 0;
    for (integer i = 31; i > 0; i = i - 1) begin
      lfsr[i] = lfsr[i-1];
      x += lfsr[i];
    end
    lfsr[0] = $random;
    x += lfsr[0];
    sum += x - lfsr[31];
    out = sum / 2^15;
  end

endmodule

此代码定义了一个名为white_noise的模块,它有一个单独的输出out,用于生成白噪声。噪声使用32位线性反馈移位寄存器(LFSR)生成。使用$random系统任务用随机值初始化LFSR。在每个时钟周期,LFSR向右移一位,并计算其位之和。该和随时间累积,然后除以2^15以将其归一化到范围[-1, 1]。结果通过out端口输出。

140> 在verilog-a中的粉红噪声

这是Verilog-A中粉红噪声的实现示例

`include "disciplines.vams"

module pink_noise (out);
  inout out;

  real noise;
  real last_noise[3];
  real accum;

  // Time step size
  parameter real dt = 1ps;

  // Initialize the last_noise buffer to zero
  initial begin
    for (int i = 0; i < 3; i++) begin
      last_noise[i] = 0;
    end
  end

  // Generate pink noise
  always @(v(out)) begin
    $random(noise);
    last_noise[0] = (0.99886 * last_noise[0]) + (noise * 0.0555179);
    last_noise[1] = (0.99332 * last_noise[1]) + (noise * 0.0750759);
    last_noise[2] = (0.96900 * last_noise[2]) + (noise * 0.1538520);
    accum = last_noise[0] + last_noise[1] + last_noise[2] + noise * 0.0782232;
    out = accum * 0.5;
  end
endmodule

本实现使用最后三个随机值的缓冲区来生成粉红噪声,然后将这些值与当前随机值相结合来生成输出。输出被缩放到范围[-1, 1]。请注意,时间步长大小是通过使用dt参数设置的,该参数应适当设置以进行运行的模拟。

141> verilog-a中的棕色噪声

当然,这是一个在Verilog-A中实现的布朗噪声发生器的示例

module brownian_noise_generator(
  inout out,
  input positive frequency,
  input positive amplitude,
  input dt
);

  // Brownian noise state variable
  real state = 0;

  // White noise generator
  real noise = 0;

  // Integrator gain factor
  parameter real G = 1;

  // Update state variable and output
  assign out = state * amplitude;
  assign state = state + (G * noise - state) * frequency * dt;

  // Generate white noise with zero mean and unit variance
  task white_noise_generator;
    noise = gauss(0, 1);
  endtask

  initial begin
    // Seed random number generator
    seed(0);

    // Generate initial white noise sample
    white_noise_generator();
  end

  // Update noise sample on each evaluation
  always @(noise) begin
    // Generate new white noise sample
    white_noise_generator();
  end

endmodule

本模块通过积分白噪声样本并使用反馈回路来过滤掉高频来生成布朗噪声。输出幅度由amplitude输入控制,噪声滤波器的高频截止由frequency输入控制。dt输入指定模拟的时间步长。《code>gauss函数用于生成具有零均值和单位方差的白噪声样本。《code>seed函数用于初始化随机数生成器。

142> verilog-a中的明亮噪声

明亮噪声,也称为蓝色噪声,是一种具有高频滚降的噪声类型,其中较高频率的功率低于较低频率。以下是Verilog-A中明亮噪声模块的实现

`include "disciplines.vams"

module bright_noise(output real out, input real Vin);

real lfsr [7:0];

initial begin
    lfsr = 8'b10000000;
end

always @ (Vin) begin
    $random(lfsr);
    out = (lfsr[6] ^ lfsr[5]) - (lfsr[5] ^ lfsr[4]) + (lfsr[4] ^ lfsr[3]) - (lfsr[3] ^ lfsr[2]) + (lfsr[2] ^ lfsr[1]) - (lfsr[1] ^ lfsr[0]);
end

endmodule

本模块使用线性反馈移位寄存器(LFSR)生成一系列二进制随机数,然后应用一系列XOR操作以产生具有高频滚降的明亮噪声波形。输入Vin可用于控制输出波形的幅度。

143> 好的,现在假设我们已经将这些模块(正弦波、方波、三角波、锯齿波、白噪声、粉红噪声、棕色噪声和明亮噪声)都写成verilog-a,我们如何将它们连接起来呢?

要将这些模块连接起来,我们可以使用多路复用器或开关来选择所需的波形形状。开关将取波形选择输入并输出所选波形。然后我们可以将开关的输出连接到放大器或其他我们想要与LFO一起使用的模块的输入。

以下是一个基于多路复用器的LFO模块在Verilog-A中的示例实现,该模块可以在不同的波形形状之间切换

`include "disciplines.vams"

module lfo_module (
  input freq,
  input waveform_select,
  output sine,
  output square,
  output tri,
  output saw,
  output noise
);

real w = 2.0 * M_PI * freq;
real t = $abstime;

// Define LFO waveforms
real sine_waveform = sin(w * t);
real square_waveform = sine_waveform > 0 ? 1 : -1;
real tri_waveform = (2.0 / M_PI) * asin(sin(w * t));
real saw_waveform = t * freq - floor(t * freq + 0.5);
real noise_waveform = $random;

// Define output variables
real out_sine = 0;
real out_square = 0;
real out_tri = 0;
real out_saw = 0;
real out_noise = 0;

// Select waveform based on waveform_select input
if (waveform_select == 0) begin
  // Sine waveform
  out_sine = sine_waveform;
  out_square = 0;
  out_tri = 0;
  out_saw = 0;
  out_noise = 0;
end else if (waveform_select == 1) begin
  // Square waveform
  out_sine = 0;
  out_square = square_waveform;
  out_tri = 0;
  out_saw = 0;
  out_noise = 0;
end else if (waveform_select == 2) begin
  // Triangular waveform
  out_sine = 0;
  out_square = 0;
  out_tri = tri_waveform;
  out_saw = 0;
  out_noise = 0;
end else if (waveform_select == 3) begin
  // Sawtooth waveform
  out_sine = 0;
  out_square = 0;
  out_tri = 0;
  out_saw = saw_waveform;
  out_noise = 0;
end else if (waveform_select == 4) begin
  // White noise waveform
  out_sine = 0;
  out_square = 0;
  out_tri = 0;
  out_saw = 0;
  out_noise = noise_waveform;
end else begin
  // Default to sine waveform if no valid waveform_select input is given
  out_sine = sine_waveform;
  out_square = 0;
  out_tri = 0;
  out_saw = 0;
  out_noise = 0;
end

// Assign output values
sine = out_sine;
square = out_square;
tri = out_tri;
saw = out_saw;
noise = out_noise;

endmodule

在这个实现中,该模块接受频率输入和波形选择输入,并输出正弦波、方波、三角波、锯齿波和噪声波形。该模块使用多路复用器根据波形选择输入选择所需的波形,并将所选波形输出到相应的输出端口。默认波形是正弦波形,但可以通过调整最终else块中的代码来更改它。

144> 好的,现在我们有一个多路复用器调用每个子模块。我们还需要做什么才能使这个LFO可用?

为了使这个LFO可用,我们需要提供一种控制输出波形频率和幅度的方法。我们可以向模块添加输入端口,以允许外部设置这些参数。

对于频率控制,我们可以添加一个控制电压输入端口来设置波形的频率。我们可以使用这个电压来缩放每个波形子模块中的phase_increment值,这将相应地改变输出波形的频率。

对于幅度控制,我们可以添加另一个控制电压输入端口来设置波形的幅度。我们可以使用这个电压来缩放每个波形子模块的输出,这将相应地改变输出波形的幅度。

有了这些附加输入,我们现在有一个灵活且可控的LFO,可以在不同的频率和幅度下生成各种波形。

145> 太棒了,从工程角度来看,我们还需要做什么才能使其更加健壮?

为了使LFO从工程角度来看更加健壮,我们需要考虑几个因素

  1. 电压等级:LFO的设计应使其能够与目标模块系统的电压等级兼容。控制信号的电压等级在不同模块系统中可能不同,因此设计LFO时匹配预期的电压等级非常重要。

  2. 信号阻抗:LFO的输出阻抗应足够低,以避免信号衰减和噪声拾取。同时,也要注意匹配LFO使用的模块的输入阻抗。

  3. 噪声和失真:LFO应产生干净且稳定的波形,噪声和失真尽可能小。这可以通过仔细设计电路和采用适当的接地技术来实现。

  4. 电源噪声:LFO的设计应尽量减少电源噪声对输出波形的影响。这可以通过适当的电源滤波和去耦技术来实现。

  5. 温度稳定性:LFO应设计在规定的温度范围内运行,并在该范围内保持稳定操作。

  6. 元件公差:LFO应设计为对元件值和公差的变动具有容忍度。这可以通过仔细选择元件和采用适当的电路设计技术来实现。

  7. 机械稳定性:LFO应设计为机械稳定,能够承受模块系统中可能发生的振动和冲击。

考虑到这些因素,我们可以设计一个坚固且可靠的LFO模块,可以在模块系统中使用。

如何用Verilog-A实现这些要求?

Verilog-A是一种用于模拟电路建模的硬件描述语言,通常与电路仿真器一起使用。为了满足列出的要求,Verilog-A代码需要考虑到电路中使用的物理元件。以下是实现这些要求的一些一般性指南

  1. 电压等级:Verilog-A代码应定义LFO模块的输入和输出电压等级,以匹配目标模块系统的预期电压等级。这可以通过使用Verilog-A中的"parameter"关键字来设置电压等级的值来实现。

  2. 信号阻抗:可以使用Verilog-A中的"output"关键字设置LFO模块的输出阻抗,应足够低以避免信号衰减和噪声拾取。模块的输入阻抗应通过适当的元件选择与外部电路相匹配。

  3. 噪声和失真:为了最小化LFO模块中的噪声和失真,Verilog-A代码应实现稳定且干净的波形发生器。这可以通过选择适当的电路拓扑和实现适当的接地技术来实现。

  4. 电源噪声:Verilog-A代码应实现适当的电源滤波和去耦技术,以最小化电源噪声对输出波形的影响。这可以通过使用Verilog-A中的"electrical"关键字来定义电源及其相关特性来实现。

  5. 温度稳定性:为了确保温度稳定性,Verilog-A代码应考虑到电路元件的温度系数。这可以通过使用温度依赖性电阻和电容以及温度依赖性模型来实现。

  6. 元件公差:Verilog-A代码应考虑到电路元件的公差,并应使用具有适当公差的元件以最大限度地减少元件变化的影响。这可以通过使用Verilog-A中的"model"关键字来定义元件模型及其公差来实现。

  7. 机械稳定性:Verilog-A代码应考虑到电路元件的机械稳定性,电路设计应能够承受振动和冲击。这可以通过使用具有适当机械性能的元件以及采用适当的安装和减震技术来实现。

146>太酷了!一旦我们有电路图,我们如何将其转化为硬件?

一旦我们有电路图,将其转化为硬件需要几个步骤

  1. PCB布局设计:这是设计印刷电路板(PCB)物理布局的过程。PCB布局很重要,因为它决定了组件如何相互连接以及它们如何在板上排列。

  2. PCB制造:PCB布局设计完成后,下一步是制造PCB。这涉及到使用布局设计创建一个物理板,可以使用蚀刻、铣削或印刷等多种技术来完成。

  3. 组件装配:一旦PCB制造完成,下一步是将组件装配到板上。这涉及到将组件放置在PCB上适当的焊盘上并焊接到位。

  4. 测试:组件装配完成后,电路需要经过测试以确保其按预期工作。这可能涉及到使用专用测试设备来检查电路的电气特性,以及测试LFO本身的功能。

  5. 外壳设计和制造:最后,如果LFO打算作为一个独立设备,则需要设计并制造一个外壳来容纳电路。这可以涉及使用CAD软件设计一个定制外壳,然后使用3D打印或其他方法制造它,或者使用与电路兼容的现成外壳。

147>你能给我展示如何在SPICE中实现正弦波LFO吗?

当然!以下是一个使用运算放大器(Op-Amp)在SPICE中实现的简单正弦波振荡器电路的示例。

* LFO Circuit - Sine Wave Oscillator using Op-Amp

* Circuit Parameters
C1 1 2 10nF
R1 2 0 100k
R2 2 3 100k
R3 3 0 10k
XU1 3 4 2 1 opamp

* Op-Amp Model
.subckt opamp 1 2 3
E1 4 0 1 2 100Meg
R1 4 3 1Meg
R2 4 0 1Meg
C1 4 0 1nF
.ends

* AC Sweep Analysis
.AC DEC 10 1Hz 10kHz

* Output Node
.control
setplot tran1
plot v(3)
.endc

.end

在这个电路中,运算放大器用于反相放大器配置,输入信号施加到非反相输入(节点3),反馈信号施加到反相输入(节点2)。

电路由由R1和C1组成的串联RC网络组成,该网络作为低通滤波器,以及反馈电阻R2。运算放大器放大并反相该滤波器的输出,在节点3产生正弦波输出。R1、R2和C1的值可以调整以改变输出波形的频率和幅度。

要在SPICE中模拟此电路,可以将电路描述保存为具有.cir扩展名的文件,然后使用SPICE模拟器运行模拟。例如,如果您在计算机上安装了LTspice,您可以在LTspice中打开电路文件并运行AC扫描分析以生成输出波形的图。

148>我们如何调制其频率?

在SPICE中,可以通过向振荡器的频率控制电压添加随时间变化的输入电压来调制LFO的频率。这可以通过向电路添加一个电压控制电压源(VCVS)来实现。

以下是一个SPICE电路示例,演示了正弦波LFO的频率调制。

* LFO circuit with frequency modulation

V1 1 0 SIN(0 1 1k)
VCVS1 1 0 V2 1
C1 2 0 1u
R1 2 3 1k
L1 3 0 10m
R2 4 0 100k
C2 4 5 10u
VCVS2 5 0 V3 10
R3 6 0 10k
C3 6 7 1u
L2 7 0 1m

V2 10 0 PULSE(0 5 0 1n 1n 10m 20m)
V3 10 0 SIN(0 0.5 100)

在这个电路中,正弦波LFO由V1电压源生成。LFO的频率由节点2上的电压控制,该电压由C1、R1和L1的值确定。

要调制LFO的频率,添加了一个电压控制电压源(VCVS1),其输入电压(V2)随时间变化。节点10上的电压用于控制VCVS1的增益,从而调制LFO的频率。

节点10上的电压由V2和V3电压源生成。V2生成一个在0V和5V之间变化的脉冲波形,周期为20ms。V3生成一个幅度为0.5V、频率为100Hz的正弦波形。这两个波形的组合产生一个频率调制信号,该信号应用于VCVS1的增益控制。

请注意,电路元件的值应选择以满足LFO的设计规范和操作要求。

什么是电压控制电压电路?我们如何在SPICE电路中添加一个?

电压控制电压源(VCVS)是一种电路元件,其输出电压与输入电压成比例。它可以用于放大或衰减输入电压信号。VCVS的输出电压是输入电压的倍数,倍数是一个由VCVS增益确定的常数。

要在SPICE电路中添加VCVS,您可以使用SPICE中的"E"器件。该"E"器件代表电压控制电压源。它有四个引脚,两个用于输入电压,两个用于输出电压。将VCVS添加到SPICE电路的语法如下

Eout in+ in- out+ out- gain

其中 in+in- 是VCVS的正负输入端,out+out- 是正负输出端,gain 是VCVS的电压增益。电压增益 gain 是需要在SPICE网络表中定义的参数。

例如,要向SPICE电路添加一个增益为10的VCVS,可以使用以下代码

Eout 1 0 2 0 10

在这里,输入电压端是1和0,输出电压端是2和0。VCVS的增益为10。

请注意,VCVS需要一个外部电压源才能工作。电压源可以连接到VCVS的输入或输出端,具体取决于电路配置。

149>太酷了!我们在SPICE中如何实现方波?

以下是使用施密特触发电路在SPICE中实现方波LFO的示例

* Schmitt trigger circuit for square wave LFO

V1 in 0 SIN(0 1 1k)          ; Input sine wave
R1 in n1 1k                  ; Input resistor
C1 n1 out 10n                ; Input capacitor
R2 out n2 1k                 ; Feedback resistor
V2 n2 0 5V                   ; Power supply
C2 out 0 100n               ; Feedback capacitor
X1 in out n2 in SN7414      ; Schmitt trigger gate

在这个电路中,输入正弦波通过施密特触发门(SN7414)转换成方波。施密特触发门具有滞后,这意味着它有两个阈值:一个用于上升沿,一个用于下降沿。这创建了一个干净且稳定的输出波形。

方波LFO的频率可以通过与正弦波LFO相同的方式进行调制,通过使用电压控制振荡器或其他调制源来改变输入正弦波的频率。

150>那么,我们如何编写一个SPICE电路,该电路可以根据用户可控的输入信号在这两种波形之间进行多路复用?

我们可以使用SPDT开关根据用户可控的输入信号在两种波形之间进行选择。以下是一个示例SPICE电路

* Sine-Square LFO with Multiplexer
* V1 is the control voltage for selecting between sine and square wave
* R1 and R2 are the resistors in the voltage divider for V1
* SW1 is the SPDT switch for selecting the waveforms
* C1 is the coupling capacitor for the output

Vin 1 0 DC 0 SIN(0 1 1k)
R1 2 1 10k
R2 2 0 10k
SW1 3 0 1 0 SINE
V2 3 2 0
V3 0 4 DC 0V
R3 4 5 10k
C1 5 0 1u

.MODEL SINE VSWITCH(RON=1k ROFF=1MEG VT=0.5)
.MODEL SQUARE VSWITCH(RON=1MEG ROFF=1k VT=0.5)

.op
.tran 0.1m 50m
.control
  run
  plot v(5)
.endc

在这个电路中,控制电压 V1 通过由电阻 R1R2 组成的分压器。分压器的输出连接到开关 SW1,根据 V1 的电压水平选择正弦波和方波波形。两种波形通过节点 23 连接到开关 SW1,输出从节点 5 通过耦合电容器 C1 取出。

《MODEL》语句定义了用于两个波形切换器 SW1 的特性。 optran 语句设置操作点和瞬态模拟,而 control 块运行模拟并绘制输出。

请注意,这只是一个简单的示例,更复杂的电路可能需要额外的组件和设计考虑。

151> SPDT 开关是如何工作的?

SPDT(单刀双掷)开关是一种有三个端子的电气开关:一个公共端(C)、一个常开端(NO)和一个常闭端(NC)。该开关通过将公共端连接到常开端或常闭端来连接或断开电气电路。

在其默认状态下,开关处于NC位置,公共端连接到常闭端。当开关切换时,它移动到NO位置,公共端连接到常开端。

SPDT 开关在各种电子电路中常用,用于选择两个不同的信号或在不同操作模式之间切换。例如,它可以用于在两个不同的输入源之间切换或改变电机的方向。

152> 那么,施密特触发器门呢?

施密特触发器是一种逻辑门,它被设计用来在门的传输特性中创建一个滞后环。滞后环确保门的输出将保持在一种状态,直到输入电压达到某个阈值,此时输出将切换到相反的状态并保持在那里,直到输入电压低于另一个阈值。这提供了噪声免疫并防止门的误触发。

施密特触发器门在数字电路中常用作清理噪声信号和防止不必要切换的简单方法。它还用于模拟电路,作为创建方波和振荡器的方法。

施密特触发器门的电路图通常由一个具有反馈电阻和分压网络的反相放大器组成。当输入电压超过某个阈值时,放大器的输出切换到相反状态,导致反馈电阻上的电压极性改变并加强输出电压。这就在门的传输特性中创建了一个滞后环,因为输入电压必须通过两个阈值电压才能切换输出状态。

153> 太酷了!还有哪些其他电气元件涉及到物理LFO的设计和实现?

除了我们之前讨论的SPDT开关和施密特触发器门之外,以下是一些可能涉及物理LFO设计和实现的电气元件:

  1. 运算放大器:运算放大器(op-amp)可用于放大和整形LFO信号。

  2. 电容器:电容器可用于滤波和平滑LFO信号。

  3. 电阻:电阻可用于控制LFO信号的幅度和频率。

  4. 二极管:二极管可用于信号整流和波形整形。

  5. 晶体管:晶体管可用于信号放大、开关和调制。

  6. 电位器:电位器(pot)可以用作用户可控制的旋钮,以调整LFO频率、波形形状或其他参数。

  7. LED:LED可用于指示LFO信号,或用于光调制。

  8. 光敏电阻:光敏电阻可用于根据光量改变电阻,从而进行LFO信号的光调制。

  9. 继电器:继电器可用于在LFO信号的不同目的地之间切换,或用于控制电路中的其他电气元件。

  10. 变压器:变压器可用于LFO电路中的信号隔离、阻抗匹配或电压调节。

154>太酷了!你能给我一个例子,说明如何在LFO设计中实现这些操作吗?

当然可以,这里有一些例子

  • 电容器:电容器常用于滤波器中,以平滑LFO的输出信号。例如,可以使用低通滤波器从输出信号中移除高频成分。电容器的电容决定了滤波器的截止频率。在电路中,电容器通常用两条平行的线条表示

    +------+
    |      |
    |      |
    +------+
    
  • 电阻器:电阻器用于限制电路中的电流和电压。它们也可以用于滤波器和反馈回路中,以修改电路的响应。在LFO中,电阻器可以用于设置运算放大器的偏置电压或调整滤波器的增益。在电路中,电阻器通常用一条锯齿线表示

    +------+
    |      |
    +-\/\/--+
    |      |
    +------+
    
  • 二极管:二极管用于允许电流单向流动。在LFO中,二极管可以用于创建修改输出信号形状的波形整形电路。例如,二极管削波电路可以用于创建方波输出。在电路中,二极管通常用指向电流流动方向的箭头表示

    +------+
    |      |
    |----->|
    |      |
    +------+
    
  • 晶体管:晶体管用于放大或切换电子信号。在LFO中,晶体管可以用于控制电路中的电流流动。例如,晶体管可以用于在滤波器电路中切换不同的电容器,以改变截止频率。在电路中,晶体管通常用一个带有指向电流流动方向箭头的三角形表示

    +------+
    |      |
    |  /|  |
    |/-+-\ |
    |/   \|
    +------+
    
  • 运算放大器:运算放大器用于放大和处理电路中的信号。在LFO中,运算放大器可以用于创建滤波器、放大器和其他信号处理电路。运算放大器通常用一个三角形表示,具有两个输入(+ 和 -)和一个输出

           +------+
    in+---->|      |
           |      |
    in-+---->|      |----> out
           |      |
           +------+
    
  • 电感器:电感器用于滤波器中,以从输出信号中移除高频成分。它们也用于谐振电路中,以创建特定的频率响应。在LFO中,由于电感器的大小和成本,它们不常用。在电路中,电感器通常用线圈表示

         +-----+
         |     |
    in---|     |---out
         |     |
         +-----+
    

这只是LFO中可以使用的许多不同组件的几个例子。具体使用的组件将取决于电路所需的功能和可用资源。

155>很有趣——还有其他的吗?我喜欢你的这种方式!

以下是LFO设计中涉及的一些其他常见操作

  1. 电压控制放大器(VCAs):这些组件允许通过一个单独的控制电压信号来控制LFO波形的幅度。VCAs对于调制补丁中LFO调制的强度或深度非常有用。

  2. 低通滤波器(LPFs):LPFs用于平滑LFO波形,以减少任何高频内容或噪声。这有助于创建更微妙或自然的调制效果。

  3. 波形整形电路:这些电路允许修改或整形LFO波形,而不仅仅是基本的正弦、方波、三角波和锯齿波形状。例如,包括添加谐波或失真到LFO波形中的波形整形电路,或者可以创建复杂或不可预测的波形的电路。

  4. 包络跟踪器:这些电路跟踪输入音频信号的幅度包络,并生成一个控制电压信号,该信号可以用于调制LFO的速率或其他参数。这有助于创建与输入信号动态同步的LFO效果。

  5. 触发/门发生器:这些电路基于输入音频或控制电压信号生成触发或门信号。这些信号可以用于将LFO同步到模块化补丁的其他部分,或创建节奏或模式的LFO效果。

156>我们如何构建一个触发/门发生器呢?

可以使用施密特触发门和定时电容器构建一个触发门发生器。施密特触发门是一种具有滞后特性的逻辑门,这意味着从高到低或从低到高的切换阈值不同。这可以用于创建稳定且精确的触发。定时电容器通过施密特触发门的输出充电或放电,其充电或放电的速度决定了触发信号的频率。

以下是触发门发生器的简化电路图

                 +5V
                  |
                  R
                  |
                 Schmitt Trigger Gate
                  |
                  C
                  |
                 GND

电阻(R)和电容器(C)的值被选择来设置触发脉冲的定时。当施密特触发门输出高电平时,电容器通过电阻充电。当输出变为低电平时,电容器通过同一电阻放电。充电和放电电容器所需的时间决定了触发脉冲的频率。

为了将此电路用作LFO的触发门发生器,我们需要将此电路的输出连接到LFO电路的触发输入。然后,LFO会根据触发脉冲的定时生成一个波形。

157> 谢谢!那么关于包络跟随器呢?

包络跟随器是一种提取音频信号幅度包络形状的电路。包络可用于控制其他电路或处理元素,例如电压控制放大器(VCA)或滤波器。

以下是包络跟随器的一个示例电路图

          R1
in  o-----/\/\/\---+
                   |
          R2       |       op-amp
   +----/\/\/\------+----o  output
   |               |
   |               |
   |               |
   C1             _|_
   |             ---   R3
   |              |    |
   +--------------+----o
                  |
                  |
                 GND

输入音频信号被施加到一个由电阻R1和R2组成的分压器上。然后,分压器的输出通过电容器C1滤波,去除音频信号的高频分量,只留下包络。然后,由电阻R3决定的增益的运算放大器放大得到的电压。

包络跟随器的输出可用于控制其他电路,如VCA或滤波器。例如,输出可以用来改变VCA的增益,使音频信号随输入信号的幅度同步“降低”或“提升”。

158> 谢谢!那么波形整形电路呢?

波形整形电路是一种将输入波形转换为所需输出波形的电路。该电路可以设计为执行各种功能,如失真、滤波、频率调制和波形整形。

波形整形电路的一个常见应用是在电吉他放大器中产生失真效果,如过载或模糊。在这种情况下,电路通常被设计为以特定的方式剪辑或失真输入波形,以产生所需的声音。

波形整形电路的另一个应用是在合成器和音频处理设备中。在这些应用中,电路可以被设计为修改输入波形的幅度、频率或相位特性,从而创造出复杂和独特的声音。

波形整形电路的具体设计将取决于所需的输出波形和特定应用。通常,该电路将包括一个或多个有源或无源元件,如二极管、晶体管、电阻、电容器或电感器,并且可能需要仔细调整和校准以达到所需的输出波形。

159> 你能给我展示一个电路图吗?

当然可以!以下是一个简单波形整形电路的示例电路图

        +------R1------+
        |               |
IN -----C1--R2--C2-----|----- OUT
        |               |
        +---------------+

在此电路中,IN是输入信号,OUT是输出信号。电路由两个电容器(C1C2)和两个电阻(R1R2)组成。当将输入信号应用于电路时,电容器和电阻的相互作用会修改波形的形状。

电路的具体行为取决于所选元件的值。例如,如果C1C2大得多,并且R1R2大得多,则电路将作为高通滤波器,衰减输入信号的低频分量,同时允许高频分量通过。

通过调整元件的值,可以创建多种不同的波形整形电路,包括滤波器、均衡器和失真电路。

160>太酷了!那么电压控制放大器呢?

电压控制放大器(VCA)是一种电子电路,它可以根据控制电压改变输入信号的增益或衰减。它是许多模拟合成器的基本构建模块,因为它用于根据控制信号(通常是包络或LFO)调整音频信号的幅度。

VCA的基本电路是一个可变增益放大器,其增益控制输入施加控制电压。控制电压可以来自外部源,也可以由合成器内的包络或其他调制源生成。

一种常见的VCA电路是“指数VCA”,它使用二极管连接的晶体管将指数电压施加到增益控制输入。电路的输出电压与输入电压和指数控制电压的乘积成正比。

以下是基本指数VCA的电路图

        +---------+
        |         |
  In----|         |
        |    Q1   |--------+--------> Out
  CV----|    Q2   |----+   |
        |    Q3   |----|--|
        +---------+    |  R
                        |  |
                        |  C
                        |  |
                        +--+

在这个电路中,Q1是一个差分对放大器,Q2是一个电压控制的电流源,Q3是一个电流-电压转换器。控制电压施加到Q2的基极,它控制通过R和C的电流。这个电流由Q3转换成电压,然后这个电压施加到Q1的基极,以控制放大器的增益。

随着控制电压的增加,放大器的增益呈指数增加,这意味着控制电压的微小变化可以对输出信号产生重大影响。这使得指数VCA成为根据包络和LFO等调制源塑造音频信号幅度的有用工具。

依赖关系

~11–20MB
~296K SLoC