Beispiel #1
0
long double fft_rmse(const VT1 &fftbuf, const VT2 &timebuf)
{
    long double totalpower = 0;
    long double difpower   = 0;
    long double pi         = acos((long double)-1);

    for (size_t k0 = 0; k0 < (size_t)fftbuf.size(); ++k0)
    {
        complex<long double> acc   = 0;
        long double          phinc = -2. * k0 * pi / timebuf.size();

        for (size_t k1 = 0; k1 < (size_t)timebuf.size(); ++k1)
        {
            acc += promote(timebuf[k1]) * exp(complex<long double>(0, k1 * phinc));
        }

        totalpower += norm(acc);
        complex<long double> x   = promote(fftbuf[k0]);
        complex<long double> dif = acc - x;
        difpower += norm(dif);
        // cerr << k0 << "\t" << acc << "\t" <<  x << "\t" << sqrt(norm(dif)) << endl;
    }

    cerr << "rmse:" << sqrt(difpower / totalpower) << endl;
    return sqrt(difpower / totalpower);
}
Beispiel #2
0
 long double dif_rmse( const VT1 buf1,const VT2 buf2)
 {
     long double totalpower=0;
     long double difpower=0;
     size_t n = min( buf1.size(),buf2.size() );
     for (size_t k=0;k<n;++k) {
         totalpower += (norm( buf1[k] ) + norm(buf2[k]) )/2.;
         difpower += norm(buf1[k] - buf2[k]);
     }
     return sqrt(difpower/totalpower);
 }