传感器信号处理仿真实验(c语言实现),均值滤波,滑动滤波

文章目录

      • 总结
      • test1、动态显示一段正弦波信号的曲线:
      • test2、现提供随机信号函数,随意设定两路不同幅度的随机信号,动态显示出来。
      • test3、用均值法将原始的传感器信号进行滤波处理
      • test4、用滑动滤波法将原始的传感器信号进行滤波处理

总结

1.为什么传感器要进行信号处理:
仪器仪表上面的数据如果是跳来跳去的话,就没法用,比如说压力传感器,一会显示1一会显示2,那么这个数字就没多大意义,所以需要进行信号处理。
2.这个仿真的代码中while(1)起到的是画点的作用,
LCD_L0_DrawPixel(x, y)是画一个像素点,可以用一个for循环改变这个点的xy坐标值画不同的连续的点,很多个点动起来就成了一条线。
其中rand()%40意味着随机信号的幅度在40以内。
3.void draw_graphic(int y,int z,int color)这个函数起到了让点动起来的作用。

test1、动态显示一段正弦波信号的曲线:

整个文件很大,但是目前只需要处理MainTask.c文件的内容:

以下是MainTask.c文件的内容

#include "GUI.h"
#include "GUI_Protected.h"#include <stdio.h>
#include <string.h>
#include <math.h>
#define pi 3.1415926
#define LVBOTIME 20
extern const GUI_BITMAP bmMicriumLogo;
extern const GUI_BITMAP bmMicriumLogo_1bpp;
void draw_graphic(int y,int z,int color);
int yy[2][320];
int LVBO[LVBOTIME];/*
*******************************************************************
*
*              main()
*
*******************************************************************
*/
void MainTask(void) {int Cnt =0;int YPos,shidu=0,wendu=0;int x,y=0,flag_x=1,flag_y=1;float z=0,i=0;int LCDXSize = LCD_GET_XSIZE();int LCDYSize = LCD_GET_YSIZE();const GUI_BITMAP *pBitmap;GUI_Init();GUI_SetColor(GUI_BLUE);GUI_SetBkColor(GUI_WHITE);GUI_Clear();GUI_DispStringHCenterAt("jym016", 280, 200);while(1){i++;if(i==360) i=0;z=sin(i/180*pi*4);draw_graphic(z*20+120,1,GUI_RED);}
}void draw_graphic(int y,int z,int color)
{int x=0;GUI_SetColor(GUI_WHITE);for(x=0;x<320;x++){   LCD_L0_DrawPixel(x+1, yy[z][x]);if(yy[z][x]<yy[z][x+1])GUI_DrawVLine(x+1, yy[z][x], yy[z][x+1]); elseGUI_DrawVLine(x+1, yy[z][x+1], yy[z][x]); }for(x=0;x<320;x++){yy[z][x]=yy[z][x+1];}yy[z][319]=y;GUI_SetColor(color);for(x=0;x<320;x++){LCD_L0_DrawPixel(x+1, yy[z][x]);if(yy[z][x]<yy[z][x+1])GUI_DrawVLine(x+1, yy[z][x], yy[z][x+1]); elseGUI_DrawVLine(x+1, yy[z][x+1], yy[z][x]); }GUI_Delay(50);
}

实验结果:
在这里插入图片描述
在这里插入图片描述

test2、现提供随机信号函数,随意设定两路不同幅度的随机信号,动态显示出来。

#include "GUI.h"
#include "GUI_Protected.h"#include <stdio.h>
#include <string.h>
#include <math.h>
#define pi 3.1415926
#define LVBOTIME 20
extern const GUI_BITMAP bmMicriumLogo;
extern const GUI_BITMAP bmMicriumLogo_1bpp;
void draw_graphic(int y,int z,int color);
int yy[2][320];
int LVBO[LVBOTIME];/*
*******************************************************************
*
*              main()
*
*******************************************************************
*/
void MainTask(void) {int Cnt =0;int i,YPos,shidu=0,wendu=0;int x,y,flag_x=1,flag_y=1;float z=0;int LCDXSize = LCD_GET_XSIZE();int LCDYSize = LCD_GET_YSIZE();const GUI_BITMAP *pBitmap;GUI_Init();GUI_SetColor(GUI_BLUE);GUI_SetBkColor(GUI_WHITE);GUI_Clear();GUI_DispStringHCenterAt("jym016", 280, 200);while(1){y = rand()%40;draw_graphic(y+50,0,GUI_RED);y = rand()%10;draw_graphic(y+150,1,GUI_BLUE);}
}void draw_graphic(int y,int z,int color)
{int x=0;GUI_SetColor(GUI_WHITE);for(x=0;x<320;x++){   LCD_L0_DrawPixel(x+1, yy[z][x]);if(yy[z][x]<yy[z][x+1])GUI_DrawVLine(x+1, yy[z][x], yy[z][x+1]); elseGUI_DrawVLine(x+1, yy[z][x+1], yy[z][x]); }for(x=0;x<320;x++){yy[z][x]=yy[z][x+1];}yy[z][319]=y;GUI_SetColor(color);for(x=0;x<320;x++){LCD_L0_DrawPixel(x+1, yy[z][x]);if(yy[z][x]<yy[z][x+1])GUI_DrawVLine(x+1, yy[z][x], yy[z][x+1]); elseGUI_DrawVLine(x+1, yy[z][x+1], yy[z][x]); }GUI_Delay(50);
}

实验结果:
在这里插入图片描述
在这里插入图片描述

test3、用均值法将原始的传感器信号进行滤波处理

#include "GUI.h"
#include "GUI_Protected.h"#include <stdio.h>
#include <string.h>
#include <math.h>
#define pi 3.1415926
#define LVBOTIME 20
extern const GUI_BITMAP bmMicriumLogo;
extern const GUI_BITMAP bmMicriumLogo_1bpp;
void draw_graphic(int y,int z,int color);
int yy[2][320];
int LVBO[LVBOTIME];/*
*******************************************************************
*
*              main()
*
*******************************************************************
*/
void MainTask(void) {int Cnt =0;int i,YPos,shidu=0,wendu=0;int x,y=0,flag_x=1,flag_y=1;float z=0;int LCDXSize = LCD_GET_XSIZE();int LCDYSize = LCD_GET_YSIZE();const GUI_BITMAP *pBitmap;GUI_Init();GUI_SetColor(GUI_BLUE);GUI_SetBkColor(GUI_WHITE);GUI_Clear();GUI_DispStringHCenterAt("jym016", 280, 200);while(1){draw_graphic(y+50,0,GUI_RED);for(x=0;x<LVBOTIME;x++){y = rand()%40;z+=y;}z/=LVBOTIME;draw_graphic(z+150,1,GUI_GREEN);}
}void draw_graphic(int y,int z,int color)
{int x=0;GUI_SetColor(GUI_WHITE);for(x=0;x<320;x++){   LCD_L0_DrawPixel(x+1, yy[z][x]);if(yy[z][x]<yy[z][x+1])GUI_DrawVLine(x+1, yy[z][x], yy[z][x+1]); elseGUI_DrawVLine(x+1, yy[z][x+1], yy[z][x]); }for(x=0;x<320;x++){yy[z][x]=yy[z][x+1];}yy[z][319]=y;GUI_SetColor(color);for(x=0;x<320;x++){LCD_L0_DrawPixel(x+1, yy[z][x]);if(yy[z][x]<yy[z][x+1])GUI_DrawVLine(x+1, yy[z][x], yy[z][x+1]); elseGUI_DrawVLine(x+1, yy[z][x+1], yy[z][x]); }GUI_Delay(50);
}

实验结果:
在这里插入图片描述

test4、用滑动滤波法将原始的传感器信号进行滤波处理

#include "GUI.h"
#include "GUI_Protected.h"#include <stdio.h>
#include <string.h>
#include <math.h>
#define pi 3.1415926
#define LVBOTIME 20
extern const GUI_BITMAP bmMicriumLogo;
extern const GUI_BITMAP bmMicriumLogo_1bpp;
void draw_graphic(int y,int z,int color);
int yy[2][320];
int LVBO[LVBOTIME];/*
*******************************************************************
*
*              main()
*
*******************************************************************
*/
void MainTask(void) {int Cnt =0;int i,YPos,shidu=0,wendu=0;int x,y,flag_x=1,flag_y=1;float z=0;int LCDXSize = LCD_GET_XSIZE();int LCDYSize = LCD_GET_YSIZE();const GUI_BITMAP *pBitmap;GUI_Init();GUI_SetColor(GUI_BLUE);GUI_SetBkColor(GUI_WHITE);GUI_Clear();GUI_DispStringHCenterAt("jym016", 280, 200);while(1){y = rand()%40;draw_graphic(y+50,0,GUI_RED);for(x=0;x<LVBOTIME;x++)LVBO[x] = LVBO[x+1];LVBO[LVBOTIME-1] = y;z=0;for(x=0;x<LVBOTIME;x++)z += LVBO[x];z/=LVBOTIME;draw_graphic(z+140,1,GUI_GREEN);}
}void draw_graphic(int y,int z,int color)
{int x=0;GUI_SetColor(GUI_WHITE);for(x=0;x<320;x++){   LCD_L0_DrawPixel(x+1, yy[z][x]);if(yy[z][x]<yy[z][x+1])GUI_DrawVLine(x+1, yy[z][x], yy[z][x+1]); elseGUI_DrawVLine(x+1, yy[z][x+1], yy[z][x]); }for(x=0;x<320;x++){yy[z][x]=yy[z][x+1];}yy[z][319]=y;GUI_SetColor(color);for(x=0;x<320;x++){LCD_L0_DrawPixel(x+1, yy[z][x]);if(yy[z][x]<yy[z][x+1])GUI_DrawVLine(x+1, yy[z][x], yy[z][x+1]); elseGUI_DrawVLine(x+1, yy[z][x+1], yy[z][x]); }GUI_Delay(50);
}

实验结果:
在这里插入图片描述
可以看出滑动滤波比均值滤波效果好得多

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560409.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python和php合成,Python照片合成的方法详解

【相关学习推荐&#xff1a;python教程】文章目录前言Github效果实现过程整体代码前言看电影的时候发现一个照片墙的功能&#xff0c;觉得这样生成照片挺好玩的&#xff0c;于是就动手用Python做了一下&#xff0c;觉得用来作照片纪念的效果可能会不错。P:后面了解到我想做的功…

蓝桥杯入门练习1-4(python)

1.Fibonacci数列 Fibonacci数列的递推公式为&#xff1a;FnFn-1Fn-2&#xff0c;其中F1F21。 当n比较大时&#xff0c;Fn也非常大&#xff0c;现在我们想知道&#xff0c;Fn除以10007的余数是多少。 输入格式 输入包含一个整数n。 输出格式 输出一行&#xff0c;包含一个整数…

12514oracle数据库重启,12514(linux登录oracle数据库)

ora-12514的错误的原因有很多。但无外乎这几种&#xff1a;1)、 ORA-12541: TNS&#xff1a; 没有监听器 显而易见&#xff0c;服务器端的监听器没有启动&#xff0c;另外检查客户端IP地址或端口填写是否正.早上同事用PL/SQL连接虚拟机中的Oracle数据库&#xff0c;发现又报了“…

python常用输入输出の方法

获取用户输入&#xff1a; Python split()方法&#xff1a; #Python split()方法&#xff1a; """ 描述 Python split() 通过指定分隔符对字符串进行切片&#xff0c;如果参数 num 有指定值&#xff0c;则分隔 num1 个子字符串 语法 split() 方法语法&#xf…

存储器和寄存器数据传输(ARMv8)

存储器和寄存器交互操作(ARMv8) 1.为什么需要存储器和寄存器交互操作&#xff1f; 编程语言中可能有数组和结构体这样复杂的数据结构。处理器只能保存少量数据到寄存器&#xff0c;但是可以存储器中放数十亿数据&#xff0c;因此数据结构存在存储器中。LEGv8指令只对寄存器操…

linux下载命令 scp,linux命令详解之scp命令

作用scp命令常用于linux之间复制文件和目录。scp是secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。格式从本地复制到远程复制文件scp local_file remote_usernameremote_ip:remote_folder或者scp local_file remote_usernameremote_ip:remote_fil…

python常用类型转换の方法

python实现字符和ascll转换 # 用户输入字符 c input("请输入一个字符: ") # 用户输入ASCII码&#xff0c;并将输入的数字转为整型 a int(input("请输入一个ASCII码: ")) print( c " 的ASCII 码为", ord(c)) print( a , " 对应的字符为&…

linux系统运行pbs出现ntf,Linux系统启动故障修复

Linux在启动过程中会出现一些故障&#xff0c;导致系统无法正常启动&#xff0c;本文列举了几个应用单用户模式、GRUB命令操作、Linux救援模式的典型故障修复案例。一、单用户模式Linux提供了单用户模式(类似Windows安全模式)&#xff0c;可以在最小环境中进行系统维护。在单用…

python常用进制转换の方法

python常用进制转换の方法 &#xff08;正整数&#xff09;任意进制转十进制 1.int()函数 描述 int() 函数用于将一个字符串或数字转换为整型。 语法 class int(x, base10) 参数 x -- 字符串或数字。 base -- 进制数&#xff0c;默认十进制。 返回值 返回整型数据。>>&…

在安卓手机上下载linux系统,如何在安卓手机上运行Ubuntu系统

Ubuntu是一款linux系统&#xff0c;一般我们都是将其运行在电脑中&#xff0c;可不可以在手机端也能运行Ubuntu呢&#xff1f;也是可以的&#xff0c;想知道如何实现的&#xff0c;就跟我来吧。第一步:首先, 你的手机需要获取root权限. 如果不知道如何获取, 可以到搜索一下安卓…

linux系统如何挂载新硬盘,Linux系统挂载新硬盘操作流程

1、登录后输入fdisk -l命令看当前磁盘信息2、可以看到除了当前的第一块硬盘外还有一块sdb的第二块硬盘&#xff0c;然后用fdisk /dev/sdb 进行分区3、进入fdisk命令&#xff0c;输入h可以看到该命令的帮助&#xff0c;按n进行分区4、这里输入e即分为逻辑分区&#xff0c;按p即分…

蓝桥杯基础练习1-15(python)

BASIC-1 闰年判断 问题描述 给定一个年份&#xff0c;判断这一年是不是闰年。 当以下情况之一满足时&#xff0c;这一年是闰年&#xff1a; 年份是4的倍数而不是100的倍数&#xff1b;年份是400的倍数。 其他的年份都不是闰年。 输入格式 输入包含一个整数y&#xff0c;表…

linux长期版本维护内容,[图]Linux Kernel 4.20首个维护版本更新发布 已稳定可广泛部署...

Linux Kernel 4.20内核系列由Linus Torvalds于2018年12月23日发布&#xff0c;是目前Linux内核最新的分支。目前在Kernel.org网站上4.20.1版本标记已经从“Mainline”调整为“stable”&#xff0c;意味着可以被大部分Linux发行版本使用。而Arch Linux是首个装备4.20.1的发行版本…

python列表常用の操作

python列表常用の方法 列表操作&#xff1a; 1.创建列表&#xff1a; 向列表添加元素&#xff1a; [i for i in range(1,10)]列表解析式&#xff1a; #将 1-10 每个数乘以 2 放入一个列表&#xff1a; >>> li [] >>> for i in range(1, 11):li.append(…

linux讲日志暂停,linux – Rsyslog在日志轮换后停止向远程服务器发送数据

在我的配置中,我有rsyslog负责使用imfile跟踪/home/user/my_app/shared/log/unicorn.stderr.log的更改.使用TCP将内容发送到另一个远程日志记录服务器.当日志文件旋转时,rsyslog会停止向远程服务器发送数据.我尝试重新加载rsyslog,发送HUP信号并完全重新启动它,但没有任何效果.…

三角函数和反三角函数图像、导数、积分、等式关系

之前对三角函数的理解仅局限于sin&#xff0c;cos&#xff0c;tan。但是目前遇到的都是些csc&#xff0c;sec&#xff0c;cot&#xff0c;arctan&#xff0c;arccos&#xff0c;arcsin。积分和求导还有一堆公式 最近看到了一个六边形记忆法&#xff0c;更加简便。 1.倒三角&am…

linux分区后盘符找不到,为什么我的磁盘不见了,怎么找回来啊?

2006-03-24 02:14:35找不回来了&#xff0c;因为你已经删除了这个分区&#xff0c;也就是说这个分区已经不存在了&#xff0c;文件分配表也被删掉了&#xff0c;所以没有办法找回来。动态、不可读取的意思就是这个空间还没有建立分区。全部2006-03-24 02:14:352006-03-23 12:36…

ds18b20温度传感器驱动编写

协议 DS18B20的一线工作协议流程是&#xff1a;初始化→ROM操作指令→存储器操作指令→数据传输&#xff0c;其工作时序包括&#xff1a;初始化时序、写时序、读时序。 黑色部分表示单片机操作&#xff0c;蓝色部分表示18b20操作&#xff0c;每次主机操作完成之后等待18b20状…

安装linux前分区,安装Linux系统前的准备之磁盘分区

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼欢迎加入IT技术交流YY频道8625.安装Red Hat Enterpeise Linux系统时&#xff0c;至少需要3个磁盘分区&#xff0c;分别用于创建“/”文件系统&#xff0c;/boot文件系统和交换分区。对于初学者、个人使用的Red Hat Enterpeise Linu…

SHT1x/SHT7x数字温湿度传感器驱动编写

结构图 启动传输时序图 SHT10串行通信IO初始化 其中SDA和SCL分别是数据线和时钟线。分别对应单片机的1.1口和1.0口 #define SCL P1_0 //SHT10时钟 #define SDA P1_1 //SHT10数据线由时序图可知&#xff0c;一开始SDA和SCL分别高电平和低电平 /****…