А я делаю так. Беру выборку размером в два периода минимальной частоты (1/42,5)*2 с.
заетем ищу выборки возле переходов через ноль. С поможью интерполяции уточнаю точки перехода чарез ноль. Нахожу период - считаю частоту.
Fs = 6400;
Ts = 1/Fs;
f = 42.5;
t = 0:Ts:(1/42.5)*2-Ts;
A = 10;
Y1 = A*sin(2*pi*f*t); % модель сигнала
snr = 40; % отношение сигнал/шум
Y = awgn(Y1, snr);
z1 = find(diff(Y<0));%возвращаем номера элементов массива, предшествующих смене знака
T1 = [ Y(z1(2)),Y((z1(2)+1))]; %создаём массив из двух элементов окружающих смену знака
e1 = [Ts*z1(2)*1000, Ts*(z1(2)+1)*1000]; %массив временных значений
e1i = e1(1):0.008:e1(2)-0.008; %дробим временные значения на 25 частей
U1 = interp1(e1,T1,e1i,'line'); % линейная интерполяция в 25 раз вблизи нуля
T01 = (find(diff(U1<0))*0.008)+e1(1)-0.008; %первая опорная точка
%найдём вторую точку
T2 = [ Y(z1(4)),Y((z1(4)+1))]; %создаём массив из двух элементов окружающих смену знака
e2 = [Ts*z1(4)*1000, Ts*(z1(4)+1)*1000]; %массив временных значений
e2i = e2(1):0.008:e2(2)-0.008; %дробим временные значения на 25 частей
U2 = interp1(e2,T2,e2i,'line'); % линейная интерполяция в 25 раз вблизи нуля
T02 = (find(diff(U2<0))*0.008)+e2(1)-0.008; %вторая опорная точка
>> f0 = 1/((T02 - T01)/1000);
здесь и шум смоделирван. Как бы всё получается. Такие результаты в диссертации на мою тему.
Вот отрывок:
Эскизы прикрепленных изображений