Serie di Fourier con MATLAB

Sk_Anonymous
sapete come si calcola la serie trigonometrica di Fourier con MATLAB?

Risposte
Sk_Anonymous
up!

apatriarca
Puoi essere un po' più preciso? Che cosa hai in input? Di cosa vuoi calcolare la serie di fourier? Hai dato un occhiata alla funzione fft (help fft per maggiori informazioni)?

Sk_Anonymous
Beh in input ho una funzione. La fft mi restituisce la trasformata di fourier, che io non ho studiato, ma leggendo la documentazione credo proprio sia una cosa diversa. Mi devo calcolare mi i coefficenti della serie trigonometrica e se possibile anche tutta la serie, in modo poi da poterla plottare.

apatriarca
Che avessi una funzione mi era abbastanza chiaro, ma come è rappresentata questa funzione?

Sk_Anonymous
"apatriarca":
Che avessi una funzione mi era abbastanza chiaro, ma come è rappresentata questa funzione?


ah ecco :D beh come vuoi tu .... io di solito uso il symbolic toolbox, tipo

syms x;
f = x^2 + 2;
subs(f,x,3) %mi da 11

apatriarca
Non ho mai usato il symbolic toolbox di matlab. Ma non puoi usare semplicemente la definizione di serie di fourier? Non sto trovando niente per le serie, solo per la trasformata.

Sk_Anonymous
Ho scritto qualcosa del genere ... ma non so ancora del tutto soddisfatto

function [an,bn,res] = fourier_trig(fun, var, half_period, max_val)
res_tmp=0;
res=0;
syms n;

an = (1/half_period) .* int(fun.*cos( (n.*pi.*var)./half_period ),var,-half_period,half_period);
bn = (1/half_period) .* int(fun.*sin( (n.*pi.*var)./half_period ),var,-half_period,half_period);
a0 = subs(an,n,0);
res = (a0)/2;

for j=1:max_val,
    an_val = subs(an,n,j);
    bn_val = subs(bn,n,j);
    
    res_tmp = res + an_val .* cos( (j.*pi.*var)./half_period ) + bn_val .* sin( (j.*pi.*var)./half_period );
    res_tmp = simplify(res_tmp);
    res = res_tmp;
    
    % disp( ['j: ',num2str(j)] )
    % disp( ['an_val: ', num2str(an_val)] )
    % disp( ['bn_val: ', num2str(bn_val)] )
    % disp( ['res_tmp: ', res_tmp] )
    
end
res = res_tmp;

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.