斜率限制、滤波器、限幅
定义一个类Limiter,该类实现对输入数据的最大、小幅值限制、斜率限制、一阶低通滤波、均值滤波。
头文件Limiter.h如下:
#include <iostream>
class Limiter
{
private:
/* data */
public:
Limiter(/* args */) = default;
~Limiter() = default;
void maxMinLimiter(float minLim, float maxLim, float &data);
void slopeLimiter(float slopeLim, float &data);
void firstOrderLowFilter(float firstOrderFilterCoef, float &data);
void meanFilter(int numSlideWindow, float &data);
};
源文件Limiter.h如下:
#include "Limiter.h"
void Limiter::maxMinLimiter(float minLim, float maxLim, float &data)
{
if (data < minLim)
{
data = minLim;
}
else if (data > maxLim)
{
data = maxLim;
}
else
{
// data=data;
}
}
void Limiter::slopeLimiter(float slopeLim, float &data)
{
static float dataLast;
if (std::abs(data - dataLast) > slopeLim)
{
if (data - dataLast >= 0)
data = dataLast + slopeLim;
else
{
data = dataLast - slopeLim;
}
}
else
{
// do nothing
}
dataLast = data;
}
void Limiter::firstOrderLowFilter(float firstOrderFilterCoef, float &data)
{
static float dataLast;
data = (1 - firstOrderFilterCoef) * dataLast + firstOrderFilterCoef * data;
dataLast = data;
}
void Limiter::meanFilter(int numSlideWindow, float &data)
{
static float dataLast1, dataLast2, dataLast3, dataLast4;
data = (dataLast1 + dataLast2 + dataLast3 + dataLast4 + data) / 5;
dataLast1 = data;
dataLast2 = dataLast1;
dataLast3 = dataLast2;
dataLast4 = dataLast3;
}
使用Cmake对工程进行编译:这里是生成一个静态库,CMakeLists.txt文件编写如下:
# 设置 CMake 最低版本要求
cmake_minimum_required(VERSION 3.8)
# 定义项目名称和版本
set(projectName Limiter)
project(${projectName} VERSION 1.0.0 LANGUAGES CXX)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# include_directories(./Limiter)
# 添加源文件
set(SOURCE_FILES ./Limiter.cpp)
# 生成静态库
add_library(${projectName} STATIC ${SOURCE_FILES})
3、再写一个main函数,用来使用上述Limiter类。
后续补充。。。。
4、使用Cmake对工程进行编译:这里是将main函数编译生成一个可执行文件demo .exe,CMakeLists.txt文件编写如下:
# 设置 CMake 最低版本要求
cmake_minimum_required(VERSION 3.8)
set(CMAKE_C_COMPILER gcc)
set(CMAKE_CXX_COMPILER g++)
# 定义项目名称和版本
project(demo)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# 添加子项目
add_subdirectory(./Limiter)
# 添加源文件
set(SOURCE_FILES ./main.cpp)
# 生成可执行文件
add_executable(demo ${SOURCE_FILES})
# # 为特定目标设置头文件目录
# target_include_directories(${projectName} PRIVATE include)
# 链接静态库
target_link_libraries(demo PRIVATE PolyFitter LinearInterpolation Limiter)
5、因代码和CMakeLists.txt编译文件中涉及文件路径,故给出如下工程目录层级以便参考(编译的过程文件、库文件及可执行文件均在build目录下):
6、Windows环境下编译手法,在工程顶层目录下直接命令行运行:.\build.bat
cd build
cmake -G “MinGW Makefiles” ..\src\
make
.\demo.exe
水平有限,请广大同学批评指正!