2017-12-05 10 views
1

私は、時間の経過とともに変化する単一のトーン、周波数から(オーディオ)信号を作りようとしています。Pythonで信号を送る時間の周波数リスト

Iは1D numpyのアレイとしてトーンを有する: FREQ = [100、102、103、100、115、113、...、430]

すべての値の対応のないN(例えば100)のサンプル。私はそれがすべてのパターン(N = 1)に一致することを確認する方法を知っています。 (それは時間の間に成長して落ちることができます)

今私は、この周波数カーブを正弦波信号に変換する必要があります。

私は約scipy.signal.sweep_poly(と同様の)関数について知っていますが、周波数を多項式として表すことはできません。

私は、どのように周波数リストから信号を生成できますか教えてください。

ありがとうございました!

+0

あなたが 'N = 1'のやり方を知っていれば、その解決法を' freq = np.repeat(freq、N) 'に適用できませんか? –

+0

@PaulPanzerはい、これは私が知っています。私は時間の変化する周波数で正弦波信号(オーディオ信号として)を生成する必要があります。 –

+0

周波数は位相の派生物です。周波数が時間の経過とともに変化する場合は、現在の位相を周波数上の積分として計算する必要があります。これは@PaulPanzerが以下の答えで 'cumsum'と離散的に近似するものです。 – kazemakase

答えて

0

ない私はあなたが欲しいものを100%理解してどのようにわから:

freqs = np.random.uniform(100, 400, (20,)) 
times = np.cumsum(np.random.uniform(0.01, 0.02, (20,))) 
# or np.arange(20)/sample_freq if evenly sampled 
grid, dt = np.linspace(0, times[-1], 10000, retstep=True) 
signal = np.sin(2*np.pi*dt*np.cumsum(np.interp(grid, times, freqs))) 

これは、サンプリングされた時点の間の線形補間を使用しています。他の方法がありますscipy.interpolate

+0

これは私が必要とするものです。ありがとう@ポールパンツァー! –

関連する問題