【发布时间】:2015-10-14 09:05:12
【问题描述】:
我正在编写一个 Python 程序,以一个接一个地生成多个正弦扫描,具有不同的开始和结束频率以及不同的时间间隔。
一个例子是:
在 1 毫秒内从 0Hz 扫描到 170Hz
在 1 毫秒内从 170Hz 扫描到 170Hz
在 1 毫秒内从 170Hz 扫描到 10Hz
所以它应该是一个斜坡上升,斜坡下降波形。
我使用的方程式的灵感来自this thread
def LinearSineSweep(self, fStart, fEnd, samplingTime, samplesPerSecond):
nValues = int(samplesPerSecond * samplingTime)
for i in range(0, nValues):
delta = float(i) / nValues
t = samplingTime * delta
phase = 2 * math.pi * t * (fStart + (fEnd - fStart) * delta / 2)
return self._amplitude * math.sin(phase) + self._dcOffset
LinearSineSweep(0, 170, 0.001, 44100)
LinearSineSweep(170, 170, 0.001, 44100)
LinearSineSweep(170, 10, 0.001, 44100)
即使是频率的 10 倍,仍然不能组合成一个波形
这是数学问题还是编程问题?
【问题讨论】:
-
仅供参考:scipy 提供了函数
chirp(docs.scipy.org/doc/scipy/reference/generated/…),它可以做到这一点(以及更多)。 -
是的,我想过这个,但是 chirp 返回一个数组,我的数据集太大了,数组无法处理
-
您需要一种将灵态从一个呼叫转移到下一个呼叫的方法。您可以在图表中看到相位每毫秒重置为零。
-
你能检查问题中代码的缩进吗?你在循环中有你的
return语句。 -
正如@jaket 所说,您必须提供一种方法,以便将一个段末尾的阶段用作下一个段的开始阶段。这就是
scipy.signal.chirp的phi参数所提供的。
标签: python audio signals trigonometry