C语言 SG滤波平滑函数
时间: 2023-09-05 21:13:31 浏览: 93
下面是一个简单的 C 语言函数,可以实现 SG 滤波平滑:
```c
// SG 滤波平滑函数
double SGFilterSmooth(double *data, int dataLen, int smoothWindowSize, int polynomialOrder) {
double coef[smoothWindowSize * polynomialOrder];
double sum = 0;
int i, j, k;
// 计算系数
for(i = 0; i < smoothWindowSize; i++) {
for(j = 0; j < polynomialOrder; j++) {
coef[i * polynomialOrder + j] = 0;
for(k = 0; k < smoothWindowSize; k++) {
coef[i * polynomialOrder + j] += pow(k, j);
}
coef[i * polynomialOrder + j] = pow(i, j) / coef[i * polynomialOrder + j];
}
}
// 平滑数据
for(i = smoothWindowSize / 2; i < dataLen - smoothWindowSize / 2; i++) {
sum = 0;
for(j = 0; j < smoothWindowSize; j++) {
sum += data[i - smoothWindowSize / 2 + j] * coef[j * polynomialOrder + 0];
}
data[i] = sum;
}
return *data;
}
```
其中,`data` 是输入数据数组的指针,`dataLen` 是数据的长度,`smoothWindowSize` 是平滑窗口大小,`polynomialOrder` 是多项式阶数。函数返回值为平滑后的数据。