2012-04-10 24 views
0

私は、関数内に組み込まれていない私の手によって音波のあらゆるフレームに自己相関関数を行う方法について質問したいと思います。私はコードを行い、それが正しいか間違っているかわかりません助けてください も、私は式hereに基づいてピッチ周期自己相関のmatlab

[sound, Fs]= wavread('aa.wav'); 

subplot(5,1,1);plot (sound);title('The Orignal Wave') 
frameSize= 10/10^3; 
overlapSize= 5/10^3; 

frameSize_samples = round(Fs*frameSize); 
overlapSize_samples= round(overlapSize* Fs); 

shift = frameSize_samples-overlapSize_samples; 

nframes=ceil((length(sound)-frameSize_samples)/shift); 

frames = zeros(nframes, frameSize_samples); 
for i=1:nframes 
     frames(i,:) = sound(((i-1)*shift+ 1):((i-1)*shift+ frameSize_samples))'; 
end 

subplot(5,1,2);plot (frames(:));title(' Wave after framing') 


w = rectwin(frameSize_samples)'; 

frames1 = zeros(nframes, frameSize_samples); 

for i=1:nframes 
    frames1(i,:)=(frames(i,:).*w); 
end 

%///////////////////////////////////////////////////////// 

% calc energy 
numSamples = length(sound); 
energy = zeros(1,nframes); 
for frame = 1:nframes 
    energy(frame) = sum(frames1(frame).^2);    %# Calculate frame energy 
end 
subplot(5,1,3);plot (energy(:));title(' Energy') 


% calc autocorrelation 


autocorrelation = zeros(1,nframes); 
for i=1:nframes 
    for k = 0:frameSize_samples 
     autocorrelation(i,:)= sum(frames(i)*frames(i+k)); 
    end 
end 


subplot(5,1,4);plot (autocorrelation(:));title(' autocorrelation') 

答えて

0

を取得したいです。自己相関方程式はうまく見えます。しかし、私はframesによって混乱しています。これを2次元行列として定義しますが、線形にインデックスを付けます(frames(i))。

また、forループfor k=0:frameSize_samplesは何もしていません。すべての反復で同じ変数autocorrelation(i, :)を割り当てているため、上書きされます。

+0

私は自己相関関数が何をするのか理解していますが、私は本当にそれを行うことはできませんすべての行は、自己相関のマトリックスを持っています私は行列が自己相関=ゼロ(nframes、frameSize_samples)になると思います。 – marmar

関連する問題