0

内蔵関数ではない手で音波のすべてのフレームに自己相関関数を実行する方法について質問したいコードを実行し、それが正しいか間違っているかわからないので、私も取得したいのを手伝ってくださいピッチ期間

[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')
4

1 に答える 1

0

ここの式に基づいています。自己相関方程式は問題ないようです。しかし、私は混乱していframesます。これを 2 次元行列として定義しますが、線形にインデックスを付けます ( frames(i))。

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

于 2012-04-10T14:01:05.383 に答える