多行傅里叶变换

时间:2015-07-31 07:29:23

标签: matlab signal-processing fft ifft

我想采用10次测量的FFT。这意味着我的数据中有10行,每行的维度为[1 * 2000]。在下面的代码中,我做错了。谁能告诉我我犯了什么错误?

load('fb2010');                                   % loading the data
x = fb2010(3:1:15,:);
y_filt = filter(b,a,x);                           % filtering the received signal
%%%%%%%  Fourier transform
nfft = length(y_filt);
for i = 1:10
res(i,:) = fft(y_filt(i,:),nfft)/ nfft;         %%%% Taking first fft and normalizing it
end
res2 = res(:,1:nfft/2+1);                   %%%% taking single sided spectrum
f = fs/2*linspace(0,1,nfft/2+1);            % choosing correct frequency axes
figure, plot(f,abs(res2));

2 个答案:

答案 0 :(得分:3)

默认情况下,函数filter沿第一维应用传递函数。因此,您可以过滤列而不是行。要获得正确的结果,请使用以下行:

filter(b,a,x,[],2);

然后,您可以使用带有第三个参数的fft来省略循环,以指定它所操作的维度。这将是以下行:

res = fft(y_filt,nfft,2);

答案 1 :(得分:2)

doc fft

Y = fft(X,n,dim) 其中昏暗是维度。我想你想dim = 2。 这将摆脱循环,应该工作。我自己就用过了。