Если я нигде не промахнулся, вот вам программа, которая считает подавление белого шума в штуках и децибеллах.
#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";
}