数字滤波算法

【嵌入式算法】学习笔记(一):数字滤波算法 文章目录摘要一、数字滤波简介二、常用数字滤波算法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

浅谈一下小波变换和EEG信号处理

浅谈小波变换,总结不是很到位,请大家指正。

qq_45045249的博客 2862

常用数字滤波算法总结

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

qq_39648250的博客 8264

声纹识别实战:用Python从零搭建一个简易声纹验证系统(附完整代码)

本文是一份详细的声纹识别实战指南,教你使用Python从零搭建一个简易的声纹验证系统。文章涵盖了从音频采集、预处理、MFCC特征提取,到基于高斯混合模型(GMM)的建模与验证全流程,并提供了完整的代码实现,帮助开发者快速掌握这项生物特征识别核心技术。

ik6789012的博客 231

【单片机数字滤波算法】

单片机数字滤波算法

qq_39842609的博客 1202

ResNet与注意力机制:深度学习中的强强联合

本文详细介绍了ResNet和注意力机制的基本原理,并探讨了如何将两者结合,以提升网络的性能。通过在ResNet中引入注意力机制,网络可以自适应地调整特征图的重要性,从而更加关注于关键区域,提升模型的性能。实验结果表明,引入注意力机制后,ResNet的性能得到了显著提升。未来,随着注意力机制的不断发展,我们可以期待更多创新的网络架构和训练方法,进一步提升深度学习模型的性能。

2401_82355416的博客 1783

关于深度可分离卷积

关于深度学习中的深度可分离卷积

qq_45670407的博客 1796

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

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

weixin_36168927的博客 602

从零开始:如何利用Device Monitoring Studio构建高效数据监控系统

本文详细介绍了如何利用HHD Device Monitoring Studio从零开始构建高效数据监控系统。涵盖基础架构设计、核心功能解析、实战部署指南及高级数据分析技术,帮助用户实现非侵入式监控,提升设备调试和网络协议分析效率。特别适合物联网和工业自动化领域的开发者与运维人员。

weixin_29201859的博客 327

简单数字滤波算法

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

qq_34446736的博客 553

Ubuntu 24.04 + RTX 5090 部署 OpenVLA-OFT:从环境配置到机器人任务评估实战

本文详细记录了在Ubuntu 24.04 LTS系统上,为全新RTX 5090显卡配置CUDA 12.8+与PyTorch 2.7.1+开发环境,并成功部署OpenVLA-OFT视觉语言模型进行机器人任务评估的完整实战流程。文章重点解决了驱动安装、依赖版本冲突、路径设置等核心难题,为在最新硬件上运行先进AI机器人模型提供了可靠的避坑指南和性能观察。

n8m7b6v5c4的博客 595

MacBook M芯片第二篇:Homebrew安装

Homebrew是MacOS/Linux平台的软件包管理工具,提供便捷的安装、卸载、更新等功能。

码农魏轩 893

单片机数字滤波算法

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

老王的博客 467

运放比较电路分析以及应用

摘要:本文介绍了基于LM321运放的同相输入型单限电压比较器电路。该电路通过运放开环工作模式实现电平判断:当输入信号Vs+>0V时输出+15V高电平,Vs+<0V时输出≈0V低电平。典型应用包括直流电压过零检测、交流信号整形、电池欠压报警和数字信号噪声过滤。电路具有结构简单(仅需1个运放和1个电阻)、成本低的优势,适用于传感器信号处理、波形转换等场景。使用时需注意参考电平调整、输出电平匹配等问题,如需抗噪声可增加正反馈电阻构成施密特触发器。该电路是运放实现简单电平逻辑的经典方案。

qq_37999850的博客 400

常用数字滤波算法

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

fandq1223的博客 2万+

深度学习工具包 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")

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

257

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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

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

张巧龙的博客 813

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

单片机数字滤波的算法

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

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、付费专栏及课程。

余额充值