Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
Delphi 6 Enterprise
|
Re: C++ Complex Typ nach Pascal
21. Nov 2006, 18:23
Delphi-Quellcode:
function AddComplex( z1, z2: complex ): complex;
begin
// wie man das macht, weiss ich jetzt nicht, sollte/dürfte gar nicht so schwer sein
// einfach die c++ implemetation anschauen und übersetzen
end;
function MulComplex( z1, z2: complex ): complex;
begin
// wie man das macht, weiss ich jetzt nicht, sollte/dürfte gar nicht so schwer sein
// einfach die c++ implemetation anschauen und übersetzen
end;
function DivComplex( z1, z2: complex ): complex;
begin
// wie man das macht, weiss ich jetzt nicht, sollte/dürfte gar nicht so schwer sein
// einfach die c++ implemetation anschauen und übersetzen
end;
procedure BIQUAD.GetFrqResponse(var module_dB, phase_degree:f64; f_Hz:f64 );
var
response, z1, z2: complex;
omega: double;
begin
omega := 2.0 * PI *f_Hz / fs;
z1.real_ := cos(omega);
z1.imag := sin(omega); // Z^(-1)
z2.real_ := cos(2.0 * omega);
z2.imag := sin(2.0 * omega); // Z^(-2)
// response = (b0 + (b1*z1) + (b2*z2))/(1.0 + (a1*z1) + (a2*z2));
// um response zu kalkulieren muss man wissen wie man imaginere zahlen addiert,
// multipliziert und dividiert
// in c++ implementiert man operator overloading, was in füheren Delphi versionen
// nicht geht, so dass man dies über die entsprechenden funktionen machen muss
// noch was , statt ??? musst du herausfinden wie man 1 in komplexzahlen ausdruckt
// dies sollet nicht schwierig sein
response := AddComplex( b0 , AddComplex( MulComplex(b1, z1) , DivComplex( MulComplex(b2, z2) ,
AddComplex( ??? , AddComplex( MulComplex(a1, z1) , MulComplex(a2, z2)) ) ) ) );
module_dB := 20.0 * log10(sqrt(srd(response.real_) + srd(response.imag)));
phase_degree := (180.0 / PI) * atan2( response.imag ,response.real_);
end;
Katura Haris Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
|
|
Zitat
|