没有合适的资源?快使用搜索试试~ 我知道了~
五点3次平滑,最小二乘平滑C语言程序.txt
需积分: 38 11 下载量 80 浏览量
2019-06-18
11:45:39
上传
评论
收藏 12KB TXT 举报
温馨提示
试读
11页
C语言写的五点3次平滑还有其他几种线性平滑,最小二乘平滑源程序可以直接用
资源推荐
资源详情
资源评论
算法的原理很简单,以五点三次平滑为例。取相邻的5个数据点,可以拟合出一条3次曲线来,然后用3次曲线上相应的位置的数据值作为滤波后结果。简单的说就是 Savitzky-Golay 滤波器 。只不过Savitzky-Golay 滤波器并不特殊考虑边界的几个数据点,而这个算法还特意把边上的几个点的数据拟合结果给推导了出来。
线性拟合平滑处理的代码. 分别为三点线性平滑、五点线性平滑和七点线性平滑。
void linearSmooth3 ( double in[], double out[], int N )
{
int i;
if ( N < 3 )
{
for ( i = 0; i <= N - 1; i++ )
{
out[i] = in[i];
}
}
else
{
out[0] = ( 5.0 * in[0] + 2.0 * in[1] - in[2] ) / 6.0;
for ( i = 1; i <= N - 2; i++ )
{
out[i] = ( in[i - 1] + in[i] + in[i + 1] ) / 3.0;
}
out[N - 1] = ( 5.0 * in[N - 1] + 2.0 * in[N - 2] - in[N - 3] ) / 6.0;
}
}
void linearSmooth5 ( double in[], double out[], int N )
{
int i;
线性拟合平滑处理的代码. 分别为三点线性平滑、五点线性平滑和七点线性平滑。
void linearSmooth3 ( double in[], double out[], int N )
{
int i;
if ( N < 3 )
{
for ( i = 0; i <= N - 1; i++ )
{
out[i] = in[i];
}
}
else
{
out[0] = ( 5.0 * in[0] + 2.0 * in[1] - in[2] ) / 6.0;
for ( i = 1; i <= N - 2; i++ )
{
out[i] = ( in[i - 1] + in[i] + in[i + 1] ) / 3.0;
}
out[N - 1] = ( 5.0 * in[N - 1] + 2.0 * in[N - 2] - in[N - 3] ) / 6.0;
}
}
void linearSmooth5 ( double in[], double out[], int N )
{
int i;
if ( N < 5 )
{
for ( i = 0; i <= N - 1; i++ )
{
out[i] = in[i];
}
}
else
{
out[0] = ( 3.0 * in[0] + 2.0 * in[1] + in[2] - in[4] ) / 5.0;
out[1] = ( 4.0 * in[0] + 3.0 * in[1] + 2 * in[2] + in[3] ) / 10.0;
for ( i = 2; i <= N - 3; i++ )
{
out[i] = ( in[i - 2] + in[i - 1] + in[i] + in[i + 1] + in[i + 2] ) / 5.0;
}
out[N - 2] = ( 4.0 * in[N - 1] + 3.0 * in[N - 2] + 2 * in[N - 3] + in[N - 4] ) / 10.0;
out[N - 1] = ( 3.0 * in[N - 1] + 2.0 * in[N - 2] + in[N - 3] - in[N - 5] ) / 5.0;
}
}
void linearSmooth7 ( double in[], double out[], int N )
{
int i;
if ( N < 7 )
{
for ( i = 0; i <= N - 1; i++ )
{
out[i] = in[i];
}
}
{
for ( i = 0; i <= N - 1; i++ )
{
out[i] = in[i];
}
}
else
{
out[0] = ( 3.0 * in[0] + 2.0 * in[1] + in[2] - in[4] ) / 5.0;
out[1] = ( 4.0 * in[0] + 3.0 * in[1] + 2 * in[2] + in[3] ) / 10.0;
for ( i = 2; i <= N - 3; i++ )
{
out[i] = ( in[i - 2] + in[i - 1] + in[i] + in[i + 1] + in[i + 2] ) / 5.0;
}
out[N - 2] = ( 4.0 * in[N - 1] + 3.0 * in[N - 2] + 2 * in[N - 3] + in[N - 4] ) / 10.0;
out[N - 1] = ( 3.0 * in[N - 1] + 2.0 * in[N - 2] + in[N - 3] - in[N - 5] ) / 5.0;
}
}
void linearSmooth7 ( double in[], double out[], int N )
{
int i;
if ( N < 7 )
{
for ( i = 0; i <= N - 1; i++ )
{
out[i] = in[i];
}
}
剩余10页未读,继续阅读
资源评论
甘蔗汁
- 粉丝: 1
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 2023-04-06-项目笔记 - 第一百十五阶段 - 4.4.2.113全局变量的作用域-113 -2024.04.26
- 2023-04-06-项目笔记 - 第一百十五阶段 - 4.4.2.113全局变量的作用域-113 -2024.04.26
- htmlzwbjq_downyi.com.zip
- 无头单向非循环链表的实现(Test.c)
- 无头单向非循环链表的实现(SList.c)
- 浏览器重定向插件更新文件
- SSA-BP麻雀算法优化BP神经网络多特征分类预测(Matlab实现完整源码和数据)
- 粒子群算法优化BP神经网络PSO-BP的MATLAB代码(数值预测)
- 基于Springboot的一起看书平台.zip
- 无头单向非循环链表的实现(SList.h)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功