我正在学习C++,并且根据我目前的知识,我认为我可以制作一个Cauer滤波器,因为所有需要的都是数学。我的问题是我没有起点。我应该选择开关/外壳吗?如果别的?这有点复杂。总的来说,过滤器是5个参数的函数,Ap,As,fp,fs和N(不需要细节),并且对于这5个中的任何4个,第5个会自动出现。因此,例如,如果指定了Ap,则存在一个中间术语epsilonP = sqrt(10 ^(Ap/10)-1),但是如果Ap = 0(需要从其他4个中推导出),则它是As和nomeQ的函数,nomeQ间接地是fp和fs的比率。而且,更糟糕的是,所有这些,epsilonP,nomeQ等都是最终计算所需的。C++ Cauer /椭圆滤波器的起点
起初,我尝试使用的if/else,这里就是我有:
double epsilonP, epsilonS, epsilonSC;
if (Ap)
epsilonP = sqrt(pow(10, Ap/10) - 1);
else
epsilonP = 16 * (pow(10, As/10) - 1) * exp(log(nomeQ) * N);
但nomeQ是H0的功能(在这种情况下),这是modulusK的功能,这是一个功能fp和fs的比例(或fs/fp,取决于另一个参数filterType),它们是可以指定为null的初始术语,以便可以从其他4!与之类似:如果As> 0,否则f(nomeQ),nomeQ可以如上所述是f(h0),或者N的直接函数是F(As),否则f是上面的f(fp,fs),或者取决于nomeQ2,这是N和nomeQ1的函数...我希望你看到我的问题。
只要你没有得到错误的想法,过滤器就在LTspice中实现并工作(请参阅ltspicegoodies.ltwiki.org/files/Filter.7z或.zip - 在过滤器内搜索“subckt Cauer” .sub),但是由于LTspice只能做很多事情(只有N,Ap或As可以为空),所以并非一切皆有可能。这就是为什么我开始学习C++,但是...在这里,我是。
所以,我的问题:任何人都可以提出一个这样的起点吗?我不是说有人为我做这件事,只是要求如何解决这个迷宫问题的建议。而且我不是在谈论每个可能性的程序,这不是一个解决方案。我开始写它,但是当我到了epsilonP并且我意识到了复杂性时,我只是停下来思考。