Forum » Programiranje » Implementacija kompleksnih števil za FT
Implementacija kompleksnih števil za FT
marjan_h ::
Kako implementirati računanje z kompleksnimi števili, v nekem standardnem jeziku C/C++/Java?
Namreč želim napisati funkcijo, ki bi izračunala FT (Fourierjevo transformaicjo) v diskretni obliki. Vendar kaj naj naredim ko množim z e^(i*omega*t)?
Pa brez uporabe knjižnic.
Hvala.
Namreč želim napisati funkcijo, ki bi izračunala FT (Fourierjevo transformaicjo) v diskretni obliki. Vendar kaj naj naredim ko množim z e^(i*omega*t)?
Pa brez uporabe knjižnic.
Hvala.
Spura ::
Kako implementirati računanje z kompleksnimi števili, v nekem standardnem jeziku C/C++/Java?Isuse, pac nek struct z dvema doubloma nad katerim definiras operacije.
Namreč želim napisati funkcijo, ki bi izračunala FT (Fourierjevo transformaicjo) v diskretni obliki. Vendar kaj naj naredim ko množim z e^(i*omega*t)?
Pa brez uporabe knjižnic.
Hvala.
Ribič ::
smacker ::
Najbrž ma za vajo na kakem faksu, da pokaže razumevanje delovanja FT in ne sme knjižnice uporabit.
Da zračunaš diskretno FT, sploh ne rabiš nobenih operacij nad imaginarnimi števili.
Za vsako frekvenco v zanki primerjaš vhodni signal z sinusoido in s kosinusoido trenutne frekvence. V matematičnih izpeljavah se potem ta koeficienta povežeta z imaginarnimi števili, zgolj za to da lahko računaš z njimi in da si lahko predstaviš vrednosti kot točke v 2D grafu. V diskretnem niti ne rabiš računat, lahko čist ločeno zračunaš realne in imaginarne koeficiente, tisti i te naj ne zanima. Na koncu samo če te zanima s kako amplitudo in s kakšno fazo je prisotna določena frekvenca v signalu, moraš pa iz obeh koeficientov to zračunat - dejansko gre za pretvorbo iz kartezičnega v polarni koordinatni sistem - razdalja ti predstavlja amplitudo, kot (v radianih seveda) pa fazo.
Da zračunaš diskretno FT, sploh ne rabiš nobenih operacij nad imaginarnimi števili.
Za vsako frekvenco v zanki primerjaš vhodni signal z sinusoido in s kosinusoido trenutne frekvence. V matematičnih izpeljavah se potem ta koeficienta povežeta z imaginarnimi števili, zgolj za to da lahko računaš z njimi in da si lahko predstaviš vrednosti kot točke v 2D grafu. V diskretnem niti ne rabiš računat, lahko čist ločeno zračunaš realne in imaginarne koeficiente, tisti i te naj ne zanima. Na koncu samo če te zanima s kako amplitudo in s kakšno fazo je prisotna določena frekvenca v signalu, moraš pa iz obeh koeficientov to zračunat - dejansko gre za pretvorbo iz kartezičnega v polarni koordinatni sistem - razdalja ti predstavlja amplitudo, kot (v radianih seveda) pa fazo.
AtaStrudl ::
Lahko delas loceno sin in cos (real in imag), je pa veliko bolj komot delati s kompleksnimi spremenljivkami.
GCC (in C99) jih ima vgrajene
#include [complex.h]
.....
.....
complex float a,b,c;
a=1.2+3.4I;
b=5.6+7.8I;
c=a*b;
printf("\n\nc = %f %fi\n\n",crealf(c),cimagf(c));
itd....
imas tudi cexpf(), cpowf(), csinf().....
pri include morata namesto [] biti < in > (slotech se upre)
GCC (in C99) jih ima vgrajene
#include [complex.h]
.....
.....
complex float a,b,c;
a=1.2+3.4I;
b=5.6+7.8I;
c=a*b;
printf("\n\nc = %f %fi\n\n",crealf(c),cimagf(c));
itd....
imas tudi cexpf(), cpowf(), csinf().....
pri include morata namesto [] biti < in > (slotech se upre)
MrStein ::
#include <complex.h>
Ja, malo čudno so naredili...
Ja, malo čudno so naredili...
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Fourierjeva vrsta, fourierjeva transformacijaOddelek: Šola | 6931 (3717) | marjan_h |
» | Polarni zapis kompleksnega številaOddelek: Šola | 5461 (4772) | Wolfman |
» | Matematika - FMF (strani: 1 2 )Oddelek: Šola | 10401 (8134) | sherman |
» | [C++] Sledenje tipkovniciOddelek: Programiranje | 1403 (1198) | TEDY |
» | Neskončna majhnostOddelek: Znanost in tehnologija | 1579 (1579) | SavoKovac |