0

我有以下问题:为了调幅,我想生成一个给定频率的正弦波。对于较低频率(例如 440 Hz),该算法运行良好,但在处理高频(例如 20.000 Hz)时,我会得到额外的较低频率的噪音,随着时间的推移而增加 - 我的意思是我播放信号的时间越来越长,越来越多出现不需要的频率 - 因此信号失真。

这是我算法的精髓

    let methodStart = NSDate()
    
    let n = vDSP_Length(1024)

    let page: [Float] = (0 ..< n).map {_ in
        let val: Float = sin(2.0 * .pi * 20000.0 / 44100 * Float(index))
        index += 1
        return val
    }
    
    let methodFinish = NSDate()
    let executionTime = methodFinish.timeIntervalSince(methodStart as Date)
    print("Execution time: \(executionTime)")  // 0.0005 s

如您所见,我使用循环 - 稍后页面数组用于生成对应的音调。

我确实测量了如下所示的执行时间:

Execution time: 0.0004639625549316406
Execution time: 0.000661015510559082
Execution time: 0.0005699396133422852
Execution time: 0.00047194957733154297
Execution time: 0.0005259513854980469
Execution time: 0.00047194957733154297
Execution time: 0.0005289316177368164

当我们谈论 20.000 Hz 的信号频率时,执行时间应该不是问题,因为大约 0.0005 秒,一个信号周期或多或少适合执行时间范围的 10 次 -> 1 : 20.000 = 0.00005。

我的问题:我怎样才能获得纯信号?我应该使用指针吗?如果是这样,我该怎么做?

4

0 回答 0