频率随机变化,幅值不变且每个周期都是完整的三角波 C语言
时间: 2024-04-14 12:30:02 浏览: 46
你可以使用以下C语言代码来生成频率随机变化、幅值不变且每个周期都是完整的三角波:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define PI 3.14159265358979323846
int main() {
// 设置随机种子
srand(time(NULL));
// 生成随机频率
double baseFreq = (double)rand() / RAND_MAX * 1000 + 1000; // 频率范围为1000~2000Hz
// 设置采样率和时间参数
int sampleRate = 44100; // 采样率为44100Hz
double duration = 5.0; // 持续时间为5秒
int numSamples = sampleRate * duration;
// 生成每个采样点对应的时间
double* time = (double*)malloc(numSamples * sizeof(double));
for (int i = 0; i < numSamples; i++) {
time[i] = (double)i / sampleRate;
}
// 生成三角波信号
double* waveform = (double*)malloc(numSamples * sizeof(double));
for (int i = 0; i < numSamples; i++) {
double t = time[i];
double freq = baseFreq + sin(2 * PI * t) * 500; // 频率随时间变化,范围为500Hz
waveform[i] = 2 * (t * freq - floor(0.5 + t * freq)); // 三角波公式
}
// 将采样点写入文件(以文本格式)
FILE* file = fopen("triangle_wave.txt", "w");
if (file == NULL) {
printf("无法创建文件!\n");
return 1;
}
for (int i = 0; i < numSamples; i++) {
fprintf(file, "%f\n", waveform[i]);
}
fclose(file);
// 释放内存
free(time);
free(waveform);
return 0;
}
```
这段代码将生成一个持续时间为5秒的三角波信号,并将每个采样点的振幅写入名为 "triangle_wave.txt" 的文本文件中。在代码中,我们使用了随机数来生成频率的随机变化,保持了幅值不变,并且每个周期都是完整的三角波。你可以根据需要修改参数和文件名。注意,此代码假设你的系统支持44.1kHz采样率。