GBT6323中针对汽车频域特性的角脉冲试验那位有处理程序可以分享一下吗?
1条回答 默认 最新
- 答主 2023-02-19 10:39关注
简单的示例程序
#include <iostream> #include <fstream> #include <vector> #include <complex> #include <cmath> using namespace std; const double pi = 3.14159265358979323846; vector<complex<double>> fft(const vector<complex<double>> &x) { int n = x.size(); if (n == 1) return vector<complex<double>> {x[0]}; vector<complex<double>> x0, x1; for (int i = 0; i < n; i++) (i % 2 == 0 ? x0 : x1).push_back(x[i]); auto y0 = fft(x0), y1 = fft(x1); vector<complex<double>> y(n); for (int i = 0; i < n / 2; i++) { complex<double> t = polar(1.0, -2 * pi * i / n) * y1[i]; y[i] = y0[i] + t; y[i + n / 2] = y0[i] - t; } return y; } vector<double> conv(const vector<double> &x, const vector<double> &y) { int n = x.size(), m = y.size(); vector<complex<double>> a(n), b(m); for (int i = 0; i < n; i++) a[i] = complex<double>(x[i], 0); for (int i = 0; i < m; i++) b[i] = complex<double>(y[i], 0); int k = 1; while (k < n + m) k *= 2; a.resize(k), b.resize(k); auto c = fft(a), d = fft(b); for (int i = 0; i < k; i++) c[i] *= d[i]; auto e = fft(c); vector<double> z(n + m - 1); for (int i = 0; i < n + m - 1; i++) z[i] = e[i].real() / k; return z; } int main() { ifstream fin("input.txt"); ofstream fout("output.txt"); int n, m; fin >> n >> m; vector<double> x(n), y(m); for (int i = 0; i < n; i++) fin >> x[i]; for (int i = 0; i < m; i++) fin >> y[i]; auto z = conv(x, y); for (int i = 0; i < z.size(); i++) fout << z[i] << endl; return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 ETLCloud 处理json多层级问题
- ¥15 matlab中使用gurobi时报错
- ¥15 这个主板怎么能扩出一两个sata口
- ¥15 不是,这到底错哪儿了😭
- ¥15 2020长安杯与连接网探
- ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
- ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
- ¥16 mybatis的代理对象无法通过@Autowired装填
- ¥15 可见光定位matlab仿真
- ¥15 arduino 四自由度机械臂