2016-01-17 2 views
0

Я хотел бы преобразовать свои данные в частотную область во временную область. В этом прилагаемом листе excel (book1.xlxs) столбец A представляет собой частоту. Столбец B и C - реальные и мнимые данные (B + jC). Также вы можете увидеть мой код. Но это не работает. Я хотел бы, чтобы мой результат показывал на фигуре во временной области (зеленая кривая часть-1).Преобразование частоты в время с использованием 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

ответ

0

Вместо того, чтобы делать FFT самостоятельно, вы можете использовать встроенные функции Matlab, чтобы сделать это - гораздо проще.

Хороший пример из Mathworks дается here. Ниже приведен код, на котором я основывался. Заданным параметром f является ваша трасса временной области, а fsampling - ваша частота дискретизации. Выбранные параметры freq и finv - это ваш вектор частоты и преобразование Фурье соответственно.

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