MATLAB自带的曲线平滑函数:smooth和spcrv

一、smooth

自己感觉:平滑效果还可以

1.语法

(1)函数

smooth(Y)

smooth(Y,SPAN)%SPAN是滑动平均的点数,即“几点滑动平均”

smooth(Y,SPAN,METHOD)

(2)METHOD:

%loess:局部回归,加权的线性最小均方,2阶多项式模型
%rloess:'loess’的增强版,在回归过程中,给极端值分配的权重小。超出6倍绝对离差的极端值,权重为0
%‘moving’:滑动平均(默认)。低通滤波器,滤波器系数=span的倒数
%‘lowess’:局部回归。线性最小均方加权,1阶多项式模型。
%‘sgolay’:Savitzky-Golay filter。
%‘rlowess’:‘lowess’的增强版。在回归过程中,给极端值分配的权重小。超出6倍绝对离差的极端值,权重为0

(3)注意

对增强版的算法而言,极端值的影响可以忽略

(4)例子1(来自MATLAB)

%-----------画出原始数据和平滑后的数据----
[xx,ind] = sort(x);%排序,ind-索引,xx-排序后的数据(从小到大)
subplot(2,1,1)
plot(xx,y(ind),'b.',xx,yy1(ind),'r-')
set(gca,'YLim',[-1.5 3.5])
legend('Original Data','Smoothed Data Using ''loess''','Location','NW')
subplot(2,1,2)
plot(xx,y(ind),'b.',xx,yy2(ind),'r-')
set(gca,'YLim',[-1.5 3.5])
legend('Original Data','Smoothed Data Using ''rloess''','Location','NW')

(5)例子2(来自MATLAB)

clc,clear
load count.dat  %(24×3)一天24小时,3个交通路口的车流量
%1°滑动平均滤波器,5小时的span。平滑全部数据
c = smooth(count(:));
C1 = reshape(c,24,3);
%画图(原始数据,平滑后的数据)
subplot(3,1,1)
plot(count,':');
hold on
plot(C1,'-');
title('Smooth C1 (All Data)')
%2°相同的滤波器。分别对每列数据进行平缓。
C2 = zeros(24,3);
for I = 1:3,C2(:,I) = smooth(count(:,I));
end
%画图(原始数据、平滑后的数据)
subplot(3,1,2)
plot(count,':');
hold on
plot(C2,'-');
title('Smooth C2 (Each Column)')
%3°画出两次滑动后的数据的差值
subplot(3,1,3)
plot(C2 - C1,'o-')
title('Difference C2 - C1')

二、spcrv

%20160518:spcrv函数
%目前可最做到,对原来的曲线进行平滑
%原理:增加点,平滑曲线
%(自己感觉)效果:可以平滑,但是:1°无法获得平滑后的曲线方程 2°平滑前后,曲线的起始点,y值大小不同

Spline curve by uniform subdivision

1.语法

spcrv(c,k)
spcrv(c\)
spcrv(c,k,maxpnt)

2.描述

spcrv(c,k) 在具有 B 样条系数 c 的 k 阶均匀 B 样条曲线 f 上提供点的密集序列 f(tt)。明确地说,这是曲线

with B(·|a,…,z) the B-spline with 结点 a,…,z, and n the number of 系数 in c, i.e., [d,n] equals size(c).

spcrv(c) chooses the order k to be 4.

spcrv(c,k,maxpnt) makes sure that at least maxpnt points are generated. The default value for the maximum number of sites ttto be generated is 100.

The parameter interval that the site sequence tt fills out uniformly is the interval [k/2 … (n-k/2)].

The output consists of the array f(tt).

3.案例

The following would show a questionable broken line and its smoothed version:

%% ------例子0----------------
points=[0 0 1 1 0 -1 -1 0 0;0 0 0 1 2 1 0 -1 -2];
figure(3)
plot(points(1,:),points(2,:),':');
values=spcrv(points,3);
hold on;plot(values(1,:),values(2,:));hold off%% ------------例子1---------------------------
x=[0 0.1 0.16 0.27 0.41 0.48 0.59 0.8];
y=[5 9 70 118 100 17 0 5];
y1=[22.8 22.8 22.8 22.8 22.8 22.8 22.8 22.8];
values1=spcrv([[x(1) x x(end)];[y(1) y y(end)]],3,1000);
values2=spcrv([[x(1) x x(end)];[y1(1) y1 y1(end)]],3,1000);
plot(values1(1,:),values1(2,:),'r',values2(1,:),values2(2,:),'b')%% ----------------------例子2-----------------
x1=[18.5931 19.2468 19.58193333 19.96586667 20.0985 20.2678 30.95973333];
y=[3.66 7.15 11.74 21.53 31.24 60.51 86.5]
values = spcrv([[x1(1) x1 x1(end)];[y(1) y y(end)]],3);
plot(values(1,:),values(2,:),'k');

Algorithms

重复中点结插入直到至少有maxpnt位点为止。有些情况下使用fnplt会更有效。

Matlab中的两种曲线平滑函数相关推荐

  1. Matlab中的两种除法

    Matlab中的两种除法 matlab中的向量运算,试比较: >>a=[1,1,1] a = 1     1     1 >> b=[2,2,2] b = 2     2    ...

  2. 相机内参中cx cy_Opencv中的两种去畸变函数

    前言 参考 OpenCV畸变校正原理以及损失有效像素原理分析 - 一度逍遥 - 博客园 我们知道目前opencv在标定完后得到相机内参及畸变系数,要么通过cv::undistort()直接得到去畸变的 ...

  3. MATLAB 保存imshow绘制图片到指定文件夹中的两种方法

    MATLAB 保存imshow绘制图片到指定文件夹中的两种方法 imwrite函数 imwrite(image,filename) imwrite(image,filename)是将图像数据image ...

  4. C语言getline函数CSDN,c++中的两种getline用法详解

    getline是C++标准库函数:但不是C标准库函数,而是POSIX(IEEE Std 1003.1-2008版本及以上)所定义的标准库函数(在POSIX IEEE Std 1003.1-2008标准 ...

  5. matlab中饼图绘制程序,MATLAB中绘制二维饼图的函数是(? ? ) (1.5分)

    MATLAB中绘制二维饼图的函数是(? ? ) (1.5分) 答:pie 计算机的内存储器比外存储器读写速度 ______ 答:快 新民主主义革命时期,提出了反帝反封建这个任务就等于真正懂得了什么叫反 ...

  6. matlab得到计算机时间,Matlab中处理日期与时间的函数

    Matlab用三种格式来表示日期与时间 (1)双精度型日期数字:一个日期型数字代表从公元0年到某一日期的的天数,例如,2008年8月26日夜时0点钟被表示为733646,而这同一天的中午12点就被表示 ...

  7. 水平集方法引入主动轮廓模型算法中的两种方法

    水平集方法引入主动轮廓模型算法中的两种方法 1.传统的基于主动轮廓模型和水平集理论的方法 2.变分水平集方法 在讲解水平集理论在主动轮廓模型中的应用前,我们先用流程图说明一下常见的处理主动轮廓模型的流 ...

  8. ( function(){…} )()和( function (){…} () )是两种立即执行函数

    函数声明:function fnName () {-}; 函数表达式 var fnName = function () {-}; 匿名函数:function () {}; fnName(); func ...

  9. 认识LTE(七):LTE中的两种无反馈模式:发射分集(TM2)和开环空分复用(TM3)

    认识LTE(七):LTE中的两种无反馈模式:发射分集(TM2)和开环空分复用(TM3) 文章目录 认识LTE(七):LTE中的两种无反馈模式:发射分集(TM2)和开环空分复用(TM3) 零.代码地址 ...

  10. MatLab中rand randi randn 三个函数的解析

    MatLab中rand randi randn 三个函数的解析 1.rand 概括:生成(0,1)之间的均匀分布的伪随机数 示例1: >>rand %什么参数也没有,生成一个(0,1)的数 ...

最新文章

  1. 训练数据也外包?这家公司“承包”了不少注释训练数据,原来是这样做的……...
  2. 李天华:2017年短视频最值得投入的战略性方向
  3. Hadoop大数据——mapreduce的Distributed cache
  4. 51CTO的技术门诊谈OSSIM
  5. (需求实战_终章_08)SSM集成RabbitMQ 订阅模式 关键代码讲解、开发、测试
  6. 图片人脸检测——Dlib版(四)
  7. Netpas:不一样的SD-WAN+ 保障网络通讯品质
  8. bazel 链接第三方动态库_C/C++编程知识:Linux 动态库相关知识整理
  9. Windows核心编程_将窗口嵌入到桌面图标下面不被遮挡 spy 分析过程
  10. [C++] 最小生成树
  11. 调试和测试 Swing 代码
  12. eda技术试卷_EDA技术及应用试卷D含答案
  13. word文档打对勾_word文档怎么打勾 word文档方框内打勾六种方法介绍
  14. 多媒体呼叫中心技术、应用与发展前景
  15. pcap头文件位置 Linux,pcap文件头的组织格式
  16. Python学习第八节
  17. 软件流程图及功能节点图
  18. Docker设置共享文件夹
  19. 苹果手机如何用短信信息服务器,Iphone双卡双待如何发信息? 苹果双卡手机发短信的方法...
  20. 业务流程图 vs 数据流程图

热门文章

  1. 基于Hadoop 的分布式网络爬虫技术学习笔记
  2. C#—软件注册与注册机
  3. 面试宝典之深度学习面试题(下)
  4. html去除重复代码,simian 查找项目中的重复代码
  5. 社交电商 社群电商 源码下载
  6. 手机扫描电脑二维码登录原理
  7. CAD2010安装→注册
  8. ruby入门教程:入门ruby的方法
  9. html 自动增加分页,HTML静态页面如何实现自动分页?
  10. boost LNK2005 重定义错误