%**************************************************************************
% gen_osc.m
%**************************************************************************
% bruke DAQ-kortet som funksjonsgenerator og oscilloscop samtidig
clear all
close all
datafreq = input('Skriv inn oscillatorfrekvens i Hz: (1 - 12500),(0 for å avslutte) ');
u0=zeros(1,100);
u1=zeros(1,100);
dfreq=zeros(1,100);
l=1;
% Initialiser Daq-kort for Analog input og Analog output
varighet=1; %s
SampleRate=1000; %Hz
[DS,devicename]=initDaqSession(varighet,SampleRate,0);
amplitude = 5; %amplitude på generert signal
NumAICh=2; %Antall kanaler for Analog Input (AI0 og AI1)
TerminalConfig='SingleEnded';
[AIch]=initADchannel(DS,devicename,NumAICh,TerminalConfig,amplitude);
NumAOCh=1; %Antall kanaler for Analog Output (AO0)
[AOch]=initDAchannel(DS,devicename,NumAOCh);
% Initialisering ferdig
figure(1)     
ylabel('log_{10}(V_1/V_0)')
xlabel('log_{10}(frekvens [Hz])')
hold on
while datafreq>0
    if datafreq<10 % antall sekunder signalet skal sendes og leses
        varighet = 20/datafreq;
    elseif datafreq<100
        varighet = 50/datafreq;
    else
        varighet = 400/datafreq; 
    end
    SampleRate=10*datafreq;
    %Sett DAQ-sesjonens SampleRate og varighet
    DS.Rate=SampleRate;
    t = 0:1/SampleRate:varighet;
    dataout = amplitude*cos(2*pi*datafreq*t);
    % Send data til kø for AO. length(dataout) definerer varigheten av
    % målingen også, dvs. DS.DurationInSeconds blir forbigått
    queueOutputData(DS,dataout');
    %Start AO og AI
    [datain, time] = startForeground(DS);
    
    VAi0=datain(:,1);
    VAi1=datain(:,2);
    figure(2)
    plot(t,dataout,'k',time,VAi1,'r',time,VAi0,'m')
    %Utspenningen bruker omtrent 1 ms på å stabilisere seg. Ikke ta med
    %data fra det første millisekundet
    nstart=ceil(SampleRate*1e-3);
    %Regn ut RMS spenning
    u0(l)=std(VAi0(nstart:end));
    u1(l)=std(VAi1(nstart:end));
    dfreq(l)=datafreq;
    figure(1), plot(log10(datafreq),log10(u1(l)/u0(l)),'ro')
    datafreq = input('Skriv inn oscillatorfrekvens i Hz: (1 - 1.25e4), (0 for å avslutte)');
    l=l+1;
end
figure(1), hold off
u0=u0(find(u0>0));
u1=u1(find(u1>0));
dfreq=dfreq(find(dfreq>0));
%%%% Lagre data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
filename = input('Hvilket filnavn vil du bruke for å lagre dataene?','s');
save(filename,'u0','u1','dfreq')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
