Salve a tutti. Tramite analizzatore di spettro ho ottenuto un dataset nel dominio della frequenza (ampiezza in dB e fase in gradi). Devo calcolare la relativa risposta impulsiva. Misuro da 800 MHz a 3 GHz con uno step di 5.5 MHz (dunque ho 401 punti). Mi è sembrato di capire che MATLAB vuole il dato dello spettro complesso Acos(phi)+iAsin(phi) nella forma simmetrica rispetto allo zero. Così facendo ottengo la risposta impulsiva tramite IFFT, ma va immediatamente a zero e non mi convince troppo. Poi ho anche letto che MATLAB richiede in questi casi un fattore di scala da considerare legato alla lunghezza della risposta impulsiva diviso 2. Questo è il codice che ho utilizzato (ovviamente ho precedentemente convertito la fase in rad, la prima colonna è quella delle ampiezze, la seconda quella delle fasi):
frf = M(:,1)+1i*M(:,2); %creo la risposta in frequenza partendo da AMP e PH
fn = 3000000000; %frequenza di Nyquist (misuro da 800 MHz a 3 GHz)
df = 2200000000/400; %calcolo il valore del singolo intervallo, ho 400 punti su 2.2 GHz di intervallo di misura
freq=[800000000:df:fn]; %creo il vettore delle frequenze
frf2 = [0 frf(2:end).' 0 frf(end:-1:2)']; %creo la risposta in frequenza simmetrica come MATLAB desidera
irf = ifft(frf2); %finalmente la antitrasformo per valutare la funzione risposta impulsiva
dt = 1./2./fn; %creo l'intervallo di campionamento secondo Nyquist
time = 0:dt:801*dt; %creo il vettore tempo
%grafico tutto
figure;
subplot(3,1,1);
plot(freq,abs(frf));
xlabel('Frequency (Hz)');
ylabel('FRF Magnitude');
subplot(3,1,2);
plot(freq,angle(frf));
xlabel('Frequency (Hz)');
ylabel('FRF Phase (rad)');
subplot(3,1,3);
plot(time,real(irf));
xlabel('Time (s)');
ylabel('IRF');
Siccome posso paragonare quello che ottengo alla risposta impulsiva data da un altro strumento (più nuovo, migliore) che però non ho a disposizione, so che bisogna anche applicare una finestra Kaiser di parametro 6, ma non sono sicuro di come nè a che punto farlo. Qualcuno può darmi una mano? Grazie mille per il vostro tempo.