C语言提取信号的高频分量,低频分量,标准差值与均方根差值的完整代码,能在devc++上运行
时间: 2024-03-23 21:36:08 浏览: 22
以下是一个示例代码,可以在 Dev-C++ 上运行,用于提取信号的高频分量、低频分量、标准差值和均方根差值:
```c
#include <stdio.h>
#include <math.h>
#define N 100 // 信号数据点数
#define Fs 1000 // 采样频率
int main()
{
int i;
double signal[N]; // 信号数据
double lp[N], hp[N], std, rms;
// 生成信号数据
for (i = 0; i < N; i++) {
signal[i] = sin(2 * M_PI * 50 * i / Fs) + sin(2 * M_PI * 200 * i / Fs) + sin(2 * M_PI * 300 * i / Fs);
}
// 计算低频分量和高频分量
for (i = 0; i < N; i++) {
if (i == 0) {
lp[i] = signal[i];
hp[i] = 0;
}
else {
lp[i] = 0.99 * lp[i-1] + 0.01 * signal[i];
hp[i] = signal[i] - lp[i];
}
}
// 计算标准差值
std = 0;
for (i = 0; i < N; i++) {
std += (signal[i] - lp[i]) * (signal[i] - lp[i]);
}
std = sqrt(std / N);
// 计算均方根差值
rms = 0;
for (i = 0; i < N; i++) {
rms += signal[i] * signal[i];
}
rms = sqrt(rms / N);
// 输出结果
printf("Low-frequency component: %lf\n", lp[N-1]);
printf("High-frequency component: %lf\n", hp[N-1]);
printf("Standard deviation: %lf\n", std);
printf("Root-mean-square deviation: %lf\n", rms);
return 0;
}
```
这个示例代码生成了一个由三个正弦波组成的信号,采样频率为 1000Hz,数据点数为 100。它使用了一个简单的低通滤波器来计算低频分量和高频分量,并计算了标准差值和均方根差值。你可以根据自己的需求修改代码,以适应不同的信号处理任务。