2016-06-16 2 views
0

私はC++を学んでいます。私の現在の知識では、必要なのは数学だけなので、私はCauerフィルタを作ることができると思いました。私の問題は、私には出発点がないことです。私はスイッチ/ケースを選択する必要がありますか?もし/ else?それは少し複雑です。C++ Cauer/elliptic filter starting point

全体として、フィルタは5つのパラメータ、Ap、As、fp、fs、N(詳細は必要ありません)の関数であり、これらの5つのうちの4つについては5番目が自動的に出力されます。たとえば、Apが指定されている場合、εp= sqrt(10 ^(Ap/10)-1)ですが、Ap = 0(他の4から推測する必要がある場合)これはAsとnomeQの関数であり、nomeQは間接的にfpとfsの比です。そして、さらに悪化させるためには、これらのすべて、εP、nomeQなどが最終的な計算に必要です。

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

をしかしmodulusKの機能、関数である(この場合)H0の機能は、nomeQです:/他には、ここにある場合

当初、私は私が持っているものを使用してみましたfpとfsの比(またはfs/fp、別のパラメータに応じて、filterType)は、他の4!から自動的に決定できるようにヌルに指定できる初期用語です。同様に、As> 0ならばf(As)、そうでなければf(nomeQ)、nomeQは上記のようにf(h0)であるか、Nの直接関数modulusKは上記のf(fp、fs) nomeQ2に依存します。これはNとnomeQ1の関数です...私はあなたが私の問題を見ることを願っています。

ちょうど間違った考え方をしていないので、フィルタはLTspiceで動作しています(ltspicegoodies.ltwiki.org/files/Filter.7z、または.zip - フィルタ内の "subckt Cauer"を検索してください)。 .sub)、LTspiceはそれほど多くのことしかできないので(N、ApまたはAsだけがnullになる可能性があるので)、あらゆる可能性ではありません。だから私はC++を学び始めたのですが、ここは私です。

私の問題は:誰もがこのすべての出発点を示唆することができますか?私は誰かが私のためにこれを作っているという意味ではなく、迷路に取り組む方法のアドバイスを求めています。そして、私はそれぞれの可能性のためのプログラムについて話しているわけではありません。それは解決策ではありません。私はそれを書くようになりましたが、イプシロンPになったら、合併症を理解しました。

答えて

0

私はこのような何か、スイッチ/ケースでそれを行うために管理:ゼロによる除算、ケースは、例えば、文句はない場合、私は確かに知らなかった何

input fp, fs, Ap, As, N; 
int test {(fp > 0) + 2*(fs > 0) + 3*(Ap > 0) + 4*(As > 0) + 5*(N > 0)}; 
switch (test) 
{ 
    case 14: nomeQ, modulusK, ... 
    case 13: nomeQ, modulusK, ... 
    case 12: 
    case 11: 
    default: 
    case 10: 
} 
rest of the code; 

でした真でないブランチ。明らかに、真のブランチが計算の結果として0で除算されても、コンパイルされますが、実行するとクラッシュします。偽の枝については、喜んでそれらを無視して走ります。

これまでのところ、これは最善の解決策に見えますが、私の質問が残っています。このような経験がある方は、正しい解決策を見つけるためのヒントやナッジをお試しください(これは、唯一のものではない)。私はちょうどC + +を学んでいます。