///|
pub fn sine_wave(
length~ : Int,
sample_rate~ : Double,
frequency~ : Double,
amplitude? : Double = 1.0,
) -> Array[Double] raise SpectrumError {
validate_signal_args(length, sample_rate)
let out : Array[Double] = []
for i in 0.. Array[Double] raise SpectrumError {
validate_signal_args(length, sample_rate)
let out : Array[Double] = []
for i in 0..= 0.0 { amplitude } else { -amplitude })
}
out
}
///|
pub fn impulse(
length~ : Int,
index? : Int = 0,
amplitude? : Double = 1.0,
) -> Array[Double] raise SpectrumError {
if length <= 0 {
raise EmptySignal
}
if index < 0 || index >= length {
raise InvalidArgument(message="impulse index out of range")
}
let out = Array::make(length, 0.0)
out[index] = amplitude
out
}
///|
pub fn chirp(
length~ : Int,
sample_rate~ : Double,
start_hz~ : Double,
end_hz~ : Double,
amplitude? : Double = 1.0,
) -> Array[Double] raise SpectrumError {
validate_signal_args(length, sample_rate)
let duration = Double::from_int(length) / sample_rate
let slope = (end_hz - start_hz) / duration
let out : Array[Double] = []
for i in 0.. Array[Double] raise SpectrumError {
if length <= 0 {
raise EmptySignal
}
let out : Array[Double] = []
let mut state = seed.reinterpret_as_int() % 2147483
for _ in 0.. Array[Double] raise SpectrumError {
validate_signal_args(length, sample_rate)
if frequency <= 0.0 || frequency > sample_rate / 2.0 {
raise InvalidArgument(message="frequency must be between zero and Nyquist")
}
let out : Array[Double] = []
for i in 0.. Array[Double] raise SpectrumError {
validate_signal_args(length, sample_rate)
if frequency <= 0.0 || frequency > sample_rate / 2.0 {
raise InvalidArgument(message="frequency must be between zero and Nyquist")
}
let out : Array[Double] = []
for i in 0.. Array[Double] raise SpectrumError {
if length <= 0 || period <= 0 {
raise InvalidArgument(message="length and period must be positive")
}
let out = Array::make(length, 0.0)
for i in 0.. Unit raise SpectrumError {
if length <= 0 {
raise EmptySignal
}
if sample_rate <= 0.0 {
raise InvalidArgument(message="sample_rate must be positive")
}
}