Изучение характеристик сигналов электроэнцефалографических, электромиографических, реографических и электрокардиографических исследований, страница 23

text5=uicontrol(main454,'style','text','string','_','position',[15, 240, 200, 20]);

set(text5,'string', sprintf("Маx отн. ошибка\ = %1.4f",sigma3));

text6=uicontrol(main454,'style','text','string','_','position',[15, 220, 200, 20]);

set(text6,'string', sprintf("Среднеквадратич. ошибка\ = %1.4f",sigmaCK3));

text7=uicontrol(main454,'style','text','string','_','position',[15, 200, 200, 20]);

set(text7,'string', sprintf("Апертура\ = %1.1f",d3));

Приложение 6

Функции

6.1. Функция расчета характеристик сигнала

function [fd,Razm,dispers,Sstdev,Smean,Smax,Smin,Xvkv,Xmkv,Xnkv,dT]=fun_harakteristikki(s,Tmax,N,f,Sv)

dT=Tmax/(N-1)  // шаг дискретизации

Smin=min(s)//минимум идеального сигнала

Smax=max(s)//максимум идеального сигнала

Smean=mean(s)//среднее значение идеального сигнала

Sstdev=stdev(s)//среднее квадратичное отклонение идеального сигнала

Xnkv=Sv(max(find(f<=0.25))) // Нижняя квантиль

Xmkv=Sv(max(find(f<=0.5))) // Медиана

Xvkv=Sv(max(find(f<=0.75))) // Верхняя квантиль

// Числовые характеристики распределения вероятностей

dispers=sum((s-Smean).^2)/(N-1) // Дисперсия

Razm=Smax-Smin//размах

fd=1/dT // Частота дискретизации

endfunction

6.2. Функция сортировки сигнала по возрастанию

function [Sv,f]=fun_sortirovka(s,N)

Ssort=gsort(s,'g','i')//сортировка значений сигнала по возрастанию

k=1/N

Sv(1)=Ssort(1)

f(1)=k

j=1

for i=2:length(Ssort)

if Ssort(i)==Ssort(i-1) then

f(j)=f(j)+k

else j=j+1

Sv(j)=Ssort(i)

f(j)=f(j-1)+k

end

end

endfunction

6.3. Функция расчета характеристик АЦП

function[n,V0,skv]=fun_acp(s1)

N=length(s1)

XLmax=[]

XLmin=[]

dx=[]

if s1(1)>s1(2) then

z = 0

else

z = 1

for i = 2:(N-1)

if (s1(i)>s1(i+1)) then

if z==1 then

XLmax=[XLmax s1(i)]

dx=[dx abs(s1(i))-XLmin(length(XLmin))]

end

z = 0

elseif (s1(i)<s1(i+1)) then

if z==0 then

XLmin=[XLmin s1(i)]

dx=[dx (abs(s1(i)-XLmax(length(XLmax))))]

end

z = 1

elseif z==1 then

XLmax=[XLmax s1(i)]

dx=[dx (abs(s1(i))-XLmin(length(XLmin)))]

z = 2

else

XLmin=[XLmin s1(i)]

dx=[dx (abs(s1(i))-XLmax(length(XLmax)))]

end

end

end

mindx=min(dx)

V0=(mindx)/2

Vmax=max(s1)

r=fix(Vmax/V0)//разрешающая способность

nv=round(log2(r))//разрядность ацп

sn=[8 10 12 14 16 18 20 22 24]

nomer_nv=find(sn>=nv)

n=sn(min(nomer_nv))//разрядность ацп

// Определим максимальное напряжение на входе АЦП

r=2^(n) //Разрешение АЦП

V0=Vmax/r //минимально различимый шаг напряжения

Va=0:V0/3360:V0*10;

Q2=(fix(Va/V0))

Q=Va-V0*Q2

figure

plot(Va,Q)

xtitle ('График ошибки АЦП','Уровень сигнала (В)','Уровень ошибки (В)')

set(gca(),"grid",[1 1])

skv=fix(s1/V0)// процедура квантования полученого сигнала

figure

plot(Va,Q2)

xtitle ('График квантования полученого сигнала','Значение сигнала, восстановленного после преобразования (В)','Цифровой сигнал')

set(gca(),"grid",[1 1])

Qf=s1-V0*skv// ошибкa квантования:

figure

plot(t(1:100),Qf(1:100))

set(gca(),"grid",[1 1])

xtitle('График фактической ошибки АЦП', 'Длительность записи (с)', 'Уровень фактической ошибки (В)')

endfunction

6.4. Функция спектрального анализа сигнала

function [m,f]=fun_spektr(s,dT,N,fd)

t=(0:N-1)*dT

T=max(t)

df=1/T

fmax=fd/2

f=df:df:fmax

for k=1:length(f)

a(k)=sum(s.*cos(2*%pi.*t*f(k)))*2/N

b(k)=sum(s.*sin(2*%pi.*t*f(k)))*2/N

end

m=(a.^2+b.^2).^0.5

m(1)=m(1)/2

endfunction

6.5. Функция фильтрации с помощью БИХ фильтра

function [y,hz1]=fun_filter(s,fd,Tmax,dT,ftypen,n,frq,x_ot,x_do,t,zx)

M=fix(Tmax/dT)+1 //количество отсчетов в исходном сигнале

L=fix((M)/2); //количество отсчетов частотной характеристики

df=1/Tmax;

//============_идеальная_ачх

if zx==1 then

fi=[0 x_ot x_ot fd/2]//ачх идеального фильтра

a=[0 0 1 1]

figure()

plot(fi,a)