如何使用 Python 生成正弦波?

新手上路,请多包涵

我试图在给定的持续时间内生成给定频率的正弦波,然后将其写入 .wav 文件。我正在使用 numpy 的 sin 函数和 scipy 的 wavfile 函数。我听到一种奇怪的声音,这绝对不是正弦波。

 import numpy as np
from scipy.io import wavfile

fs = 44100

f = int(raw_input("Enter fundamental frequency: "))
t = float(raw_input("Enter duration of signal (in seconds): "))

samples = np.arange(t * fs)

signal = np.sin(2 * np.pi * f * samples)

signal *= 32767

signal = np.int16(signal)

wavfile.write(str(raw_input("Name your audio: ")), fs, signal)

任何帮助,将不胜感激。我对正弦波或其他东西做了一些根本上不正确的假设吗?

原文由 Badrinarayan Rammohan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
1 个回答

改变

samples = np.arange(t * fs)

samples = np.linspace(0, t, int(fs*t), endpoint=False)

(这假定 fs*t 结果是一个整数值。)

或者,正如 Paul Panzer 在评论中所建议的那样,

 samples = np.arange(t * fs) / fs

您的 samples 只是整数序列 0, 1, 2, … fs*t 。相反,您需要样本的实际时间值(以秒为单位)。

原文由 Warren Weckesser 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏