酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

请用C语言写一份完整的Savitzky-Golay filter算法

以下是一个使用 C 语言实现的简单的 Savitzky-Golay 滤波算法示例代码: ```c #include <stdio.h> // 计算卷积 void convolve(double *input, double *kernel, int inputLength, int kernelLength, double *output) { for (int i = 0; i < inputLength - kernelLength + 1; i++) { double sum = 0; for (int j = 0; j < kernelLength; j++) { sum += input[i + j] * kernel[j]; } output[i] = sum; } } // Savitzky-Golay 滤波函数 void savitzkyGolayFilter(double *input, int inputLength, int windowSize, double *output) { // 生成窗口的系数 double kernel[windowSize]; double sum = 0; for (int i = 0; i < windowSize; i++) { kernel[i] = 1.0; sum += kernel[i]; } // 归一化系数 for (int i = 0; i < windowSize; i++) { kernel[i] /= sum; } convolve(input, kernel, inputLength, windowSize, output); } int main() { double input[] = {1.2, 2.5, 3.7, 4.1, 5.9, 6.3, 7.8, 8.2, 9.1}; int inputLength = sizeof(input) / sizeof(input[0]); int windowSize = 3; double output[inputLength - windowSize + 1]; savitzkyGolayFilter(input, inputLength, windowSize, output); for (int i = 0; i < inputLength - windowSize + 1; i++) { printf("%.2f ", output[i]); } printf("\n"); return 0; } ``` 额外需要注意的逻辑点: 1. 窗口大小的选择会影响滤波效果,需要根据实际数据特点进行调整。 2. 对于输入数据的边界处理需要特别小心,以避免越界错误。 3. 代码中的系数生成和归一化可以根据具体的滤波要求进行修改和优化。 [2025-05-18 23:07:56 | AI写代码神器 | 535点数解答]

相关提问