centrklipf0.m

来自「Matlab simulinkMatlab center clipping」· M 代码 · 共 55 行

M
55
字号
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 + =
减小字号Ctrl + -
显示快捷键?