📄 centrklipf0.m
字号:
function [F0] = centrklipf0(x,fvz,win,overlen)
Y = segmentace(x,win,overlen);
[M N] = size(Y);
% M pocet vzorku v jednom segmentu
% N pocet segmentu
k = 0.8;
Lmin = fix(fvz/400); %min vzorek periody
Lmax = fix(fvz/80); %max vzorek zakl periody
for i = 1:N %pro vsechny segmenty
segment = Y(:,i);
if(i-1==0)
maximum1 = max(abs(Y(:,i+1))); %maximum prvniho segmentu
maximum2 = max(abs(Y(:,i)));
elseif(i+1>N)
maximum1 = max(abs(Y(:,i-1))); %maximum posledniho segmentu
maximum2 = max(abs(Y(:,i)));
else
maximum1 = max(abs(Y(:,i+1))); %maximum ostatnich segmentu
maximum2 = max(abs(Y(:,i-1)));
end
minimum = min(maximum1,maximum2);
P = k*minimum; %vzpocet prahu
norm = find(segment>P); %normovani vyssi nez P
segment(norm) = 1;
norm = find(segment<(-1)*P); %normovani nizsi nez -P
segment(norm) = -1;
norm = find(abs(segment)<P); %normovani od -P do P
segment(norm) = 0;
segment = xcorr(segment); %korelace
seg(:,i) = segment;
segment = segment(M+Lmin:M+Lmax); %interval pro zakladni ton
Rk = find(segment==max(segment))+Lmin; %nalezeni maxima
F0(i) = (fvz/Rk(1)); % zakladni ton
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -