我正在尝试在matlab上执行以下代码我在一个函数内部有一个for循环,并且它应该在每次迭代时存储一个结果,但是当它执行时它只是给我结果最后一次迭代,代码序列有问题吗? inpit data1是一个大小为(33167 * 1)的数据向量 我怀疑foor循环有一些错误..有我写的代码:
function [vectorDominant] = processData(data1 , samplingRate , startRange, endRange)
%(length(data)/1000)
data = data1;
windowSize = 10;
samplingRate = samplingRate;
frame_len = samplingRate*windowSize;
l = length(data);
num_frames = floor(l/frame_len);
t = 1;
for i = 1 : num_frames
frame = data( (i-1)*frame_len+1 : frame_len*i);
% --- haming window ------
hammingData=frame.*hamming(length(frame));
%---- remove dc offset from data ----
dataWindowed = detrend(hammingData);
% ---- apply fft ----
fourierTransform_data=fft(dataWindowed);
y = fourierTransform_data ;
%plot(abs(fourierTransform_data))
%------- find dominant-----
len = (length(frame)/2) -1;
y = y(1:len);
[v,k] = max(y);
fftLength = length(frame);
freq = (0:(samplingRate/fftLength) :(samplingRate/2));
%plot(freq,abs(y)), grid('on'), title('dominant freq')
freq = freq(find(freq>=startRange & freq<=endRange));
dominantFrequency = freq(k);
%array[(length(data)/1000)];
%var = 1;
%while var<= length(num_frames)
n = (length(data)/1000);
vectorDominant = zeros(n,1); % to preallocate it first as it changes size every iterartion
vectorDominant(i) = dominantFrequency;
%var = var+1;
%end
end
end
我给它的参数是processData(ax,100,0.1,2),其中ax是 数据向量,它返回以下ans =
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2000
整个结果必须包含最后一个(0.2000)而不是零的数字
答案 0 :(得分:1)
每次循环时,重新创建vectorDominant
为零向量,然后将其中一个元素设置为新计算的值。据推测,在进入循环之前,应该完成以下前两行中的前两行。
n = (length(data)/1000);
vectorDominant = zeros(n,1);
vectorDominant(i) = dominantFrequency;
大概n
也应该是num_frames
,而不是上面计算的值。