2017-12-05 7 views
1

시간이 지남에 따라 변하는 단일 톤, 주파수에서 (오디오) 신호를 만들려고합니다.파이썬에서 신호를 보낼 시간의 주파수 목록

난 1D NumPy와 어레이와 같은 톤 가지고 주파수를 = [100, 102, 103, 100, 115, 113, ..., 430]

모든 값 상당치 없음 N (가령, 100)의 샘플. 나는 그것이 모든 패턴 (N = 1)과 일치하는지 확인하는 방법을 안다. (시간 동안 성장하고 떨어질 수 있습니다.)

이제는이 주파수 '사인파'신호를 sinusoid 신호로 변환해야합니다.

나는 약 scipy.signal.sweep_poly (및 이와 유사한) 기능을 알고 있지만 주파수를 다항식으로 설명 할 수는 없습니다.

제발 도와주세요, 어떻게 주파수 목록에서 신호를 생성 할 수 있습니까?

정말 고마워요!

+0

'N = 1'하는 방법을 안다면 그냥 그 해결책을'freq = np.repeat (freq, N)'에 적용 할 수 없습니까? –

+0

@PaulPanzer 예, 알고 있습니다. 나는 시간의 변화하는 주파수와 함께 sinusoid 신호 (오디오 신호로서)를 생성 할 필요가있다. –

+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

이것은 정확히 내가 필요한 것입니다. 감사합니다 @ 폴 기갑 부대! –