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; }