捷浦智能专注为工业智能制造提供运动控制卡
捷浦智能
Jiepu Intelligence
为工业自动化提供最佳解决方案
捷浦智能国产多轴运动控制器
联系电话:      18925289017      15507535427
捷浦智能
捷浦智能专注为工业智能制造场景提供精密执行单元,控制核心零部件,传感模块,C++设备软件
捷浦智能多轴运动控制器 实现抑振控制简单示例
来源: | 作者:jiepus | 发布时间: 2024-01-28 | 1604 次浏览 | 分享到:

```cpp

#include <iostream>

#include <vector>

#include <cmath>


// 计算离散傅里叶变换(DFT)

std::vector<double> dft(const std::vector<double>& signal) {

    int N = signal.size();

    std::vector<double> result(N);

    for (int k = 0; k < N; ++k) {

        double sum = 0;

        for (int n = 0; n < N; ++n) {

            double angle = -2 * M_PI * k * n / N;

            sum += signal[n] * std::cos(angle);

        }

        result[k] = sum;

    }

    return result;

}


// 通过预滤波器去除共振荡频率

std::vector<double> remove_coherent_noise(const std::vector<double>& signal, double threshold) {

    std::vector<double> dft_result = dft(signal);

    int N = signal.size();

    for (int i = 1; i < N / 2; ++i) {

        if (std::abs(dft_result[i]) > threshold) {

            dft_result[i] = 0;

        }

    }

    std::vector<double> filtered_signal(N);

    for (int n = 0; n < N; ++n) {

        double sum = 0;

        for (int k = 0; k < N; ++k) {

            double angle = 2 * M_PI * k * n / N;

            sum += dft_result[k] * std::cos(angle);

        }

        filtered_signal[n] = sum;

    }

    return filtered_signal;

}


int main() {

    std::vector<double> signal = {1, 2, 3, 4, 5, 6, 7, 8};

    double threshold = 10;

    std::vector<double> filtered_signal = remove_coherent_noise(signal, threshold);

    for (double value : filtered_signal) {

        std::cout << value << " ";

    }

    std::cout << std::endl;

    return 0;