低通滤波器

低通滤波器

低通滤波器具备通低频阻高频的功能,并且低通滤波器的特性使得低于设定临界值频率的信号能正常通过,而高于设定临界值频率(fc)的信号则被阻隔和衰减。低通滤波可以简单的认为:设定一个频率点,当信号频率高于这个频率时不能通过。

1. 一阶低通滤波算法原理

一阶滤波,又叫一阶惯性滤波,或一阶低通滤波,

Y ( n ) = α X ( n ) + ( 1 − α ) Y ( n − 1 ) Y(n)=αX(n)+(1−α)Y(n−1) Y(n)=αX(n)+(1α)Y(n1)

式中:α为滤波系数,X ( n ) 为本次采样值,Y ( n − 1 ) 为上次滤波输出值,Y ( n )为本次滤波输出值
在这里插入图片描述

线程

一:进程和线程的定义
(1)进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.
(2)线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

多线程

假设一个任务的执行代码有50步,通常编程只会一次执行完毕,但是我们现在需要想想,因为我们会嫌这个任务总占用着ALU的时间而影响其他任务的执行效果,所以就可以对任务进行划分,把它分为5份,每份10步,这样我们每次执行其中的一个程序片–每次正在运行的程序片我们称为线程。

在这里插入图片描述
typedef struct{
	u8 isTask_Living;
	u8 Thread_Process;
}myTask;
void Task(void)
{
	if(Task.isTask_Living)
	{
	Task.isTask_Living = !myThread3(&Task3,&Task3.Thread_Process);
	}
}
/*初始化任务变量*/
void InitTask4(myTask4 *Task)
{
	Task->isTask_Living=1;
	Task->Thread_Process=0;
}

/*功能:任务线程
**参数:myTask:Task任务类型
**	  :Process:unsigned char*类型,线程指针
**返回值:CHAR类型,线程结束,或未结束
*/
static int myThread(myTask *Task,unsigned char *Process)
{
	int ret=0;
	switch(*Process)
	{
		case 0:
		//程序片1
		break;
		case 1:
		//程序片2
		break;
		case 2:
		//程序编3
		break;
		default:break;
	}
	(*Process)++;
	if(*Process>3)
	{
		ret = -1;
		*Process = 0;
	}
	return ret;
}

void TaskCommunication(void)
{
	if(Task.isTask_Living)
	{
	Task.isTask_Living = !myThread(&Task4,&Task4.Thread_Process);
	}
}

在这里插入图片描述

堆栈

堆:是大家共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配,运行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏。

栈:是个线程独有的,保存其运行状态和局部自动变量的。栈在线程开始的时候初始化,每个线程的栈互相独立,因此,栈是 thread safe的。操作系统在切换线程的时候会自动的切换栈,就是切换SS/ESP寄存器。栈空间不需要在高级语言里面显式的分配和释放。

程序的内存分配

一个由 c/C++ 编译的程序占用的内存分为以下几个部分:
1 、栈区( stack ) — 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。

2 、堆区( heap ) — 一般由程序员分配释放,若程序员不释放,程序结束时可能由 OS 回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

3 、全局区(静态区)( static ) — ,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后由系统释放。

4 、文字常量区 — 常量字符串就是放在这里的。程序结束后由系统释放。

5 、程序代码区 — 存放函数体的二进制代码。

进程线程及堆栈关系的总结_线程堆栈 进程的关系-CSDN博客

image-20240709165937133

C++类

类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。

class Father
{
	//公共的行为或者属性(变量)
public:
	//受保护的行为或者属性(变量)
protected:
	//私有的行为或者属性(变量)
private:
};

Static关键字

C/C++ static关键字详解(最全解析,static是什么,static如何使用,static的常考面试题)-CSDN博客

常被用来控制变量的存储方式和作用范围

img
  • 在函数中声明变量时, static 关键字指定变量只初始化一次,并在之后调用该函数时保留其状态。函数结束时变量不销毁

  • static修饰局部变量时,会改变局部变量的存储位置,从而使得局部变量的生命周期变长。

  • static的另一个作用是默认初始化为0,全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00

static修饰全局变量和函数

在全局和/或命名空间范围 (在单个文件范围内声明变量或函数时) static 关键字指定变量或函数为内部链接,即外部文件无法引用该变量或函数。从而使得全局变量的作用域变小

img

C++(类)中的 static

1️⃣:静态成员为所有类对象所共享,不属于某个具体的实例
2️⃣:静态成员变量必须在类外定义(声明后定义即赋值),定义时不添加static关键字
3️⃣:静态成员函数没有隐藏的this指针,不能访问任何非静态成员
4️⃣:访问静态成员变量的特殊方式
5️⃣:静态成员和类的普通成员一样,也有public、protected、private3种访问级别,也可以具有返回值

卡尔曼滤波

卡尔曼滤波是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。

Kalman滤波通俗理解+实际应用_卡尔曼滤波应用实例-CSDN博客

IMU

IMU 惯性测量单元(Inertial Measurement Unit) 是测量物体三轴角速度和加速度的设备。狭义上,一个IMU内在正交的三轴上安装陀螺仪和加速度计,共6个自由度,来测量物体在三维空间的角速度和加速度,这就是我们熟知的"6轴IMU";广义上,IMU可在加速度计和陀螺仪的基础上加入磁力计,就形成了"9轴IMU"。

惯性测量单元(Inertial Measurement Unit)是测量物体三轴姿态角(或角速率)以及加速度的装置。一般的,一个IMU包含了三个单轴的加速度计和三个单轴的陀螺,加速度计检测物体在载体坐标系统独立三轴的加速度信号,而陀螺检测载体相对于导航坐标系的角速度信号,测量物体在三维空间中的角速度和加速度。

加速度计工作原理

加速度计的本质是检测力而非加速度,即加速度计的检测装置捕获的是引起加速度的惯性力,随后可利用牛顿第二定律获得加速度值。测量原理可以用一个简单的质量块、弹簧和指示计来表示。加速度计测量值 a m = f m = a − g a_m=\dfrac{f}{m}=a-g am=mf=ag 弹簧拉力对应的加速度, f f f 弹簧拉力,$a 物体在惯性系统下的加速度, 物体在惯性系统下的加速度, 物体在惯性系统下的加速度,g 为重力加速度。加速度计利用电容或者电阻桥等原理测量 为重力加速度。加速度计利用电容或者电阻桥等原理测量 为重力加速度。加速度计利用电容或者电阻桥等原理测量a_m$

陀螺仪的工作原理

一文了解IMU原理、误差模型、标定、惯性传感器选型以及IMU产品调研(含IMU、AHRS、VRU和INS区别)-CSDN博客

当一个质点相对于惯性系做直线运动时,因为质点自身惯性,它相对于旋转体系,其轨迹是一条曲线。立足于旋转体系,我们认为有一个力驱使质点运动轨迹形成曲线。

在陀螺仪中,选用两块物体,他们处于不断的运动中,并令他们运动的相位相差-180度,即两个质量块运动速度方向相反,而大小相同。它们产生的**科氏力相反,从而压迫两块对应的电容板移动,产生电容差分变化**。电容的变化正比于旋转角速度。由电容即可得到旋转角度变化。

在这里插入图片描述 在这里插入图片描述
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值