2016-12-27 168 views
0

我要绘制的傅立叶变换,使用MATLAB,这是绘制用下面的代码数据:如何绘制在MATLAB中积分定义的函数的FFT?

x = -2:0.01:2; % position vector 
s = @(x)heaviside(x+1).*heaviside(-x)+heaviside(x).*heaviside(1-x); % Step  
function between -1 and 1 
phi = @(x) exp(-1./(1-x.^2)).*s(x); % Test function 
d = @(t) integral(@(x)phi(x),0,t); % Data 
fplot(d,[0,1]) 

然而,没有任何MATLAB教程似乎在密谋d的快速傅立叶变换是有用的,这是根据可变积分定义的。

如果我尝试用

Fs = 1000;   % Sampling frequency 
T = 1/Fs;    % Sampling period 
L = 1000;    % Length of signal 
t = (0:L-1)*T;  % Time vector 
s = @(x)heaviside(x+1).*heaviside(-x)+heaviside(x).*heaviside(1-x); % Step  
function 
phi = @(x) exp(-1./(1-x.^2)).*s(x); % Test function 
d = @(t) integral(@(x)phi(x),0,t); %Data 
plot(1000*t(1:50),d(1:50)) 

然后我得到以下错误:

Error using integral 
A and B must be floating-point scalars. 

Error in @(t)integral(@(x)phi(x),0,t) 

我不知道该怎么虽然解决这个问题。

回答

1

发生此错误的原因是integrate的第二个和第三个参数(积分的上限和下限)必须为scalars。为了得到值的向量,与计算fft你需要计算在for循环元素的值

d = zeros(size(t)); 
for i = 1:length(t) 
    d(i) = integral(phi,0,t(i)); 
end 

然后,您将能够绘制td也计算的dfft调用

y = fft(d); 

结帐在docs的例子来看看如何绘制结果fft回报。