Найти поле в речевом кадре
У меня есть речевой кадр. когда я вычислял остаток LP, я не мог точно оценить высоту тона. Мне нужно найти период подачи для каждого кадра. Однако, когда я использую частотную область и временную область, ни одна из них не работает хорошо. Кто-нибудь может мне помочь? Мне это нужно для поиска Pitch-синхронного окна на основе отслеживания высоты тона
Результат для моего кода: Спасибо
Код 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;
2 ответа
Мы не знаем размер вашего кадра и вашу частоту дискретизации, быстрый просмотр кода вашей частотной области говорит мне, что вы получаете 256 баллов от 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, чтобы показать вам, как это можно сделать во временной области!
Я не знаю так много анализа речи, но, возможно, это может помочь вам:
Об этом есть статья по математике: http://www.mathworks.de/de/help/signal/ug/estimating-fundamental-frequency-with-the-complex-cepstrum.html
они рассчитывают кепстр для таймфреймов, затем идентифицируют пик в кепстре и находят частоту, соответствующую пику.