擅长:python、mysql、java
<p>在我看来,发电机很适合这项任务。在</p>
<p>有些信号具有有限的时间(如包络线或斜坡),但有些信号是无限的(如振荡器)。在</p>
<p>使用生成器,您不必担心这一点,因为-就像<code>zip()</code>函数一样,一个将振荡器与包络线结合(例如相乘)的函数只会消耗振荡器gen中的有限数量的项,因为至少有一个生成器生成有限数量的样本。在</p>
<p>然而,使用发电机是非常优雅和Python。在</p>
<p>回想一下这样的发电机:</p>
<pre><code>def sine(freq):
phase = 0.0
while True:
yield math.sin(phase)
phase += samplerate/freq
</code></pre>
<p>对这样的类来说只是语法上的甜点:</p>
^{pr2}$
<p>因此,性能开销并不比其他任何可以手工制作的解决方案多(比如块处理,通常在DSP算法中使用)。在</p>
<p>如果不生成单个样本,而是生成多个样本块(例如,一次生成1024个样本),也许可以获得一些效率。在</p>