【基于VS Code/C++/Cmake开发】常见滤波、限幅等数据处理工具

斜率限制、滤波器、限幅

定义一个类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目录下):
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b75ad44949fb404db9a1bb3ea14992fe.png
6、Windows环境下编译手法,在工程顶层目录下直接命令行运行:.\build.bat

cd build
cmake -G “MinGW Makefiles” ..\src\
make
.\demo.exe

水平有限,请广大同学批评指正!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值