如何使用Python生成正弦波?

问题描述 投票:3回答:2

我试图在给定的持续时间内生成给定频率的正弦波,然后将其写入.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)

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

python numpy scipy waveform sine
2个回答
3
投票

更改

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的序列。相反,您需要样本的实际时间值(以秒为单位)。


0
投票

您正在混合样本值和长度!尝试:

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

另一个细节:你不需要围绕strraw_input

© www.soinside.com 2019 - 2024. All rights reserved.