以往生成正弦波数据, 各个参数之间的关系总是不明确, 现在这个函数的代码非常明确的区分了各个参数之间的相互关系.
#include <stdio.h>
#include <math.h>/*** @brief 生成正弦波测试数据* * @param data 存放生成的数据的数组* @param n 数据的长度 一共采样了多少个点* @param sample_rate 采样率 (每秒多少个点)* @param amplitude 正弦波的振幅 * @param phase 正弦波的初始相位* @param frequency 正弦波的频率
*/
void generateSinData(float data[], int n, float sample_rate , float amplitude, float phase, float frequency) { float time_step = 1.0f / sample_rate; // 每个样本的时间间隔(秒) float a; // 角度(弧度制) float zaosheng; // 噪声项 // 可选:设置随机数种子以确保每次运行都得到不同的随机噪声 // std::srand(static_cast<unsigned int>(std::time(nullptr))); for (int i = 0; i < n; i++) { // 计算时间(秒),并转换为角度 float time = i * time_step; a = 2 * PI * frequency * time + phase; // 添加噪声项(如果需要的话) // zaosheng = 0.1f * (static_cast<float>(std::rand()) / RAND_MAX - 0.5f); zaosheng = 0; // 暂时设为0,如果你想添加噪声可以去掉注释 // 计算正弦波加上噪声 data[i] = amplitude * sin(a) + zaosheng; }
} #define N 2000int main() {float data[N];float amplitude = 44.0; // 初始振幅float phase = 0.5 * PI; // 初始相位float frequency = 10.0; // 初始频率generateSinData(data, N, 1000.0f, amplitude, phase,frequency);//输出data到文件FILE *fp;fp = fopen("data.txt", "w");for (int i = 0; i < 1000; i++) {fprintf(fp, "%f\n", data[i]);}fclose(fp);
}