以往生成正弦波数据, 各个参数之间的关系总是不明确, 现在这个函数的代码非常明确的区分了各个参数之间的相互关系.
#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 2000
int 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);
}