数字滤波算法

【嵌入式算法】学习笔记(一):数字滤波算法 文章目录摘要一、数字滤波简介二、常用数字滤波算法1.限幅滤波2.中值滤波3.算术平均滤波4.去极值平均滤波5.滑动平均滤波6.滑动加权滤波7.一阶滞后滤波三、数字滤波应用四、数字滤波小结总结 摘要 最近在做直流电机的毕设中,由于需要采集转速,电流,电压,温度等参数,常规的采集容易受到干扰,所以特意复习了一下关于数字滤波有关的知识,并作出相应的整理。本文首先对数字滤波进行简单介绍,然后讲解七种常用的滤波算法并用C语言实现,最后以限幅滤波为例,在STM32上实现对ADC采集信号的滤波操作。篇幅较长,建议收藏。 阅读详情

        在仪表自动化工作中,经常需要对大量的数据进行处理,这些数据往往是一个时间序列或空间序列,这时常会用到数字滤波技术对数据进行预处理。数字滤波是指利用数学的方法对原始数据进行处理,去掉原始数据中掺杂的噪声数据,获得最具有代表性的数据集合。数据采样是一种通过间接方法取得事物状态的技术,如将事物的温度、压力、流量等属性通过一定的转换技术将其转换为电信号,然后再将电信号转换为数字化的数据。在多次转换中由于转换技术客观原因或主观原因造成采样数据中掺杂少量的噪声数据,影响了最终数据的准确性。为了防止噪声对数据结果的影响,除了采用更加科学的采样技术外,我们还要采用一些必要的技术手段对原始数据进行整理、统计,数字滤波技术是最基本的处理方法,它可以剔除数据中的噪声,提高数据的代表性。       

为消除或减弱外界干扰,提高系统的测量精度和可靠性,通过软件滤波的方法即数字滤波算法对测量数据进行处理。 数字滤波方法有很多种,每种方法有其不同的特点和使用范围。从大的范围可分为3类。  

1、克服大脉冲干扰的数字滤波法

(1)限幅滤波法

(2)中值滤波法

2、抑制小幅度高频噪声的平均滤波法

(1)算数平均

(2)滑动平均

(3)加权滑动平均

(4)一阶滞后滤波法

 3、复合滤波法

(1)中位值平均滤波法

(2)限幅平均滤波法


(一)克服大脉冲干扰的数字滤波法

    克服由仪器外部环境偶然因素引起的突变性扰动或仪器内部不稳定引起误码等造成的尖脉冲干扰,是仪器数据处理的第一步。通常采用简单的非线性滤波法。

1、限幅滤波法

        限幅滤波是通过程序判断被测信号的变化幅度,从而消除缓变信号中的尖脉冲干扰。

A 方法: 根据经验判断,确定两次采样允许的最大偏差值(设为δ)每次检测到新值时判断:如果本次值与上次值之差大于δ,则本次值无效,放弃本次值,用上次值代替本次值;

B 优点:能有效克服因偶然因素引起的脉冲干扰;

C 缺点:无法抑制那种周期性的干扰 平滑度差;

D 适用范围:变化比较缓慢的被测量值。

#define A 10
char value;
char filter(int value)
{
   char new_value;
   new_value = get_ad();
   if(( new_value - value > δ)||( value - new_value >δ)
      return value;
   return new_value;
}

2、中值滤波法

    中位值滤波是一种典型的非线性滤波器,它运算简单,在滤除脉冲噪声的同时可以很好地保护信号的细节信息。

A 方法:连续采样N次(N取奇数) 把N次采样值按大小排列(多采用冒泡法)取中间值为本次有效值;

B 优点:能有效克服因偶然因素引起的波动(脉冲)干扰;

C 缺点:对流量、速度等快速变化的参数不宜;

D 适用范围:对温度、液位的变化缓慢的被测参数有良好的滤波效果。

#define N 11

char filter()
{
  char value_buf[N];
  char count,i,j,temp;
  for(count=0;count<N;count++)
  {
    value_buf[count] = get_ad();
    delay();
	}
  for(j=0;j<N-1;j++)
  {
    for(i=0;i<N-j;i++)
    {
      if( value_buf>value_buf[i+1] )
      {
        temp = value_buf;
        value_buf = value_buf[i+1];
        value_buf[i+1] = temp;
      }
    }
 }
 return value_buf[(N-1)/2];
}


(二)抑制小幅度高频噪声的平均滤波法

   小幅度高频电子噪声:电子器件热噪声、A/D量化噪声等。通常采用具有低通特性的线性滤波器:算数平均滤波法、加权平均滤波法、滑动加权平均滤波法一阶滞后滤波法等。

 1、算术平均滤波法

    算术平均滤波法是对N个连续采样值相加,然后取其算术平均值作为本次测量的滤波值。

A 方法:连续取N个采样值进行算术平均运算N值较大时:信号平滑度较高,但灵敏度较低N值较小时:信号平滑度较低,但灵敏度较高 N值的选取:一般流量,N=12;压力:N=4;

B 优点:对滤除混杂在被测信号上的随机干扰信号非常有效。被测信号的特点是有一个平均值,信号在某一数值范围附近上下波动;

C 缺点:不易消除脉冲干扰引起的误差。对于采样速度较慢或要求数据更新率较高的实时系统,算术平均滤法无法使用的。

#define N 12
char filter()
{
	int sum = 0;
	for( count=0;count<N;count++)
  {
    sum + = get_ad();
    delay();
  }
return (char)(sum/N);
}


2、递推平均滤波法

    又称滑动平均滤波法,对于采样速度较慢或要求数据更新率较高的实时系统,算术平均滤波法无法使用的。滑动平均滤波法把N个测量数据看成一个队列,队列的长度固定为N,每进行一次新的采样,把测量结果放入队尾,而去掉原来队首的一个数据,这样在队列中始终有N个“最新”的数据。

A 方法:把连续取N个采样值看成一个队列,队列的长度固定N,每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进 先出原则) 把队列中的N个数据进行算术平均运算,就可获得新的滤波结果N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4;

B 优点:对周期性干扰有良好的抑制作用,平滑度高 适用于高频振荡的系统;

C 缺点:灵敏度低,对偶然出现的脉冲性干扰的抑制作用较差不易消除由于脉冲干扰所引起的采样值偏差 不适用于脉冲干扰比较严重的场合。

#define N 12 
char value_buf[N];
char i=0;
char filter()
{
   char count;
   int  sum=0;
   value_buf[i++] = get_ad();
   if( i == N )   i = 0;
   for( count=0;count<N,count++)
      sum += value_buf[count];
   return (char)(sum/N);
}

3、加权递推平均滤波法

A 方法:是对递推平均滤波法的改进,即不同时刻的数据加以不同的权通常是,越接近现时刻的数据,权取得越大。给予新采样值的权系数越大,则灵敏度越高,但信号平滑度低;

B 优点:适用于有较大纯滞后时间常数的对象 和采样周期较短的系统;

C 缺点:对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号 不能迅速反应系统当前所受干扰的严重程度,滤波效果差。

#define N 12
char code coe[N] = {1,2,3,4,5,6,7,8,9,10,11,12};
char code sum_coe = 1+2+3+4+5+6+7+8+9+10+11+12;
char filter()
{
   char count;
   char value_buf[N];
   int  sum=0;
   for (count=0,count<N;count++)
   {
      value_buf[count] = get_ad();
      delay();
   }
   for(count=0,count<N;count++)
      sum += value_buf[count] * coe[count];
   return (char)(sum/sum_coe);
}

4、一阶滞后滤波法

    一阶低通数字滤波器是用软件的方法实现硬件的RC滤波,以抑制干扰信号。在模拟量输入通道中,常用一阶滞后RC模拟滤波器来抑制干扰。用此种方法来实现对低频干扰时,首先遇到的问题是要求滤波器有大的时间常数(时间常数=RC)和高精度的RC网络。时间常数越大,要求RC值越大,其漏电流也必然增大,从而使RC网络精度下降。采用一阶滞后的数字滤波方法,能很好的克服这种模拟量滤波器的缺点,在滤波常数要求较大的场合,此法更适合。

A 方法: a = T f /( T f +T) T f 为滤波时间常数。T为采样周期,本次滤波结果=(1-a)* 本次采样值+a * 上次滤波结果;

B 优点: 对周期性干扰具有良好的抑制作用 适用于波动频率较高的场合;

C 缺点: 相位滞后,灵敏度低 滞后程度取决于a值大小 不能消除滤波频率高于采样频率的1/2的干扰信号。

#define a 50
char value;
char filter()
{
   char  new_value;
   new_value = get_ad();
   return (1-a)*value + a*new_value;  //a为滤波系数, 其值<<1
}


(三)复合滤波法

   在实际应用中,有时既要消除大幅度的脉冲干扰,有要做到数据平滑。因此常把前面介绍的两种以上的方法结合起来使用,形成复合滤波。去极值平均滤波算法:先用中值滤波算法滤除采样值中的脉冲性干扰,然后把剩余的各采样值进行平均滤波。连续采样N次,剔除其最大值和最小值,再求余下N-2个采样的平均值。显然,这种方法既能抑制随机干扰,又能滤除明显的脉冲干扰。

1、中位值平均滤波法

    又称防脉冲干扰平均滤法,中位值平均滤波法相当于“中位值滤波法”+“算术平均滤波法”

A 方法: 连续采样N个数据,去掉一个最大值和一个最小值 然后计算N-2个数据的算术平均值N值的选取:3~14;

B 优点: 融合了两种滤波法的优点这种方法既能抑制随机干扰,又能滤除明显的脉冲干扰;

C 缺点:测量速度较慢,和算术平均滤波法一样,数据量较大,比较浪费RAM。

2、限幅平均滤波法

    在脉冲干扰较严重的场合,如采用一般的平均值法,则干扰会平均到结果中去。限幅平均滤波法相当于“限幅滤波法”+“递推平均滤波法”

A 方法: 每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理;

B 优点: 融合了两种滤波法的优点, 对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差;

C 缺点:数据量较大,比较浪费RAM;

D 适用范围: 缓变信号。

告别温度跳动!STM32 NTC测温的三种软件滤波方案实测与选型建议 本文深入探讨了STM32平台下NTC测温的三种软件滤波方案,包括掐头去尾平均滤波、滑动平均滤波和一阶滞后滤波,详细分析其原理、实现及性能对比。针对工业控制、智能家居等应用场景,提供选型建议和优化技巧,帮助开发者有效解决温度数据跳动问题,提升系统稳定性。 阅读详情

相关推荐

几种经典非线性滤波算法简单概括(EKF,UKF,CKF,PF)

几种经典非线性滤波算法概括

gangdanerya的博客 2万+

卡尔曼滤波通俗易懂理解和代码实现

卡尔曼滤波算法应用—滤波单片机采集的温度 基本讲解在这里:https://blog.youkuaiyun.com/phker/article/details/48468591,网上搜了这么多文章,就这篇博客讲的很直白,通俗易懂。 公式 看公式1,ECR是估计变化比,也就是一个固定参数,因为我们只有一个温度传感器,假如是测室温,那么我们认为短时间内温度是恒定的,所以这个变化比就等一1。 将上面的公式转为...

^_^ 4150

单片机数字滤波的算法!

单片机主要作用是控制外围的器件,并实现一定的通信和数据处理。但在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进行复杂的运算。下面主要是介绍如何用单片机实现数字滤波。 在单片机进行数据采集时,会遇到数据的随机误差,随机误差是由随机干扰引起的,其特点是在相同条件下测量同一量时,其大小和符号会现无规则的变化而无法预测,但多次测量的结果符合统计规律。为克服随机干扰引起的误差,硬件上可采用滤波技术,软件上可采用软件算法实现数字滤波。滤波算法往往是系统测控算法的一个重要组成部分,实时性很强。 采

wy122222222的博客 515

算法之十大滤波算法详解

限幅滤波法 1.方法限幅滤波法又称嵌位滤波法,或程序判断滤波法。这种滤波法的思路是: 先根据经验判断,确定两次采样允许的最大偏差值(设为A)每次检测到新采样值时进行判断: (1)如果本次新采样值与上次滤波结果之差<A,则本次采样值有效,令本次滤波结果=新采样值; (2)如果本次采样值与上次滤波结果之差>A,则本次采样值无效,放弃本次值,令本次滤波结果=上次滤波结果。 2...

yuechifanfan的博客 3万+

软件算法实现数字滤波(单片机)

软件算法实现数字滤波问题:解决方法:数字滤波算法优点:限幅滤波算法:原理描述:适用场景:参考代码:中值滤波算法:原理描述:适用场景:参考代码:算术平均滤波算法:原理描述:适用场景:参考代码:加权平均滤波算法原理描述:适用场景:参考代码:滑动平均滤波算法原理描述:适用场景:参考代码:低通滤波算法:原理描述:适用场景: 本文主要内容取自VX公众号《嵌入式ARM》4月24日文章,修改了部分代码,括号内为个人阅读所做的注释。 问题: 进行数据采集时,由于随机干扰引起误差。特点是在相同条件下测量同一量,大小和符号出现

wangcuantian的博客 678

3台虚拟机部署Doris详细文档(含校验步骤)

摘要:本文详细介绍了Apache Doris在3台虚拟机上的集群部署方案。采用1主FE+1从FE+1观察者FE+3BE的混合部署模式,确保元数据高可用性。硬件配置建议测试环境4核16GB内存,生产环境8核64GB内存。部署步骤包括系统环境配置(关闭防火墙、内核参数优化)、FE/BE节点配置启动、集群初始化验证等。重点配置了IP白名单(172.30.0.115)和数据目录(/data/doris)。通过MySQL客户端和WebUI可监控集群状态,实现千万级数据的实时分析能力,后续可通过增加BE节点线性扩展。

weixin_41026747的博客 932

常用数字滤波算法总结

常用数字滤波算法总结 在单片机进行数据采集时,会遇到数据的随机误差,随机误差是由随机干扰引起的,其特点是在相同条件下测量同一量时,其大小和符号会现无规则的变化而无法预测,但多次测量的结果符合统计规律。为克服随机干扰引起的误差,硬件上可采用滤波技术,软件上可采用软件算法实现数字滤波。滤波算法往往是系统测控算法的一个重要组成部分,实时性很强。 采用数字滤波算法克服随机干扰的误差具有以下优点: 1、数字...

qq_39648250的博客 8264

PCB设计实践(三十二)PCB设计遇到大电流时的设计技巧

本文系统阐述10A至数百安培PCB设计的六大关键技术。载流能力优化强调铜厚选择(2-4oz)、线宽计算及并联结构;热管理提出散热孔阵列、铜基板嵌入等方案;布局策略包括功率分区和低阻抗路径设计;材料工艺推荐铝基板、陶瓷基板等高效解决方案;安全设计涵盖电气隔离与保护电路;验证环节需结合热仿真与实测。典型150A电机驱动板案例显示,通过4oz铝基板、散热孔阵列等设计,可实现温升≤45℃的稳定运行。核心在于铜厚线宽协同、主动散热及严格验证。

致力于硬件设计、人工智能知识及技术的分享,不断鞭策自己成长,共同进步! 4229

【单片机数字滤波算法】

单片机数字滤波算法

qq_39842609的博客 1202

告别深度学习!用5个麦克风搞定多说话人分离:ReTM算法保姆级教程

本文详细介绍了ReTM算法,这是一种无需深度学习、仅需5个麦克风即可实现多说话人语音分离的创新信号处理方法。它通过估计相对传递矩阵,利用空间物理信息在混响环境中分离语音,具有数据需求低、计算复杂度小、无需先验几何信息等优势,特别适合嵌入式设备和资源受限场景。

desk3的博客 157

Pixel 6 Pro刷Android 13变砖自救指南:fastboot全分区擦除与手动刷入教程

本文提供了一份详细的Pixel 6 Pro在Android 13升级过程中变砖后的自救指南。针对因super分区锁死或动态分区异常导致的无法启动问题,文章核心介绍了通过fastboot命令手动擦除关键分区并逐一刷入官方镜像的完整救砖流程,帮助用户实现系统重建与恢复。

weixin_29208327的博客 371

数字滤波算法 matlab,MATLABLE数字滤波算法

MATLABLE数字滤波算法 MATLABLE数字滤波算法 姓名:陈涛 学号:07250123 班级:0840701 模拟信号都必须经过A/D转换才能被嵌入式控制器接收。但在干扰作用于模拟信号之后,其A/D转换结果往往会偏离真实值。因此,仅采样一次是无法确定该结果是否可信的,而必须多次采样,才能得到一个A/D转换的数据系列,然后通过某种处理,才能得到一个可信度较高的结果。这种从数据系列中提取逼近真...

weixin_36168927的博客 602

Multisim14.0仿真应用设计(十六)74LS138译码器应用仿真

74LS138为3线-8线译码器。

zhusl6688的博客 2981

简单数字滤波算法

采用数字滤波算法克服随机干扰的误差具有以下优点: l 数字滤波无需其他的硬件成本,只用一个计算过程,可靠性高,不存在阻抗匹配问题。尤其是数字滤波可以对频率很低的信号进行滤波,这是模拟滤波器做不到的。 l 数字滤波使用软件算法实现,多输入通道可共用一个滤波程序,降低系统开支。 l 只要适当改变滤波器的滤波程序或运算,就能方便地改变其滤波特性,这对于滤除低频干扰和随机信号会有较大的效果。 l 在单片机系统中常用的滤波算法有限幅滤波法、中值滤波法、算术平均滤波法、加权平均滤波法、滑动平均滤波等。 1. 限

qq_34446736的博客 553

从原理到落地:Java+TensorRT打造YOLO模型GPU极致推理方案

Java+TensorRT的YOLO模型GPU加速方案,核心是通过JNI桥接实现Java与TensorRT的高效交互,结合TensorRT的底层优化能力,最大化GPU算力。该方案既保留了Java后端的工程化优势(如易维护、生态完善),又解决了AI模型推理的性能瓶颈,可落地于实时视频分析、智能监控、工业质检等场景。基于TensorRT Dynamic Shape实现多尺寸输入的自适应优化;结合Java的协程(Virtual Thread)提升异步推理的并发效率;

2601_94871597的博客 766

YOLOv8【第十一章:视频追踪与流处理篇·第16节】一文搞懂,DeepStream 部署入门:NVIDIA 视频分析 SDK 与 YOLOv8 结合!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 838

单片机数字滤波算法

单片机主要作用是控制外围的器件,并实现一定的通信和数据处理。但在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进行复杂的运算。下面主要是介绍如何用单片机实现数字滤波。在单片机进行数据采集时,会遇到数据的随机误差,随机误差是由随机干扰引起的,其特点是在相同条件下测量同一量时,其大小和符号会现无规则的变化而无法预测,但多次测量的结果符合统计规律。为克服随机干扰引起的误差,硬件上可采用滤波技术,软件上可采用软件算法实现数字滤波。滤波算法往往是系统测控算法的一个重要组成部分,实时性很强。

老王的博客 467

AMBA-AXI and ACE协议详解(十)

本章介绍了ACE协议中的Barrier事务机制,包括内存屏障和同步屏障两种类型。

Crazzy_M的博客 613

常用数字滤波算法

常用数字滤波算法 第1种方法:限幅滤波法(又称程序判断滤波法)   A方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A),每次检测到新值时判断: 如果本次值与上次值之差A,则本次值无效,放弃本次值,用上次值代替本次值。   B优点: 能有效克服因偶然因素引起的脉冲干扰。   C缺点: 无法抑制那种周期性的干扰,平滑度差。 第2种方法:中位值滤波法   A方法: 连

fandq1223的博客 2万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

单片机数字滤波算法,看这篇

单片机主要作用是控制外围的器件,并实现一定的通信和数据处理。但在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进行复杂的运算。下面主要是介绍如何用单片机实现数字滤波...

257

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

单片机的几种数字滤波算法

关注、星标公众号,直达精彩内容单片机主要作用是控制外围的器件,并实现一定的通信和数据处理。但在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进行复杂的运算。下面主要是...

张巧龙的博客 813

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

单片机数字滤波的算法

单片机数字滤波的算法 单片机主要作用是控制外围的器件,并实现一定的通信和数据处理。但在某些特定场合,不可避免地要用到数学运算,尽管单片机并不擅长实现算法和进行复杂的运算。下面主要是介绍如何用单片机实现数字滤波。 在单片机进行数据采集时,会遇到数据的随机误差,随机误差是由随机干扰引起的,其特点是在相同条件下测量同一量时,其大小和符号会现无规则的变化而无法预测,但多次测量的结...

Amumu1030的博客 314
上一篇: 字符串匹配KMP算法
下一篇: Linux内核空间和用户空间传递数据
小飞鱼hubble
博客等级 码龄15年 14粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值