2017-08-26 8 views
0

matlabで次のコードを実行しようとしています。forループが関数内にあり、すべての繰り返しで結果を保存するはずですが、実行すると、最後の反復の結果、コードのシーケンスに何か問題がありますか?matlabのforループから予期しない出力がありました

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 

私はそれを与える引数: INPITのDATA1は、私が書いたコードがあります..私はfoorループとsometnig間違っていることを疑うサイズ(33167 * 1) のデータベクトルであります

 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)のような番号を持っていないゼロなければならない= PROCESSDATAである(AX、100、0.1、2)AXは データベクトルである場合、それは次のANSを返し

答えて

1

ループを通過するたびに、vectorDominantをゼロのベクトルに再作成し、その1つの要素を新しく計算された値に設定します。おそらく、次の行の最初の2行は、ループに入る前に一度実行する必要があります。

n = (length(data)/1000); 
vectorDominant = zeros(n,1); 
vectorDominant(i) = dominantFrequency; 

は、おそらくnnum_framesない上記算出された値であるべきです。

関連する問題