xsnr=0.001
xsnrtmp=0.001
do i=1,79 ! по каждому из 79 отсчетов времени
xsig=s2(itone(i),i)**2 ! мощность тона сигнала
xnoi=(sum(s2(0:7,i)**2) - xsig)/7.0 ! средняя мощность шума в линейке из 8 частотных бинов за вычетом мощности сигнала
if(xnoi.gt.0 .and. xnoi.lt.xsig) xsnr=xsig/xnoi ! делить на 0 нельзя, если шум больше сигнала то используем значение SNR с предыдущего временного отсчета
xsnrtmp=xsnrtmp+xsnr ! суммируем 79 значений SNR по оси времени
enddo
xsnr=xsnrtmp/79.0-1.0 ! среднее значение SNR по 79 отсчетам, убираем постоянную составляющуюю
xsnr=10.0*log10(xsnr)-26.5 ! SNR в дБ, смещение -26.5 дБ приводит SNR к полосе шума 2500 Гц
if(xsnr.gt.7.0) xsnr=xsnr+(xsnr-7.0)/2.0 ! калибровка по эталонному сигналу для SNR более +7 дБ
if(xsnr .lt. -17.0) xsnr=xsnr-(1.0+1.4/(23.0+xsnr))**2+1.2 ! калибровка по эталонному сигналу для SNR менее -17 дБ
if(xsnr .lt. -23.0) xsnr=-23.0 ! ограничение нижней планки: сигналы с SNR менее -23 дБ FT8 декодер не декодирует