C++数字信号处理线性卷积
时间: 2024-12-05 16:14:41 浏览: 10
线性卷积是数字信号处理中的一个基本概念,用于描述两个离散信号通过线性时不变系统时的相互作用。在C++中实现线性卷积可以帮助我们理解和处理信号。
线性卷积的定义如下:
设有两个离散信号 \( x(n) \) 和 \( h(n) \),其线性卷积 \( y(n) \) 定义为:
\[ y(n) = \sum_{k=-\infty}^{\infty} x(k) \cdot h(n-k) \]
在C++中实现线性卷积的步骤如下:
1. 定义输入信号 \( x(n) \) 和卷积核 \( h(n) \)。
2. 初始化输出信号 \( y(n) \) 为零。
3. 遍历每个时间步,计算卷积结果。
以下是一个简单的C++代码示例,演示如何实现线性卷积:
```cpp
#include <iostream>
#include <vector>
std::vector<double> linearConvolution(const std::vector<double>& x, const std::vector<double>& h) {
int N = x.size();
int M = h.size();
int outputSize = N + M - 1;
std::vector<double> y(outputSize, 0.0);
for (int n = 0; n < outputSize; ++n) {
for (int k = 0; k < N; ++k) {
if (n - k >= 0 && n - k < M) {
y[n] += x[k] * h[n - k];
}
}
}
return y;
}
int main() {
std::vector<double> x = {1, 2, 3, 4};
std::vector<double> h = {1, 0, 1};
std::vector<double> y = linearConvolution(x, h);
std::cout << "Convolution result: ";
for (double val : y) {
std::cout << val << " ";
}
std::cout << std::endl;
return 0;
}
```
这个示例中:
- `linearConvolution` 函数接受两个向量作为输入,并返回卷积结果。
- `main` 函数中定义了两个示例信号 `x` 和 `h`,并调用 `linearConvolution` 函数计算卷积结果。
阅读全文