历史上的今天
返回首页

历史上的今天

今天是:2025年05月11日(星期日)

2019年05月11日 | 基于stm32的FIR滤波

2019-05-11 来源:eefocus

这两天有个地方用到了距离传感器,选用的传感器是夏普的近红外距离传感器。后来调试的时候发现传感器出来的信号除了有个随着距离规律变化的直流信号以外还有一个周期为1ms的尖峰脉冲信号形状如下图示

这样的波形会影响采集数据的结果,硬件上已经固定了,所以就选择从软件方面来寻找解决方案。


之前涉及的软件滤波无非就是采用求平均值的方法或者用排序的方法取中间值。但是发现这种传统的方法都不能解决问题,无奈之下只好请出FIR了。在网上找到一段关于FIR滤波器的C代码,


const double Gains[65] = {

  0.0009479362407674,0.0009929350550642, 0.003930214337694,0.0004266602318381,

   0.002659113001781, 0.005817509119983,-0.000228463397681, 0.006702278150725,

   0.008005149622821,-0.0008554957856821,  0.01422482817203, 0.008473933262289,

  -1.620146125747e-17,  0.02516227532517, 0.004919104877225, 0.005096205867541,

    0.03751085310479,-0.004203950025341,  0.01799639204041,   0.0469989686148,

   -0.01876523334251,  0.04251211195407,  0.04699049465662, -0.03660751758108,

    0.08342623579446,  0.02691060679784, -0.05397754228244,   0.1541577471136,

   -0.04192656769609, -0.06664039473937,   0.3591036736045,  -0.5005151692802,

     0.6415102143687,  -0.5005151692802,   0.3591036736045, -0.06664039473937,

   -0.04192656769609,   0.1541577471136, -0.05397754228244,  0.02691060679784,

    0.08342623579446, -0.03660751758108,  0.04699049465662,  0.04251211195407,

   -0.01876523334251,   0.0469989686148,  0.01799639204041,-0.004203950025341,

    0.03751085310479, 0.005096205867541, 0.004919104877225,  0.02516227532517,

  -1.620146125747e-17, 0.008473933262289,  0.01422482817203,-0.0008554957856821,

   0.008005149622821, 0.006702278150725,-0.000228463397681, 0.005817509119983,

   0.002659113001781,0.0004266602318381, 0.003930214337694,0.0009929350550642,

  0.0009479362407674

};

#define ORDER        64                       //阶数



 double Buffer[ORDER];        //采样历史数据





double Fir(double Input)

{

        double Output=0.0;        //数据输出

        unsigned int Index;                //下标索引

        

        //采样数据移位

        for(Index=ORDER;Index>0;Index--) 

Buffer[Index]=Buffer[Index-1];


        Buffer[0]=Input;

        

        //计算输出

        for(Index=0;Index        {

                Output+=Gains[Index]*Buffer[Index];

        }

        

        return Output;

}


给出的代码是一个64阶的带阻滤波器。代码很好理解,需要用matlab生成系数。matlab设置的步骤如下


打开matlab(我用的2013b)在APPS种找到“Filter Designer & Analysis”


其中红色方框标记出来的是需要设计的,Filter Order设计滤波器的阶数,Fs是指的采样频率,Fc是截止频率。设计好以后直接点击“Design Filter”按键然后点击Targets ->


Generate C header.。接下来就看看效果吧

前面一段是没有滤波的图像,后面一段是滤波以后的图像,把滤波以后的数据做一个平均处理就已经很稳定了。


总的来说还是很有成就感的。


推荐阅读

史海拾趣

Hirel Systems Ltd公司的发展小趣事

对于四通道红外遥控器接收器电路,网友可能提出的问题涉及多个方面,以下是一些可能的问题及回答:

一、技术原理类问题

  1. 问题:四通道红外遥控器接收器电路是如何工作的?
    回答:四通道红外遥控器接收器电路主要通过光电二极管接收遥控器发射的红外信号,经过放大、解码等处理,最终识别出不同的按键指令,并控制相应的设备执行操作。具体来说,当遥控器发射出特定频率的红外光信号时,光电二极管将光信号转换为电信号,经过放大电路放大后,送入解码器进行解码,解码器根据解码结果输出相应的控制信号,控制设备执行相应的操作。

  2. 问题:接收器电路中的关键元件有哪些?
    回答:接收器电路中的关键元件包括光电二极管(用于接收红外光信号)、放大器(用于放大微弱的电信号)、解码器(用于解码信号并输出控制信号)以及可能的滤波电路(用于滤除噪声干扰)等。这些元件共同协作,实现红外信号的接收和处理。

二、故障排查与维修类问题

  1. 问题:接收器无法接收到信号,可能的原因有哪些?
    回答:接收器无法接收到信号的可能原因包括:

    • 光电二极管损坏或老化,导致无法有效接收红外光信号。
    • 接收器电路中的连接线松动或接触不良,导致信号传输中断。
    • 放大器或解码器故障,无法对接收到的信号进行正常放大或解码。
    • 接收器受到外界干扰(如光线、电磁干扰等),影响信号的接收和处理。

    针对以上问题,可以逐一检查光电二极管、连接线、放大器、解码器等元件的状态,并采取相应的维修或更换措施。同时,注意避免将接收器放置在易受干扰的环境中。

  2. 问题:如何排查和解决接收器响应延迟或误动作的问题?
    回答:排查和解决接收器响应延迟或误动作的问题可以从以下几个方面入手:

    • 检查遥控器发射的红外信号是否正常,包括信号的频率、强度等是否符合接收器的要求。
    • 检查接收器电路中的滤波电路是否设置得当,以避免噪声干扰导致误动作。
    • 检查解码器的解码逻辑是否正确,以确保能够准确识别出遥控器发射的指令。
    • 如果以上均正常,可以考虑检查接收器的电源系统是否稳定,以及是否有其他电路元件故障导致的影响。

    针对具体问题,可以采取相应的调整或维修措施来解决。

三、应用与拓展类问题

  1. 问题:四通道红外遥控器接收器电路可以应用于哪些场景?
    回答:四通道红外遥控器接收器电路可以广泛应用于各种需要遥控控制的设备中,如智能家居系统(如电视、空调、灯光等的遥控控制)、工业自动化控制(如电机、阀门等的远程控制)、安防监控系统(如摄像头、报警器的遥控操作)等。通过扩展通道数量和增加控制逻辑,还可以实现更复杂的控制功能。

  2. 问题:如何对四通道红外遥控器接收器电路进行升级或改造?
    回答:对四通道红外遥控器接收器电路进行升级或改造时,可以考虑以下几个方面:

    • 升级光电二极管或放大器等关键元件的性能,以提高接收灵敏度和信号处理能力。
    • 增加滤波电路或改进解码算法,以减少噪声干扰和提高解码准确性。
    • 扩展通道数量或增加控制逻辑,以实现更复杂的控制功能。
    • 引入无线通信模块(如Wi-Fi、蓝牙等),将红外遥控与无线控制相结合,提高控制的灵活性和便捷性。

    在进行升级或改造时,需要根据具体的应用需求和技术条件进行选择和设计。

ADL [ADL Embedded Solutions Inc]公司的发展小趣事

ADL Embedded Solutions Inc. 是一家专注于嵌入式计算解决方案的公司,以下是该公司发展的五个相关故事:

  1. 公司创立与早期发展: ADL Embedded Solutions Inc. 成立于1994年,总部位于美国科罗拉多州科罗拉多斯普林斯市。公司初期致力于为工业、军事、航空航天等领域提供嵌入式计算解决方案。其产品包括工业级嵌入式计算板卡、系统、模块等。

  2. 技术创新与产品推出: ADL 在嵌入式计算领域不断进行技术创新,并推出了多款具有竞争力的产品。公司的产品具有高性能、低功耗、高可靠性等特点,得到了客户的广泛认可。其产品广泛应用于军事航空、医疗、交通、工业自动化等领域。

  3. 客户合作与项目案例: ADL 与各行业的领先企业建立了长期稳定的合作关系,并参与了众多重要项目。例如,公司为航空航天领域的客户提供了符合严格标准的嵌入式计算解决方案,为医疗设备制造商提供了可靠的嵌入式计算板卡等。

  4. 全球市场拓展与国际化发展: ADL 通过不断拓展国内外市场,实现了全球化发展。公司在美国、欧洲和亚洲等地设有销售办事处和服务中心,为客户提供本地化的技术支持和服务。同时,ADL 的产品远销全球各地,深受国际客户的青睐。

  5. 未来展望与持续发展: ADL 将继续致力于技术创新和产品开发,满足客户不断变化的需求。公司将不断扩大在工业、军事、医疗等领域的市场份额,加强与客户的合作,保持行业领先地位,实现业务的持续增长和发展。

GHI Electronics公司的发展小趣事

GHI Electronics公司成立于2003年,总部位于美国密歇根州。公司自创立之初便明确了其使命:为客户提供咨询、制造和解决方案,以降低风险、成本和复杂性。这一清晰的定位使得GHI Electronics能够迅速在电子工程和制造领域站稳脚跟。随着市场需求的不断变化,GHI Electronics不断调整和优化其服务内容,逐渐赢得了客户的信任和市场的认可。

FRIWO公司的发展小趣事

作为全球化的技术型企业,FRIWO在全球范围内设立了研发、生产和营销部门,以满足不同市场的需求。FRIWO的电源解决方案业务部(FPS)专注于为客户量身订做电源解决方案,其客户群遍布医疗科技、IT通讯、家用电器、移动工具以及工业应用等多个领域。为了更好地服务本地客户,FRIWO在不同地区设立了分支机构,确保能够快速响应客户需求并提供专业的技术支持和服务。这种全球化布局与本地化服务的策略,使得FRIWO在激烈的市场竞争中保持了强劲的竞争力。

CHIMEI(奇美)公司的发展小趣事

随着全球化趋势的加速,奇美公司开始实施全球化战略,积极拓展国际市场。公司通过在海外设立分支机构、参加国际展会等方式,加强与国际客户的交流与合作。同时,奇美还积极引进国际先进的技术和管理经验,提升公司的国际化水平。这种全球化战略使得奇美能够更好地融入全球电子产业链,提升公司的国际竞争力。

BETA Transformer Technology Corp公司的发展小趣事

BETA Transformer Technology Corp公司深知人才是企业发展的核心动力。因此,公司高度重视人才培养和团队建设。BETA公司建立了一套完善的人才培养机制,通过内部培训、外部学习等方式不断提升员工的技能水平和综合素质。同时,公司还注重团队建设和文化建设,营造了一个积极向上、团结协作的工作氛围。这些举措使得BETA公司的员工队伍更加稳定、高效,为公司的长期发展提供了有力保障。

以上五个故事分别从不同角度描述了BETA Transformer Technology Corp公司的发展历程和取得的成就。虽然这些故事是虚构的,但它们反映了电子行业中企业可能面临的挑战和机遇,以及应对这些挑战和机遇的策略和措施。希望这些故事能够满足您的需求。

问答坊 | AI 解惑

ARM的三种中断调试方法介绍

1 嵌入式软件开发流程   参照嵌入式软件的开发流程。第一步:工程建立和配置。第二步:编辑源文件。第三步:工程编译和链接。第四步:软件的调试。第五步:执行文件的固化。   在整个流程中,用户首先需要建立工程并对工程做初步的配置,包 ...…

查看全部问答>

防雷接地操作实践内容分析

本帖最后由 jameswangsynnex 于 2015-3-3 20:02 编辑 接地是防雷的一个重要步骤,那么接地应该怎样操作呢?下面详细给大家介绍一下: 简述 让雷电流迅速导入大地以防止雷击灾害为目的接地叫做防雷接地。 组成 防雷接地装置包括以下部分 ...…

查看全部问答>

求各位大侠指点一下,quartusii编译时出现错误

为什么用quartus编译时总是出现这个错误,要崩溃了,求各位大侠指点一下啊 Error: Peak virtual memory: 165 megabytes…

查看全部问答>

C++转c#,请高手帮忙,谢谢

*(volatile unsigned short*)(0xBA900006) |= 0x0004; 用C#怎么实现,谢谢!…

查看全部问答>

[cetk]cetk测试的时候wince test kit工具弹出对话框说遇到问题需要关闭

小弟请教各位一个问题: 条件: pc机上运行wince test kit工具(即cetest.exe),通过activesync连接到target device并检测到设备上的驱动模块 操作: 选择任一device driver,并开始测试,都会弹出一个对话框提示wince test kit遇到问题需要关闭 ...…

查看全部问答>

【急】新手请教一个关于wince spi驱动的问题

我下载了一个wince6.0 环境下编译的spi驱动源码,请问可以直接加到wince 5.0平台上操作吗? 另外,我在wince5.0平台上用该驱动程序编译之后,成功下载内核映象,烧了内核映象,在2440开发板上也可以成功显示界面,但在VC上(导入了前面建的SDK)用 ...…

查看全部问答>

一个单片机实验,急急急,好心人帮帮MM啊

1.        显示部分电路    本实验仪的LED显示电路和键盘电路如图1。显示控制的位码由74HC374输出,经MC1413反向驱动后,做LED的位选通信号。位选通信号也可做为键盘列扫描码,键盘扫描的行数据从74HC245读回,374 ...…

查看全部问答>

有谁知道一般的科学计算器用的是什么型号的CPU?51系列还是其它的呢?谢谢!

自己想搭个硬件平台做科学计算器,把自己的计算器拆开只看到一个裸片,一块大黑痣里面是啥都看不到郁闷!有人知道一般的科学计算器都用什么cpu来实现么,不知c51能不能符合要求,因为c51对浮点的支持比较差,只支持到单精度,这对对精度要求较高的 ...…

查看全部问答>

以HID的SETREPORT为例说明如何使用STM32的USB库支持控制端点0

首先我们先回顾一下控制端点的传输方式:控制端点的传输有三个阶段,SETUP阶段、数据阶段和状态阶段;数据阶段又分为数据入(DATA IN)和数据出(DATA OUT),控制端点传输可以没有数据阶段;状态阶段有状态入(STATUS IN)和状态出( ...…

查看全部问答>

mqx 二进制大小

mqx 最小内核为6k,但不知道最大(全功能,如文件系统等)内核是多大?xiexie!…

查看全部问答>