c++一维信号平滑处理
时间: 2023-07-19 16:20:19 浏览: 72
一维信号平滑处理通常使用移动平均法,即对信号中每个点的前后若干个点进行求平均处理,得到平滑后的信号。
以下是一个使用C++实现的一维信号平滑处理的示例代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
// 一维信号平滑处理函数
vector<double> smooth(vector<double> signal, int window_size) {
vector<double> smoothed_signal;
// 计算前后各window_size/2个点的平均值
for (int i = 0; i < signal.size(); i++) {
double sum = 0.0;
int count = 0;
for (int j = i - window_size/2; j <= i + window_size/2; j++) {
if (j >= 0 && j < signal.size()) {
sum += signal[j];
count++;
}
}
smoothed_signal.push_back(sum / count);
}
return smoothed_signal;
}
int main() {
// 定义信号
vector<double> signal = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 平滑处理
int window_size = 3;
vector<double> smoothed_signal = smooth(signal, window_size);
// 输出结果
for (int i = 0; i < smoothed_signal.size(); i++) {
cout << smoothed_signal[i] << " ";
}
cout << endl;
return 0;
}
```
在上面的代码中,smooth函数接收一个一维信号和一个窗口大小,返回平滑后的信号。在函数中,对于每个点,计算其前后各window_size/2个点的平均值并加入到平滑后的信号中。最后输出平滑后的信号。
注意,在计算平均值时需要注意边界问题,需要确保计算的点在信号范围内。