博客
关于我
离散波形的产生方法--正弦、余弦、三角波、方波、锯齿波
阅读量:535 次
发布时间:2019-03-07

本文共 2096 字,大约阅读时间需要 6 分钟。

生成波形函数

以下是一些常用的波形生成函数,适用于多种应用场景。这些函数可以根据需求进行参数调整,生成不同类型的波形。

1. 生成正弦波

int GenSineWave(int numElements, float64 amplitude, float64 frequency, float64 *phase, float64 *sineWave) {    int i = 1;    for(; i <= numElements; ++i) {        sineWave[i-1] = amplitude * sin(PI/180.0 * (*phase + 360.0 * frequency * i));    }    *phase = fmod(*phase + frequency * 360.0 * numElements, 360.0);    return 0;}

注意frequency = 1 / numElements

2. 生成方波

int GenSquareWave(int numElements, float64 amplitude, float64 frequency, float64 *phase, float64 dutyCycle, float64 *squareWave) {    int i = 0;    for(; i < numElements; ++i) {        float64 phase_i = fmod(*phase + 360.0 * frequency * i, 360.0);        squareWave[i] = (phase_i / 360.0) <= dutyCycle / 100.0 ? amplitude : -amplitude;    }    *phase = fmod(*phase + frequency * 360.0 * numElements, 360.0);    return 0;}

3. 生成锯齿波

int GenSawtoothWave(int numElements, float64 amplitude, float64 frequency, float64 *phase, float64 *sawtoothWave) {    int i = 0;    for(; i < numElements; ++i) {        float64 phase_i = fmod(*phase + 360.0 * frequency * i, 360.0);        float64 percentPeriod = phase_i / 360.0;        float64 dat = amplitude * 2.0 * percentPeriod;        sawtoothWave[i] = percentPeriod <= 0.5 ? dat : dat - 2.0 * amplitude;    }    *phase = fmod(*phase + frequency * 360.0 * numElements, 360.0);    return 0;}

4. 生成三角波

int GenTriangleWave(int numElements, float64 amplitude, float64 frequency, float64 *phase, float64 *triangleWave) {    int i = 0;    for(; i < numElements; ++i) {        float64 phase_i = fmod(*phase + 360.0 * frequency * i, 360.0);        float64 percentPeriod = phase_i / 360.0;        float64 dat = amplitude * 4.0 * percentPeriod;        if (percentPeriod <= 0.25) {            triangleWave[i] = dat;        } else if (percentPeriod <= 0.75) {            triangleWave[i] = 2.0 * amplitude - dat;        } else {            triangleWave[i] = dat - 4.0 * amplitude;        }    }    *phase = fmod(*phase + frequency * 360.0 * numElements, 360.0);    return 0;}

这些函数可以根据具体需求进行调整,例如改变频率、幅度和相位等参数,生成不同类型的波形。确保输入参数合理,避免超出范围。

转载地址:http://hpwnz.baihongyu.com/

你可能感兴趣的文章
Objective-C实现检查数字是否为奇数算法(附完整源码)
查看>>
Objective-C实现检查给定图中是否存在循环算法(附完整源码)
查看>>
Objective-C实现检查给定字符串是否在camelCase中算法(附完整源码)
查看>>
Objective-C实现检查给定的字符串是否在kebabcase中算法(附完整源码)
查看>>
Objective-C实现检检查回文字符串(区分大小写)算法(附完整源码)
查看>>
Objective-C实现欧几里得距离(附完整源码)
查看>>
Objective-C实现欧拉路径和欧拉回路算法(附完整源码)
查看>>
Objective-C实现正数num使用递归找到它的二进制算法(附完整源码)
查看>>
Objective-C实现水波纹显示效果(附完整源码)
查看>>
Objective-C实现求 1 到 20 的所有数整除的最小正数算法 (附完整源码)
查看>>
Objective-C实现求1000以内的全部亲密数(附完整源码)
查看>>
Objective-C实现求a的逆元x(附完整源码)
查看>>
Objective-C实现求squareDifference平方差算法 (附完整源码)
查看>>
Objective-C实现求两个数组的中位数算法(附完整源码)
查看>>
Objective-C实现求两点间距离(附完整源码)
查看>>
Objective-C实现求众数(附完整源码)
查看>>
Objective-C实现求圆锥的体积(附完整源码)
查看>>
Objective-C实现求曲线在某点的导数(附完整源码)
查看>>
Objective-C实现求最大公约数 (GCD)的算法(附完整源码)
查看>>
Objective-C实现求模逆算法(附完整源码)
查看>>