summaryrefslogtreecommitdiff
path: root/Gen/GenTrig.swift
blob: cc4abb50f201f66ebd69e95c58d939d1b215d6f4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//
//  GenTrig.swift
//  PrySDR
//
//  Created by Jacky Jack on 26/10/2024.
//

import Foundation

/// Generate sin function as float array
/// - Parameters:
///   - sample_rate: sample rate, how many samples per second
///   - freq: sin frequency
///   - ampl: amplitude
///   - phase: phase of sin
///   - sample_num: number of samples to generate
/// - Returns: Array of floats within range [-ampl ... apml]
///
func genSin(_ sample_rate: Int,_ freq: Int,_ ampl: Float,_ phase: Float,_ sample_num: Int) -> Array<Float32> {
    
    //let one_sec = sample_num/sample_rate
    let sample_per_hz:Float32 = Float32(sample_rate)/Float32(freq)
    let hz_step: Float32 = 2*Float32.pi/sample_per_hz
    var out_signal:[Float32] = Array(repeating: Float(0.0), count: sample_num)
    var start = phase
    for i in 0..<sample_num {
        out_signal[i] = ampl * sin(start)
        start += hz_step
    }
    
    return out_signal
}

/// Generate Cos function as float array
/// - Parameters:
///   - sample_rate: sample rate, how many samples per second
///   - freq: sin frequency
///   - ampl: amplitude
///   - phase: phase of sin
///   - sample_num: number of samples to generate
/// - Returns: Array of floats within range [-ampl ... apml]
///
func genCos(_ sample_rate: Int,_ freq: Float,_ ampl: Float,_ phase: Float,_ sample_num: Int) -> Array<Float32> {
    //let one_sec = sample_num/sample_rate
    let sample_per_hz:Float32 = Float32(sample_rate)/Float32(freq)
    let hz_step: Float32 = 2*Float32.pi/sample_per_hz
    var out_signal:[Float32] = Array(repeating: Float32(0.0), count: sample_num)
    var start = phase
    for i in 0...sample_num {
        out_signal[i] = ampl * cos(start)
        start += hz_step
    }
    
    return out_signal
}