2014-09-23 3 views
1

Я хочу синус с линейной частотой увеличения в диапазоне [f_start : f_stop] с течением времени.Scot Frequency Sweep In Python

Однако при создании соответствующего сигнала в Python последний период примерно в два раза превышает ожидаемую частоту, 2*f_stop.

Почему?

Здесь некоторый минимальный код Python, который иллюстрирует эту проблему:

import numpy 
import matplotlib.pyplot as plt 

Delta_t = 1  # Unit: Seconds 
samples = 1000 

total_time = samples*Delta_t 
t = numpy.linspace(0,total_time,num=samples) 

f_start = 1.0/total_time    # slow frequency (Period T = 1/f_start = 1000 samples) 
f_stop = 100.0/total_time   # high frequency (Period T = 1/f_stop = 10 samples) 
f_sweep = numpy.linspace(f_start,f_stop,num=samples) # Sweep from slow to high frequency 


# Create Sinusoids 
sinus_f_start = numpy.sin(2*numpy.pi*f_start*t) 
sinus_f_stop = numpy.sin(2*numpy.pi*f_stop*t) 
sinus_f_sweep = numpy.sin(2*numpy.pi*f_sweep*t) 


# Plot all sinusoids 
fig = plt.figure() 

fig.add_subplot(311) 
plt.plot(t,sinus_f_start)# Perfect! 1000 Samples per period. 

fig.add_subplot(312) 
plt.plot(t,sinus_f_stop) # Perfect! 10 Samples per period. 

fig.add_subplot(313) 
plt.plot(t,sinus_f_sweep)# Fail! Last period has 5 samples. 

plt.show() 

ответ

3
sin(w*t) => the angular velocity is d(w*t)/dt = w 

sin(w*t*t) => the angular velocity is d(w*t*t)/dt = 2*w*t 

поэтому воспринимается удвоение максимальной частоты

+0

Спасибо! Для реализации линейной развертки частота w = 2 * PI * (f_start + k/2 * t) с k параметром наклона. – Jack

+0

@Jack Если мы говорим, что аргумент синусоидальной функции является углом \ theta, и мы определяем угловую скорость как функцию времени (независимо от временной зависимости), нам нужно будет ИНТЕГРИРОВАТЬ угловую скорость по времени, т. Е. \ theta = \ theta_0 + \ int_ {t_0}^{t} \ omega (\ tau) d \ tau. Выражение, которое вы даете для линейного изменения угловой скорости, хорошо. Чао – gboffi