使用MATLAB进行频率到时间的转换

时间:2016-01-17 00:50:32

标签: excel matlab fft ifft

我想将频域中的数据转换为时域。在此附加的Excel工作表(book1.xlxs)中,A列是频率。 B列和C列是实数和虚数(B + jC)。还附上你可以看到我的代码。但它不起作用。我希望我的结果能够在时域中显示出来(绿色曲线第1部分)。

[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

1 个答案:

答案 0 :(得分:0)

您可以使用内置的Matlab函数来更轻松地完成FFT,而不是自己进行FFT。

Mathworks的一个很好的例子是here。以下是我自己编写的一些代码。传入的参数f是您的时域跟踪,fsampling是您的采样率。传出的参数freqfinv分别是您的频率向量和傅里叶变换。

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