1

我有一個語音框架。當我計算LP殘差時,我無法真正估計出球場。 我需要找出每幀的音高週期。但是,當我使用頻域和時域時,它們都無法正常工作。任何人都可以幫我嗎? 我需要它find Pitch-synchronous windowing based on pitch tracking在語音框架中找到音高

對我的代碼,結果是一樣enter image description here 感謝

的MATLAB代碼如下:

frame_length=0.03*fs; 
frame=wave1((i-1)*frame_length+1:i*frame_length); 
N=256; 
Y1 = fft(frame,N); 
f = 0 : fs/N : fs - 1/N; 
N1 = length(Y1); 
%Y1(1) = []; 
power1 = abs(Y1(1:floor(N1))).^2; 
nyquist = 1/2; 
freq1 = (1:floor(N1/2))/floor(N1/2)*nyquist; 
[val loc]=max(power1); 
pitch_priod = round(fs*(1./f(loc))); 

frame=wave1((i-1)*frame_length+1:i*frame_length); 
min_pitch=floor(fs/600); % Pitch for men 50 to 300 Hz and for women 100 till 600 Hz 
max_pitch=floor(fs/50); 
y1=xcorr(frame); 
y1=y1./(abs(max(y1))); 
y2=y1(min_pitch:max_pitch); 
[val loc]=max(y2); 
pitch_priod=loc+min_pitch; 

回答

3

我們不知道你的幀的大小和你的速率,快速查看你的頻域代碼,我說你得到256點的FFT,這可能不足以得到準確的結果,嘗試拆分你的信號更大的幀傳遞給你的FFT!

對於時域,你的框架的大小也很重要!

這裏一個簡單的自相關例子:

f = 500; 
Fs=8000 
frame= 0.9*sin(2*pi*f/Fs*(1:4096)); 

X = xcorr(frame,160,'coeff'); 

X=X(160+1:2*160+1); 


[Xmax,i]=max(X(8:end)); 

%Period  
P = (8+i-2) 

%Pitch Test, this result need be near or equal f 
Fs/P 

試圖找到距50和1000赫茲之間,我只是用一個純正弦波與幀大小= 4096向您展示如何在時間域做!