Exemplo n.º 1
0
int main(void)
{
    std::ofstream outfileInclude;
    outfileInclude.open("../AllFilters.h", std::ios_base::out | std::ios_base::binary);
    outfileInclude << "/** This file is autogenerated, do not change manually\n*/\n";

    std::ofstream outfileTest;
    outfileTest.open("../tests/AllFilters_unittest.cpp", std::ios_base::out | std::ios_base::binary);
    outfileTest << "/** This file is autogenerated, do not change manually\n*/\n";
    outfileTest << "\n"
                       "#include <gtest/gtest.h>\n"
                       "#include <gmock/gmock-matchers.h>\n"
                       "#include <gmock/gmock-generated-matchers.h>\n"
                       "using ::testing::ElementsAre;\n"
                       "#include \"../FilterCoefficients.h\"\n"
                       "#include \"../FilterSuite.h\"\n"
                       "#include \"FftBinCompare.h\"\n"
                       "#include \"CalcBins.h\"\n\n";
    std::vector<PASSMODE> passmodes = {
        PM_LP,
        PM_HP,
        PM_BP,
        PM_BS};

    for (int order=1; order < 4; order++)
    {
        for (auto pm:passmodes)
        {
            GenerateFilter(false, outfileInclude, outfileTest, pm, FC_BESSEL, order);
            GenerateFilter(true, outfileInclude, outfileTest, pm, FC_BUTTERWORTH, order);
            GenerateFilter(true, outfileInclude, outfileTest, pm, FC_CHEBYSHEV, order);
        }
    }
    std::vector<PASSMODE> passmodesResonator = {
            PM_AP,
            PM_BP,
            PM_BS};
    for (auto pm:passmodesResonator)
    {
        GenerateFilter(false,outfileInclude, outfileTest, pm, FC_RESONATOR, 1);
    }

    return 0;
}
SolvedFilterGenerator::filter SolvedFilterGenerator::GenerateLogDilter(LoGSettings settings) {
	double maxError = 0.0001;
	double left = 0.5;
	double right = 1;
	SolvedFilterGenerator::filter filter;

	double fCent;
	double center;

	for (int i = 0; i < 1000; i++) {
		center = (right + left) / 2;
		variable = center;
		filter = GenerateFilter(settings);
		fCent = filter.filterNormError;

		variable = right;
		filter = GenerateFilter(settings);
		double fRight = filter.filterNormError;

		variable = left;
		filter = GenerateFilter(settings);
		double fLeft = filter.filterNormError;

		if ((fLeft < 0) && (fCent > 0)) {
			left = left;
			right = center;
		}
		else {
			left = center;
			right = right;
		}

		if (abs(fCent) < maxError)
			break;
		
		//std::cout << "i" << i <<  std::endl;
	} ;
	std::cout << "filter_done" << std::endl;
	variable = center;
	filter = GenerateFilter(settings);
	fCent = filter.filterError;

	return filter;
}