簡體   English   中英

如何使用 Python 生成正弦波?

[英]How do I generate a sine wave using Python?

我試圖在給定的持續時間內生成給定頻率的正弦波,然后將其寫入 a.wav 文件。 我正在使用 numpy 的 sin function 和 scipy 的 wavfile function。我聽到一種奇怪的聲音,這絕對不是正弦波。

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)

任何幫助,將不勝感激。 我對正弦波或其他東西做了一些根本上不正確的假設嗎?

使用它並根據需要設置參數

start_time = 0
end_time = 1
sample_rate = 1000
time = np.arange(start_time, end_time, 1/sample_rate)
theta = 0
frequency = 100
amplitude = 1
sinewave = amplitude * np.sin(2 * np.pi * frequency * time + theta)
figure(figsize=(20, 6), dpi=80)
plt.plot(sinewave)

一種簡化的方法:

cycles = 2 # how many sine cycles
resolution = 25 # how many datapoints to generate

length = np.pi * 2 * cycles
my_wave = np.sin(np.arange(0, length, length / resolution))

生成:

[ 0.      0.4818  0.8443  0.998   0.9048  0.5878  0.1253 -0.3681 -0.7705
 -0.9823 -0.9511 -0.6845 -0.2487  0.2487  0.6845  0.9511  0.9823  0.7705
  0.3681 -0.1253 -0.5878 -0.9048 -0.998  -0.8443 -0.4818]

生成的正弦波


注意:盡管沒有解決音頻生成的正弦波問題,但仍將此答案留在這里,因為我發現對於我的應用程序,僅參數化波的長度和生成的數據點數量更為直觀,而不是基頻和以秒為單位的持續時間。

更改

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的序列。 相反,您需要樣本的實際時間值(以秒為單位)。

您正在混合樣本值和長度! 嘗試:

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

另一個細節:你不需要str周圍raw_input

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM