-
sdr.sinusoid(duration: float, freq: float =
0.0, freq_rate: float =0.0, phase: float =0.0, sample_rate: float =1.0, complex: bool =True) NDArray Generates a complex exponential or real sinusoid.
- Parameters:¶
- duration: float¶
The duration of the signal in seconds (or samples if
sample_rate=1).- freq: float =
0.0¶ The frequency \(f\) of the sinusoid in Hz (or 1/samples if
sample_rate=1). The frequency must satisfy \(-f_s/2 \le f \le f_s/2\).- freq_rate: float =
0.0¶ The frequency rate \(\frac{df}{dt}\) of the sinusoid in Hz/s (or 1/samples\(^2\) if
sample_rate=1).- phase: float =
0.0¶ The phase \(\phi\) of the sinusoid in degrees.
- sample_rate: float =
1.0¶ The sample rate \(f_s\) of the signal.
- complex: bool =
True¶ Indicates whether to generate a complex exponential or real sinusoid.
True: \(\exp(j\theta(t))\)False: \(\cos(\theta(t))\)
- Returns:¶
The sinusoid \(x[n]\).
Notes¶
The instantaneous frequency is
\[ f(t) = f + \frac{df}{dt} t \]The phase is the time integral of the instantaneous frequency plus the initial phase.
\[ \theta(t) = 2 \pi \int_0^t f(\tau)\,d\tau + \phi = 2 \pi \left(f t + \frac{1}{2}\frac{df}{dt}t^2\right) + \phi \]Examples¶
Create a complex exponential with a frequency of 10 Hz and phase of 45 degrees.
In [1]: sample_rate = 1e3; \ ...: N = 100; \ ...: lo = sdr.sinusoid(N / sample_rate, freq=10, phase=45, sample_rate=sample_rate) ...: In [2]: plt.figure(); \ ...: sdr.plot.time_domain(lo, sample_rate=sample_rate); \ ...: plt.title(r"Complex exponential with $f=10$ Hz and $\phi=45$ degrees"); ...:Create a real sinusoid with a frequency of 10 Hz and phase of 45 degrees.
In [3]: lo = sdr.sinusoid(N / sample_rate, freq=10, phase=45, sample_rate=sample_rate, complex=False) In [4]: plt.figure(); \ ...: sdr.plot.time_domain(lo, sample_rate=sample_rate); \ ...: plt.title(r"Real sinusoid with $f=10$ Hz and $\phi=45$ degrees"); ...: