2016-01-17 2 views
0

Je voudrais convertir mes données dans le domaine fréquentiel en domaine temporel. Dans cette feuille Excel ci-jointe (book1.xlxs), la colonne A est Fréquence. Les colonnes B et C sont des données réelles et imaginaires (B + jC). Aussi attaché, vous pouvez voir mon code. Mais ça ne marche pas. Je voudrais que le résultat de mon résultat apparaisse dans la figure dans le domaine temporel (partie 1 de la courbe verte).conversion de fréquence en temps en utilisant MATLAB

[num, data, raw] = xlsread('Book1.xlsx'); 
ln=length(raw)-1; %find the length of the sequence 
xk=zeros(1,ln); %initilise an array of same size as that of input sequence 
ixk=zeros(1,ln); %initilise an array of same size as that of input sequence 
rx = zeros(1,ln); %real value of fft 
ix = zeros(1,ln); %imaginary value of fft 
for i= 2:length(raw) 
rx(i-1) = cell2mat(raw(i,2)); 
ix(i-1) = cell2mat(raw(i,3)); 
xk(i-1) = sqrt(rx(i-1)^2 + ix(i-1)^2); 
end 
for n=0:ln-1 
for k=0:ln-1 
    ixk(n+1)=ixk(n+1)+(xk(k+1)*exp(i*2*pi*k*n/ln)); 
end 
end 

ixk=10*log(ixk./ln); 

t=0:ln-1 
plot(t, ixk) 

In this image this code should give me the result similar to the green curve-part1

Répondre

0

Au lieu de faire la FFT vous, vous pouvez utiliser les fonctions Matlab intégré pour le faire - beaucoup plus facile.

Un bon exemple de Mathworks est donné here. Ce qui suit est un code sur lequel je me suis basé. Le paramètre transmis f est votre trace de domaine temporel et fsampling est votre taux d'échantillonnage. Les paramètres passés freq et finv sont respectivement votre vecteur de fréquence et votre transformée de Fourier.

function [freq, finv] = FourierTransform(f,fsampling) 

    % Fast Fourier Transform 

    fsampling = round(fsampling); 
    finv = fft(f,fsampling); 
    finv = finv(1:length(finv)/2+1); % Truncate out only the second half, due to symmetry 
    finv(2:end - 1) = 2*finv(2:end - 1); % Adjust amplitude to account for truncation 
    finv = finv./length(f); 
    freq = 0:fsampling/2; 

end