我想采用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));
答案 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
。
这将摆脱循环,应该工作。我自己就用过了。