ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
956574 Топик полностью
йцукен (01.11.2019 18:30, просмотров: 613) ответил Ксения на Именно от бедности - не хватает скорости на более эффективные методы фильтрации. В моем случае DMA непрерывно и циклически заполняет буфер данными от АЦП. По прерываниям от DMA в центре буфера и его конце соответствующая половина буфера
Если я нигде не промахнулся, вот вам программа, которая считает подавление белого шума в штуках и децибеллах.  #include <iostream> #include <complex> double constexpr PI = 3.14159265358979323846; using cmplx = std::complex<double>; double f(double a) { constexpr size_t n = 1024; double integral = 0.0; for (size_t k = 0; k < n; ++k) { double w = PI * k / n; cmplx z = exp(cmplx{ 0.0, -w }); cmplx h = a * z / (1.0 - (1.0 - a) * z); // H(w) double m = abs(h); integral += m * m; } return integral / n; } int main() { double a; for (;;) { std::cout << "enter a "; std::cin >> a; if (a <= 0.0 || a >= 1.0) break; double k = f(a); double dB = 10.0 * log10(k); std::cout << sqrt(k) << " " << dB << '\n'; } std::cout << "Goodbye cruel world\n"; }