用c++写包络解调的代码
时间: 2024-02-16 07:03:54 浏览: 14
包络解调是一种信号处理技术,主要用于从调制信号中提取出包络信号。下面是用 C++ 实现包络解调的代码:
```cpp
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
// 包络解调
vector<double> envelope_demodulation(const vector<double>& x, int m) {
int n = x.size();
vector<double> y(n - m + 1);
for (int i = 0; i < n - m + 1; i++) {
double max_val = x[i];
for (int j = i + 1; j < i + m; j++) {
if (x[j] > max_val) {
max_val = x[j];
}
}
y[i] = max_val;
}
return y;
}
int main() {
// 构造测试数据
int n = 1000;
vector<double> x(n);
for (int i = 0; i < n; i++) {
x[i] = sin(2 * M_PI * i / 50) + sin(2 * M_PI * i / 100) + sin(2 * M_PI * i / 200);
}
// 包络解调
int m = 50; // 滑动窗口大小
vector<double> y = envelope_demodulation(x, m);
// 输出结果
for (int i = 0; i < y.size(); i++) {
cout << y[i] << " ";
}
cout << endl;
return 0;
}
```
在这个实现中,我们使用了一个滑动窗口来计算每个时刻的包络值。具体来说,我们从时刻 i 开始,向后取 m 个采样点,找出其中的最大值作为 i 时刻的包络值。这样,我们就可以得到整个信号的包络曲线了。