写一个可以产生正弦波且幅频可调的C语言程序
时间: 2023-08-30 08:04:20 浏览: 877
以下是一个可以产生正弦波且幅频可调的C语言程序:
```c
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323846
int main()
{
// 设置正弦波频率、幅度、采样率和采样点数
double f = 10; // 频率为10Hz
double A = 1; // 幅度为1
double fs = 1000; // 采样率为1000Hz
int N = 1000; // 采样点数为1000
// 生成时间序列
double t[N];
int i;
for (i = 0; i < N; i++) {
t[i] = (double)i / fs;
}
// 生成正弦波信号
double x[N];
for (i = 0; i < N; i++) {
x[i] = A * sin(2 * PI * f * t[i]);
}
// 输出原始信号的时域和频域图像
printf("Time Domain:\n");
for (i = 0; i < N; i++) {
printf("%lf\n", x[i]);
}
printf("Frequency Domain:\n");
double X[N];
for (i = 0; i < N; i++) {
X[i] = 0;
int j;
for (j = 0; j < N; j++) {
X[i] += x[j] * cos(2 * PI * i * j / N);
}
printf("%lf\n", fabs(X[i]));
}
return 0;
}
```
在这个程序中,我们使用了`math.h`库来调用正弦函数和绝对值函数。首先,我们设置了正弦波的频率、幅度、采样率和采样点数。然后,我们通过循环生成时间序列和正弦波信号,并输出时域和频域的数据。
如果你想调节正弦波的幅度和频率,只需修改对应的参数`A`和`f`即可。注意,这个程序中的频域计算方法是傅里叶变换的离散实现,不同于Python中使用的快速傅里叶变换库。
阅读全文