C语言实现Savitzky - Golay滤波算法:附完整代码及注意要点
以下是一个使用 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. 代码中的系数生成和归一化可以根据具体的滤波要求进行修改和优化。 ######[AI写代码神器 | 535点数解答 | 2025-05-18 23:07:56]
- 基于 Savitzky - Golay 滤波的光谱曲线处理:计算红边位置、幅值与面积(讯飞星火 | 927点数解答 | 2024-11-13 13:10:27)595
- Verilog 实现 8 位无符号二阶 7 点Savitzky - Golay 光谱曲线平滑滤波及注意要点 (字节豆包 | 404点数解答 | 2025-05-14 16:28:03)166
- Python 实现 Savitzky - Golay 滤波的详细过程及注意要点(字节豆包 | 319点数解答 | 2024-12-20 14:16:01)204
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)367
- 工程师必知:软件系统用户文档编写九大要点揭秘(百度文心 | 350点数解答 | 2023-11-09 18:23:53)210
- C++ 实现我的世界基岩版:从简单框架到开发要点揭秘(字节豆包 | 182点数解答 | 2025-02-22 15:53:11)211
- C++ 实现完整斗地主:含洗牌、发牌与手牌展示,可按需扩展!(字节豆包 | 1028点数解答 | 2026-01-10 08:02:37)52
- Verilog 实现二次多项式 Savitzky - Golay 滤波:代码示例、解释与注意要点(字节豆包 | 829点数解答 | 2025-07-29 09:52:39)115
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)337
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)491
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)377
- Java实现Student类:含构造、方法及年龄判定(字节豆包 | 464点数解答 | 2024-11-19 15:55:26)397