Inner_product
-
for(int i=0; i<(int)size;++i) { double x=0; for( int k=0;k<(int)order;++k) x=x+Coeff[k]*VecOrig[i+k]; VecFilt.push_back(x); }Wollte das obige Code schöner schreiben mit <numeric>, aber es klappt nicht. Der
for(int i=0; i<(int)size;++i) { double x=inner_product(Coeff.begin(),Coeff.end(),VecOrig.begin()+i,0); VecFilt.push_back(x); }Offensichtlich habe ich inner_product falsch angewendet...Wo ist der Fehler?
-
Was für ein Fehler kommt denn? (ein mögliches Problem wäre es, daß VecOrig nicht groß genug ist, eine andere daß dein Programm int-Arithmetik verwendet (in dem Fall ersetze mal den letzten Parameter durch 0.0))
-
Hallo Carmen,
Wenn 'Vec' für Vektor und 'Coeff' für Koeffizienten steht, so ist folgendes eher richtig
x=x+Coeff[k]*VecOrig[i*order+k]; // bzw. double x=inner_product(Coeff.begin(),Coeff.end(),VecOrig.begin()+i*order,0);Im übrigen würde ich Dir empfehlen Vektor(mit 'k')-Klassen zu bauen. Das macht den Code viel übersichtlicher und robuster.
Gruß
Werner
-
@ Werner Das ist ein FIR Filter. Meine Formel ist es Y(n)=Summe(b[k]X[n+k]),
wo n= FileterOrdnung-1
Woher hast du die Geschichte mit iOrder??????
Oder hast du es falsch verstanden...AUf jeden Fall ich f´habe die Daten mit der doppelten FOR-Schleife in MatLab getestet und es läuft prima....Meine Frage war: 'Was ist falsch in der 2.Lösungsansatz mit dem inner_product??'Die Geschichte mit Vektor(Mit'K') wird gemacht , wenn diese Algos auf Mikrokontroller laufen werden, aber zur Zeit lerne ich STL und nutze alles , was benutzt werden kann(auf PC)...Hast du einen anderen Grund, warum nicht STl und warum eigene Klassen schreiben?
@CStoll Ich probiere es gleich
Danke!
-
CStoll du bist einfach SUPER! Das Problem war:0.0 anstatt 0
DANKE
-
carmen schrieb:
@ Werner Das ist ein FIR Filter. Meine Formel ist es Y(n)=Summe(b[k]X[n+k]),
wo n= FileterOrdnung-1
Woher hast du die Geschichte mit iOrder??????
Das war nur ein Verdacht. Die Anwendung mit dem Filter ist mir nicht so vertraut.
carmen schrieb:
AUf jeden Fall ich f´habe die Daten mit der doppelten FOR-Schleife in MatLab getestet und es läuft prima....Meine Frage war: 'Was ist falsch in der 2.Lösungsansatz mit dem inner_product??'
Ah! jetzt sehe ich es erst. Wenn VecOrig size lang ist, so kommst Du in beiden Fällen über das Ende von VecOrig[] drüber. Das mit int(0) und double(0.0) hat CStoll ja schon gepostet.
carmen schrieb:
Die Geschichte mit Vektor(Mit'K') wird gemacht , wenn diese Algos auf Mikrokontroller laufen werden, aber zur Zeit lerne ich STL und nutze alles , was benutzt werden kann(auf PC)...Hast du einen anderen Grund, warum nicht STl und warum eigene Klassen schreiben?
Falsch verstanden! immer erst wenn STL nicht mehr tut, dann eigene Klassen. Mit Vektor (mit 'k') meinte ich den mathematischen Vektor. Aber da Du eine ganz andere Anwendung hast, passt das hier gar nicht.
Gruß
Werner
-
@Werner Ich finde prima, dass ich mich unterhalten kann über mein CODE und je mehr Kritik kommt, desto mehr lerne ich dabei...Ich kann nur Physik(und hier auch nicht alles) und ich bin weit von C++-gut zu programmieren... DANKE! Carmen
PS und mit Vector(mit'k') das ist auch prima, da deutsch nicht meine Muttersprache ist...