added
git-svn-id: http://moon:8086/svn/matlab/trunk@99 801c6759-fa7c-4059-a304-17956f83a07c
This commit is contained in:
Executable
+52
@@ -0,0 +1,52 @@
|
|||||||
|
## Copyright (C) 2017 Jens Ahrensfeld
|
||||||
|
##
|
||||||
|
## This program is free software; you can redistribute it and/or modify it
|
||||||
|
## under the terms of the GNU General Public License as published by
|
||||||
|
## the Free Software Foundation; either version 3 of the License, or
|
||||||
|
## (at your option) any later version.
|
||||||
|
##
|
||||||
|
## This program is distributed in the hope that it will be useful,
|
||||||
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
## GNU General Public License for more details.
|
||||||
|
##
|
||||||
|
## You should have received a copy of the GNU General Public License
|
||||||
|
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
## -*- texinfo -*-
|
||||||
|
## @deftypefn {Function File} {@var{retval} =} adc_eval (@var{input1}, @var{input2})
|
||||||
|
##
|
||||||
|
## @seealso{}
|
||||||
|
## @end deftypefn
|
||||||
|
|
||||||
|
## Author: Jens Ahrensfeld <ahrensfeld@w2ess001vm>
|
||||||
|
## Created: 2017-03-07
|
||||||
|
|
||||||
|
function [output] = adc_eval (nbits, input)
|
||||||
|
|
||||||
|
Vref = 1.0;
|
||||||
|
%output = adc_pipelined(Vref, nbits, input)
|
||||||
|
output = adc_SAR(Vref, nbits, input)
|
||||||
|
|
||||||
|
|
||||||
|
function output = adc_pipelined(VRref, nbits, input)
|
||||||
|
output = zeros(1, nbits);
|
||||||
|
for n=1:nbits,
|
||||||
|
if input >= Vref/2
|
||||||
|
output(n) = 1;
|
||||||
|
input = input - Vref/2
|
||||||
|
end
|
||||||
|
input = input * 2
|
||||||
|
end
|
||||||
|
|
||||||
|
function output = adc_SAR(VRref, nbits, input)
|
||||||
|
Vsar = 0;
|
||||||
|
VStep = VRref/2
|
||||||
|
output = zeros(1, nbits);
|
||||||
|
for n=1:nbits,
|
||||||
|
if input >= (Vsar + VStep)
|
||||||
|
output(n) = 1
|
||||||
|
Vsar = Vsar + VStep;
|
||||||
|
end
|
||||||
|
VStep = VStep / 2;
|
||||||
|
end
|
||||||
Executable
+27
@@ -0,0 +1,27 @@
|
|||||||
|
## Copyright (C) 2016 Jens Ahrensfeld
|
||||||
|
##
|
||||||
|
## This program is free software; you can redistribute it and/or modify it
|
||||||
|
## under the terms of the GNU General Public License as published by
|
||||||
|
## the Free Software Foundation; either version 3 of the License, or
|
||||||
|
## (at your option) any later version.
|
||||||
|
##
|
||||||
|
## This program is distributed in the hope that it will be useful,
|
||||||
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
## GNU General Public License for more details.
|
||||||
|
##
|
||||||
|
## You should have received a copy of the GNU General Public License
|
||||||
|
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
## -*- texinfo -*-
|
||||||
|
## @deftypefn {Function File} {@var{retval} =} distort (@var{input1}, @var{input2})
|
||||||
|
##
|
||||||
|
## @seealso{}
|
||||||
|
## @end deftypefn
|
||||||
|
|
||||||
|
## Author: Jens Ahrensfeld <ahrensfeld@w2ess001vm>
|
||||||
|
## Created: 2016-04-15
|
||||||
|
|
||||||
|
function [retval] = distort (input1, input2)
|
||||||
|
|
||||||
|
endfunction
|
||||||
Executable
+11
@@ -0,0 +1,11 @@
|
|||||||
|
function distort_eval(k)
|
||||||
|
|
||||||
|
N = 100;
|
||||||
|
|
||||||
|
x = (0:(N-1))/(N-1);
|
||||||
|
|
||||||
|
b = 0.9
|
||||||
|
|
||||||
|
y = b + (1-b)*x.*exp(k*abs(x))./exp(k);
|
||||||
|
|
||||||
|
plot(x, y); grid;
|
||||||
Executable
+42
@@ -0,0 +1,42 @@
|
|||||||
|
## Copyright (C) 2018 Jens Ahrensfeld
|
||||||
|
##
|
||||||
|
## This program is free software; you can redistribute it and/or modify it
|
||||||
|
## under the terms of the GNU General Public License as published by
|
||||||
|
## the Free Software Foundation; either version 3 of the License, or
|
||||||
|
## (at your option) any later version.
|
||||||
|
##
|
||||||
|
## This program is distributed in the hope that it will be useful,
|
||||||
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
## GNU General Public License for more details.
|
||||||
|
##
|
||||||
|
## You should have received a copy of the GNU General Public License
|
||||||
|
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
## -*- texinfo -*-
|
||||||
|
## @deftypefn {Function File} {@var{retval} =} e_eval (@var{input1}, @var{input2})
|
||||||
|
##
|
||||||
|
## @seealso{}
|
||||||
|
## @end deftypefn
|
||||||
|
|
||||||
|
## Author: Jens Ahrensfeld <ahrensfeld@w2ess001vm>
|
||||||
|
## Created: 2018-02-09
|
||||||
|
|
||||||
|
function e_eval()
|
||||||
|
|
||||||
|
N = 100;
|
||||||
|
|
||||||
|
a = 0.25;
|
||||||
|
y1 = 0.0;
|
||||||
|
x = 1.0;
|
||||||
|
for n=1:N,
|
||||||
|
y1_(n) = y1;
|
||||||
|
y2_(n) = 1-exp(-(n-1)*a);
|
||||||
|
|
||||||
|
y1 = (1-a)*y1 + a*x;
|
||||||
|
end
|
||||||
|
|
||||||
|
close;
|
||||||
|
plot (0:N-1, y1_,0:N-1, y2_); grid;
|
||||||
|
|
||||||
|
endfunction
|
||||||
Executable
+23
@@ -0,0 +1,23 @@
|
|||||||
|
function eval_gainControl()
|
||||||
|
|
||||||
|
close all;
|
||||||
|
|
||||||
|
% 1
|
||||||
|
G_Target = [40*ones(1,200) 20*ones(1,200) 40*ones(1,200)];
|
||||||
|
G_PA = 43+5*sin(1/400*2*pi*(1:600));
|
||||||
|
|
||||||
|
gainControl(G_Target, G_PA, 3, 0.2);
|
||||||
|
|
||||||
|
% 2
|
||||||
|
figure
|
||||||
|
G_Target = [40*ones(1,600)];
|
||||||
|
G_PA = [43*ones(1,200) 46*ones(1,200) 23*ones(1,200)];
|
||||||
|
|
||||||
|
gainControl(G_Target, G_PA, 3, 0.2);
|
||||||
|
|
||||||
|
% 2
|
||||||
|
figure
|
||||||
|
G_Target = [40*ones(1,600)];
|
||||||
|
G_PA = [43*ones(1,200) 40*ones(1,200) 83*ones(1,200)];
|
||||||
|
|
||||||
|
gainControl(G_Target, G_PA, 3, 0.2);
|
||||||
Executable
+67
@@ -0,0 +1,67 @@
|
|||||||
|
function gainControl(G_TX_target, G_PA_dB, Nd, mu)
|
||||||
|
|
||||||
|
% Constants
|
||||||
|
N=length(G_TX_target); % number of points
|
||||||
|
Ts = 1.0 % sample period in sec.
|
||||||
|
|
||||||
|
atten_res_dB = 0.010; % attenuator resolution
|
||||||
|
|
||||||
|
%mu = 0.1; % Averaging of measurement
|
||||||
|
knoise = 0.04; % measurement noise
|
||||||
|
|
||||||
|
f_theta = 0.001; % Hz Temperature drift frequency
|
||||||
|
a_theta = 5; % dB Temperature drift level dB
|
||||||
|
|
||||||
|
atten_dB=40; % initial value: Controller atten_ output
|
||||||
|
|
||||||
|
|
||||||
|
state = zeros(1, Nd-1); % filter state for delay
|
||||||
|
|
||||||
|
error = 0;
|
||||||
|
enabled = 1;
|
||||||
|
LATENCY = 3;
|
||||||
|
latency_count = LATENCY;
|
||||||
|
|
||||||
|
for i=1:N,
|
||||||
|
G_TX = G_PA_dB(i) - atten_dB + knoise*randn();
|
||||||
|
[G_TX_est, state] = filter([zeros(1,Nd-1) 1], 1, G_TX, state);
|
||||||
|
error_last = error;
|
||||||
|
error = G_TX_est - G_TX_target(i);
|
||||||
|
derror = abs(error) - abs(error_last);
|
||||||
|
atten_dB = atten_dB + mu*error;
|
||||||
|
atten_dB = getAtten(atten_dB, atten_res_dB);
|
||||||
|
|
||||||
|
if enabled == 0
|
||||||
|
G_TX = -120;
|
||||||
|
end
|
||||||
|
error_v(i) = error;
|
||||||
|
derror_v(i) = derror;
|
||||||
|
gain_dB_v(i) = G_TX;
|
||||||
|
atten_v(i) = atten_dB;
|
||||||
|
|
||||||
|
if enabled == 1
|
||||||
|
if derror > -0.1 && abs(error) > 3
|
||||||
|
if latency_count == 0
|
||||||
|
enabled = 0;
|
||||||
|
else
|
||||||
|
latency_count = latency_count - 1;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
latency_count = LATENCY;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
subplot(4,1,1)
|
||||||
|
plot((0:N-1)*Ts, G_TX_target, (0:N-1)*Ts, G_PA_dB); grid; legend('G_{TX_target}', 'G_{PA}'); xlabel('t/s'); ylabel('dB')
|
||||||
|
subplot(4,1,2)
|
||||||
|
plot((0:N-1)*Ts, error_v, (0:N-1)*Ts, derror_v); grid; legend('error', 'derror'); xlabel('t/s'); ylabel('dB')
|
||||||
|
subplot(4,1,3)
|
||||||
|
plot((0:N-1)*Ts, gain_dB_v); grid; title('Gain_{TX}'); xlabel('t/s'); ylabel('dB')
|
||||||
|
subplot(4,1,4)
|
||||||
|
plot((0:N-1)*Ts, atten_v); grid; title('atten'); xlabel('t/s'); ylabel('dB')
|
||||||
|
|
||||||
|
function atten = getAtten(gain_dB, res_dB)
|
||||||
|
atten = max(0, min(40, res_dB*fix(gain_dB/res_dB)));
|
||||||
|
|
||||||
Executable
+53
@@ -0,0 +1,53 @@
|
|||||||
|
## Copyright (C) 2017 Jens Ahrensfeld
|
||||||
|
##
|
||||||
|
## This program is free software; you can redistribute it and/or modify it
|
||||||
|
## under the terms of the GNU General Public License as published by
|
||||||
|
## the Free Software Foundation; either version 3 of the License, or
|
||||||
|
## (at your option) any later version.
|
||||||
|
##
|
||||||
|
## This program is distributed in the hope that it will be useful,
|
||||||
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
## GNU General Public License for more details.
|
||||||
|
##
|
||||||
|
## You should have received a copy of the GNU General Public License
|
||||||
|
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
## -*- texinfo -*-
|
||||||
|
## @deftypefn {Function File} {@var{retval} =} hmm_eval (@var{input1}, @var{input2})
|
||||||
|
##
|
||||||
|
## @seealso{}
|
||||||
|
## @end deftypefn
|
||||||
|
|
||||||
|
## Author: Jens Ahrensfeld <ahrensfeld@w2ess001vm>
|
||||||
|
## Created: 2017-06-14
|
||||||
|
|
||||||
|
function sv = hmm_eval (A, numIter)
|
||||||
|
|
||||||
|
numStates = length(A)
|
||||||
|
C = zeros(1,numStates);
|
||||||
|
|
||||||
|
#A = rand(numStates, numStates)
|
||||||
|
|
||||||
|
for s=1:numStates,
|
||||||
|
A(s,:) = A(s,:) ./ sum(A(s,:));
|
||||||
|
[AS(s,:), Ai(s,:)] = sort(A(s,:));
|
||||||
|
AC(s,:) = cumsum(AS(s,:));
|
||||||
|
end
|
||||||
|
|
||||||
|
A
|
||||||
|
AC
|
||||||
|
s=1;
|
||||||
|
for n=1:numIter,
|
||||||
|
sv(n) = s;
|
||||||
|
stateProbs = AC(s,:);
|
||||||
|
z = rand();
|
||||||
|
c = find (z <= stateProbs);
|
||||||
|
s = Ai(s, c(1));
|
||||||
|
C(s) = C(s) + 1;
|
||||||
|
end
|
||||||
|
|
||||||
|
plot(1:numIter, sv, 'ro-'); grid;
|
||||||
|
C=C/numIter
|
||||||
|
|
||||||
|
endfunction
|
||||||
Executable
+50
@@ -0,0 +1,50 @@
|
|||||||
|
## Copyright (C) 2017 Jens Ahrensfeld
|
||||||
|
##
|
||||||
|
## This program is free software; you can redistribute it and/or modify it
|
||||||
|
## under the terms of the GNU General Public License as published by
|
||||||
|
## the Free Software Foundation; either version 3 of the License, or
|
||||||
|
## (at your option) any later version.
|
||||||
|
##
|
||||||
|
## This program is distributed in the hope that it will be useful,
|
||||||
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
## GNU General Public License for more details.
|
||||||
|
##
|
||||||
|
## You should have received a copy of the GNU General Public License
|
||||||
|
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
## -*- texinfo -*-
|
||||||
|
## @deftypefn {Function File} {@var{retval} =} ip_eval (@var{input1}, @var{input2})
|
||||||
|
##
|
||||||
|
## @seealso{}
|
||||||
|
## @end deftypefn
|
||||||
|
|
||||||
|
## Author: Jens Ahrensfeld <ahrensfeld@w2ess001vm>
|
||||||
|
## Created: 2017-05-15
|
||||||
|
|
||||||
|
function [] = ip_eval ()
|
||||||
|
|
||||||
|
Nh = 100;
|
||||||
|
Np = 10;
|
||||||
|
omega = 0.4;
|
||||||
|
|
||||||
|
close all;
|
||||||
|
x = -(Nh/2):(Nh/2-1);
|
||||||
|
|
||||||
|
for p=1:Np,
|
||||||
|
d = (p-1)/Np
|
||||||
|
h(:, p) = sinc(omega*(x+d))'.*kaiser(length(x), 8);
|
||||||
|
plot(x, h); grid;
|
||||||
|
pause (0.1)
|
||||||
|
end
|
||||||
|
|
||||||
|
figure
|
||||||
|
for p=1:Nh,
|
||||||
|
x = 0:Np-1;
|
||||||
|
y = h(p,:);
|
||||||
|
p = polyfit(x, y, 3);
|
||||||
|
plot(x, y, 'o', 0:0.1:Np-1, polyval(p, 0:0.1:Np-1), 'r'); grid;
|
||||||
|
pause (0.1)
|
||||||
|
end
|
||||||
|
|
||||||
|
endfunction
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
function [y, yc, z] = jpid(zi, kp, ki, kd, alpha_i, e)
|
||||||
|
|
||||||
|
if isempty(zi)
|
||||||
|
% Integrator
|
||||||
|
b_i = [1];
|
||||||
|
a_i = [1 -alpha_i];
|
||||||
|
% Differentiator
|
||||||
|
b_d = [1 -1];
|
||||||
|
a_d = [1];
|
||||||
|
i = zeros(1, max(length(a_i), length(b_i))-1);
|
||||||
|
d = zeros(1, max(length(a_d), length(b_d))-1);
|
||||||
|
|
||||||
|
z = struct('b_i', b_i, 'a_i', a_i, 'b_d', b_d, 'a_d', a_d, 'i', i, 'd', d, 'y_min', 0.0, 'y_max', 1.0, 'diff_aw', 0.0);
|
||||||
|
else
|
||||||
|
z = zi;
|
||||||
|
end
|
||||||
|
|
||||||
|
[yi, z.i] = filter(z.b_i, z.a_i, e + z.diff_aw, z.i);
|
||||||
|
[yd, z.d] = filter(z.b_d, z.a_d, e, z.d);
|
||||||
|
|
||||||
|
z.yp = kp*e;
|
||||||
|
z.yi = ki*yi;
|
||||||
|
z.yd = kd*yd;
|
||||||
|
|
||||||
|
y = z.yp + z.yi + z.yd;
|
||||||
|
|
||||||
|
yaw = yi;
|
||||||
|
if (yaw < z.y_min)
|
||||||
|
z.diff_aw = abs(yaw - z.y_min);
|
||||||
|
end
|
||||||
|
|
||||||
|
if (yaw > z.y_max)
|
||||||
|
z.diff_aw = -abs(yaw - z.y_max);
|
||||||
|
end
|
||||||
|
|
||||||
|
yc = max(z.y_min, min(z.y_max, y));
|
||||||
Executable
+33
@@ -0,0 +1,33 @@
|
|||||||
|
function lms_eval(N, mu)
|
||||||
|
|
||||||
|
% lms_eval(N, mu)
|
||||||
|
% Example: lms_eval(1000, 0.01)
|
||||||
|
|
||||||
|
h = [0 0 0 1 0 0 0 0];
|
||||||
|
w = randn(1, length(h));
|
||||||
|
|
||||||
|
z_h = zeros(length(h)-1, 1);
|
||||||
|
z_w = zeros(length(h)-1, 1);
|
||||||
|
|
||||||
|
x = zeros(1, length(h));
|
||||||
|
|
||||||
|
e_last = 0;
|
||||||
|
p = 1.0;
|
||||||
|
|
||||||
|
for n=1:N,
|
||||||
|
xs = 0.1*randn();
|
||||||
|
p = 0.99*p + 0.01*xs*xs;
|
||||||
|
x = [xs x(1:length(x)-1)];
|
||||||
|
d = x*h';
|
||||||
|
y = x*w';
|
||||||
|
e = d - y;
|
||||||
|
|
||||||
|
w = w + mu*e*x*(1/(0.001+p));
|
||||||
|
|
||||||
|
e_last = 0.5*e_last + 0.5*e*e;
|
||||||
|
_e(n) = e_last;
|
||||||
|
_p(n) = p;
|
||||||
|
end
|
||||||
|
|
||||||
|
plot(1:N, _e, 1:N, _p); grid;
|
||||||
|
w=w'
|
||||||
Executable
+50
@@ -0,0 +1,50 @@
|
|||||||
|
## Copyright (C) 2017 Jens Ahrensfeld
|
||||||
|
##
|
||||||
|
## This program is free software; you can redistribute it and/or modify it
|
||||||
|
## under the terms of the GNU General Public License as published by
|
||||||
|
## the Free Software Foundation; either version 3 of the License, or
|
||||||
|
## (at your option) any later version.
|
||||||
|
##
|
||||||
|
## This program is distributed in the hope that it will be useful,
|
||||||
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
## GNU General Public License for more details.
|
||||||
|
##
|
||||||
|
## You should have received a copy of the GNU General Public License
|
||||||
|
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
## -*- texinfo -*-
|
||||||
|
## @deftypefn {Function File} {@var{retval} =} ltrack (@var{input1}, @var{input2})
|
||||||
|
##
|
||||||
|
## @seealso{}
|
||||||
|
## @end deftypefn
|
||||||
|
|
||||||
|
## Author: Jens Ahrensfeld <ahrensfeld@w2ess001vm>
|
||||||
|
## Created: 2017-05-29
|
||||||
|
|
||||||
|
function ltrack (d)
|
||||||
|
|
||||||
|
N = 101
|
||||||
|
phi = (-(N-1)/2:((N-1)/2))/(N-1)*pi/2;
|
||||||
|
|
||||||
|
k=1;
|
||||||
|
for k=1:length(d)
|
||||||
|
err(:,k) = tan(phi)*d(k);
|
||||||
|
end
|
||||||
|
|
||||||
|
close all;
|
||||||
|
plot(phi, err); grid; xlabel('error(phi)')
|
||||||
|
|
||||||
|
err = (-(N-1)/2:((N-1)/2))/(N-1);
|
||||||
|
phi = [];
|
||||||
|
k=1;
|
||||||
|
for k=1:length(d)
|
||||||
|
phi(:,k) = atan(err/d(k));
|
||||||
|
end
|
||||||
|
|
||||||
|
figure;
|
||||||
|
plot(err, 180*phi/pi); grid; xlabel('phi(err)')
|
||||||
|
|
||||||
|
|
||||||
|
endfunction
|
||||||
|
|
||||||
Executable
+23
@@ -0,0 +1,23 @@
|
|||||||
|
function [y, zf] = movingavg(x, zi)
|
||||||
|
if ~isstruct(zi)
|
||||||
|
N = zi;
|
||||||
|
zf = struct('N', N, 's', zeros(N+1, 1), 'ri', 2, 'wi', 1, 'y', 0);
|
||||||
|
else
|
||||||
|
zf = zi;
|
||||||
|
end
|
||||||
|
|
||||||
|
xn = x/zf.N;
|
||||||
|
zf.y = zf.y + xn - zf.s(zf.ri);
|
||||||
|
y = zf.y;
|
||||||
|
|
||||||
|
zf.ri = zf.ri + 1;
|
||||||
|
if zf.ri > length(zf.s)
|
||||||
|
zf.ri = 1;
|
||||||
|
end
|
||||||
|
|
||||||
|
zf.s(zf.wi) = xn;
|
||||||
|
zf.wi = zf.wi + 1;
|
||||||
|
if zf.wi > length(zf.s)
|
||||||
|
zf.wi = 1;
|
||||||
|
end
|
||||||
|
|
||||||
Executable
+88
@@ -0,0 +1,88 @@
|
|||||||
|
function [p,S,mu] = myPolyfit(x,y,n)
|
||||||
|
% POLYFIT Fit polynomial to data.
|
||||||
|
% POLYFIT(X,Y,N) finds the coefficients of a polynomial P(X) of
|
||||||
|
% degree N that fits the data, P(X(I))~=Y(I), in a least-squares sense.
|
||||||
|
%
|
||||||
|
% [P,S] = POLYFIT(X,Y,N) returns the polynomial coefficients P and a
|
||||||
|
% structure S for use with POLYVAL to obtain error estimates on
|
||||||
|
% predictions. If the errors in the data, Y, are independent normal
|
||||||
|
% with constant variance, POLYVAL will produce error bounds which
|
||||||
|
% contain at least 50% of the predictions.
|
||||||
|
%
|
||||||
|
% The structure S contains the Cholesky factor of the Vandermonde
|
||||||
|
% matrix (R), the degrees of freedom (df), and the norm of the
|
||||||
|
% residuals (normr) as fields.
|
||||||
|
%
|
||||||
|
% [P,S,MU] = POLYFIT(X,Y,N) finds the coefficients of a polynomial
|
||||||
|
% in XHAT = (X-MU(1))/MU(2) where MU(1) = mean(X) and MU(2) = std(X).
|
||||||
|
% This centering and scaling transformation improves the numerical
|
||||||
|
% properties of both the polynomial and the fitting algorithm.
|
||||||
|
%
|
||||||
|
% Warning messages result if N is >= length(X), if X has repeated, or
|
||||||
|
% nearly repeated, points, or if X might need centering and scaling.
|
||||||
|
%
|
||||||
|
% See also POLY, POLYVAL, ROOTS.
|
||||||
|
|
||||||
|
% Copyright 1984-2002 The MathWorks, Inc.
|
||||||
|
% $Revision: 5.17 $ $Date: 2002/04/09 00:14:25 $
|
||||||
|
|
||||||
|
% The regression problem is formulated in matrix format as:
|
||||||
|
%
|
||||||
|
% y = V*p or
|
||||||
|
%
|
||||||
|
% 3 2
|
||||||
|
% y = [x x x 1] [p3
|
||||||
|
% p2
|
||||||
|
% p1
|
||||||
|
% p0]
|
||||||
|
%
|
||||||
|
% where the vector p contains the coefficients to be found. For a
|
||||||
|
% 7th order polynomial, matrix V would be:
|
||||||
|
%
|
||||||
|
% V = [x.^7 x.^6 x.^5 x.^4 x.^3 x.^2 x ones(size(x))];
|
||||||
|
|
||||||
|
if ~isequal(size(x),size(y))
|
||||||
|
error('X and Y vectors must be the same size.')
|
||||||
|
end
|
||||||
|
|
||||||
|
x = x(:);
|
||||||
|
y = y(:);
|
||||||
|
|
||||||
|
if nargout > 2
|
||||||
|
mu = [mean(x); std(x)];
|
||||||
|
x = (x - mu(1))/mu(2);
|
||||||
|
end
|
||||||
|
|
||||||
|
% Construct Vandermonde matrix.
|
||||||
|
V(:,n+1) = ones(length(x),1);
|
||||||
|
for j = n:-1:1
|
||||||
|
V(:,j) = x.*V(:,j+1);
|
||||||
|
end
|
||||||
|
|
||||||
|
% Solve least squares problem, and save the Cholesky factor.
|
||||||
|
[Q,R] = qr(V,0);
|
||||||
|
ws = warning('off','all');
|
||||||
|
p = R\(Q'*y); % Same as p = V\y;
|
||||||
|
warning(ws);
|
||||||
|
if size(R,2) > size(R,1)
|
||||||
|
warning('MATLAB:polyfit:PolyNotUnique', ...
|
||||||
|
'Polynomial is not unique; degree >= number of data points.')
|
||||||
|
elseif condest(R) > 1.0e10
|
||||||
|
if nargout > 2
|
||||||
|
warning('MATLAB:polyfit:RepeatedPoints', ...
|
||||||
|
'Polynomial is badly conditioned. Remove repeated data points.')
|
||||||
|
else
|
||||||
|
warning('MATLAB:polyfit:RepeatedPointsOrRescale', ...
|
||||||
|
['Polynomial is badly conditioned. Remove repeated data points\n' ...
|
||||||
|
' or try centering and scaling as described in HELP POLYFIT.'])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
r = y - V*p;
|
||||||
|
p = p.'; % Polynomial coefficients are row vectors by convention.
|
||||||
|
|
||||||
|
% S is a structure containing three elements: the Cholesky factor of the
|
||||||
|
% Vandermonde matrix, the degrees of freedom and the norm of the residuals.
|
||||||
|
|
||||||
|
S.R = R;
|
||||||
|
S.df = length(y) - (n+1);
|
||||||
|
S.normr = norm(r);
|
||||||
Executable
BIN
Binary file not shown.
Executable
+7
@@ -0,0 +1,7 @@
|
|||||||
|
function onPush(h)
|
||||||
|
disp('onPush')
|
||||||
|
close(h)
|
||||||
|
|
||||||
|
system ("nautilus .")
|
||||||
|
|
||||||
|
endfunction
|
||||||
Executable
+16
@@ -0,0 +1,16 @@
|
|||||||
|
function pf_eval(Np)
|
||||||
|
N = 100;
|
||||||
|
kn = 0.05;
|
||||||
|
R = 4;
|
||||||
|
x = (0:N-1)/N;
|
||||||
|
xr = x(1:R:N)
|
||||||
|
y = sin(0.25*2*pi*xr);
|
||||||
|
|
||||||
|
Nr = length(xr);
|
||||||
|
yn = y + kn*(0.5-rand(1,Nr));
|
||||||
|
[p,s] = myPolyfit(xr,yn,Np);
|
||||||
|
|
||||||
|
yh = polyval(p,x);
|
||||||
|
|
||||||
|
plot(xr, yn, 'ro', x, yh, 'b.'); grid; legend('y','y_h');
|
||||||
|
s=s
|
||||||
Executable
+95
@@ -0,0 +1,95 @@
|
|||||||
|
function pid_eval(Nd, kp, ki, kd)
|
||||||
|
|
||||||
|
% pid_eval(6, 0.002, 2.0e-6, 8.0)
|
||||||
|
% pid_eval(10, 0.0005, 1.0e-6, 4.0)
|
||||||
|
|
||||||
|
% Constants
|
||||||
|
kNoise = 0.05;
|
||||||
|
aNoise = 0.5;
|
||||||
|
alpha_i = 0.999
|
||||||
|
|
||||||
|
% Init
|
||||||
|
x = [zeros(1, 40), 2*ones(1, 160), zeros(1, 40)];
|
||||||
|
noise = kNoise*randn(length(x));
|
||||||
|
|
||||||
|
zfp = struct('velo', 0, 'dist', 0, 'x', 0);
|
||||||
|
zfc = []
|
||||||
|
|
||||||
|
ev = zeros(1, length(x));
|
||||||
|
efv = zeros(1, length(x));
|
||||||
|
y1v = zeros(1, length(x));
|
||||||
|
y2v = zeros(1, length(x));
|
||||||
|
ypv = zeros(1, length(x));
|
||||||
|
yiv = zeros(1, length(x));
|
||||||
|
ydv = zeros(1, length(x));
|
||||||
|
|
||||||
|
yvelo = 0;
|
||||||
|
ydist = 0;
|
||||||
|
state = 'Init';
|
||||||
|
y_last = 0;
|
||||||
|
|
||||||
|
b_f = [aNoise];
|
||||||
|
a_f = [1 -(1-aNoise)];
|
||||||
|
z_f = zeros(1, max(length(a_f), length(b_f))-1);
|
||||||
|
|
||||||
|
for n=1:length(x),
|
||||||
|
e = x(n)-ydist + noise(n);
|
||||||
|
[ef, z_f] = filter(b_f, a_f, e, z_f);
|
||||||
|
|
||||||
|
[ypid, yc, zfc] = jpid(zfc, kp, ki, kd, alpha_i, ef);
|
||||||
|
state_next = state;
|
||||||
|
if strcmp(state, 'Init')
|
||||||
|
state_next = 'Acquisition';
|
||||||
|
elseif strcmp(state, 'Acquisition')
|
||||||
|
if abs(ef) < 0.001
|
||||||
|
kp = kp * 1.0;
|
||||||
|
ki = ki * 1.0;
|
||||||
|
kd = kd * 1.0;
|
||||||
|
state_next = 'Track';
|
||||||
|
end
|
||||||
|
elseif strcmp(state, 'Track')
|
||||||
|
if abs(ef) > 0.01
|
||||||
|
kp = kp * 1.0;
|
||||||
|
ki = ki * 1.0;
|
||||||
|
kd = kd * 1.0;
|
||||||
|
state_next = 'Acquisition';
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if strcmp(state_next, state) == 0
|
||||||
|
disp(state);
|
||||||
|
end
|
||||||
|
dy = ypid - y_last;
|
||||||
|
y_last = ypid;
|
||||||
|
[yvelo, ydist, zfp] = plant(zfp, Nd, dy);
|
||||||
|
ev(n) = e;
|
||||||
|
efv(n) = ef;
|
||||||
|
y1v(n) = ypid;
|
||||||
|
y2v(n) = ydist;
|
||||||
|
ypv(n) = zfc.yp;
|
||||||
|
yiv(n) = zfc.yi;
|
||||||
|
ydv(n) = zfc.yd;
|
||||||
|
state = state_next;
|
||||||
|
end
|
||||||
|
|
||||||
|
if 1
|
||||||
|
subplot(3, 1, 1)
|
||||||
|
plot(1:length(x), ev, 1:length(x), efv); grid; legend("Error", "Error_{Filtered}")
|
||||||
|
subplot(3, 1, 2)
|
||||||
|
plot(1:length(x), y1v, 1:length(x), ypv, 1:length(x), yiv, 1:length(x), ydv); grid; legend("PID", "P", "I", "D")
|
||||||
|
subplot(3, 1, 3)
|
||||||
|
plot(1:length(x), x, 1:length(x), y2v); grid; legend("Target", "Plant")
|
||||||
|
end
|
||||||
|
|
||||||
|
function [yvelo, ydist, zf] = plant(zi, nd, x)
|
||||||
|
b = [zeros(1, nd-1) 0.01];
|
||||||
|
a = [1 -1];
|
||||||
|
if zi.velo == 0
|
||||||
|
zi.velo = zeros(1, max(length(a), length(b))-1);
|
||||||
|
end
|
||||||
|
if zi.dist == 0
|
||||||
|
zi.dist = zeros(1, 1);
|
||||||
|
end
|
||||||
|
|
||||||
|
[yvelo, zf.velo] = filter(b, a, x, zi.velo);
|
||||||
|
[ydist, zf.dist] = filter([1], [1 -1], yvelo, zi.dist);
|
||||||
|
|
||||||
Executable
+48
@@ -0,0 +1,48 @@
|
|||||||
|
## Copyright (C) 2017 Jens Ahrensfeld
|
||||||
|
##
|
||||||
|
## This program is free software; you can redistribute it and/or modify it
|
||||||
|
## under the terms of the GNU General Public License as published by
|
||||||
|
## the Free Software Foundation; either version 3 of the License, or
|
||||||
|
## (at your option) any later version.
|
||||||
|
##
|
||||||
|
## This program is distributed in the hope that it will be useful,
|
||||||
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
## GNU General Public License for more details.
|
||||||
|
##
|
||||||
|
## You should have received a copy of the GNU General Public License
|
||||||
|
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
## -*- texinfo -*-
|
||||||
|
## @deftypefn {Function File} {@var{retval} =} psample (@var{input1}, @var{input2})
|
||||||
|
##
|
||||||
|
## @seealso{}
|
||||||
|
## @end deftypefn
|
||||||
|
|
||||||
|
## Author: Jens Ahrensfeld <ahrensfeld@w2ess001vm>
|
||||||
|
## Created: 2017-04-19
|
||||||
|
|
||||||
|
function [h] = psample (N)
|
||||||
|
P = [10 10 10 10];
|
||||||
|
R = calcRange(P);
|
||||||
|
|
||||||
|
h = zeros(1, length(P));
|
||||||
|
|
||||||
|
for k=1:N,
|
||||||
|
ii = getSample(R);
|
||||||
|
h(ii) = h(ii) + 1/N;
|
||||||
|
end
|
||||||
|
|
||||||
|
function R = calcRange(P)
|
||||||
|
P = P / sum(P)
|
||||||
|
R0 = 0;
|
||||||
|
for k=1:length(P)
|
||||||
|
R0 = R0 + P(k);
|
||||||
|
R(k) = R0;
|
||||||
|
end
|
||||||
|
|
||||||
|
function ii = getSample(R)
|
||||||
|
Z = rand();
|
||||||
|
cand = find(Z <= R);
|
||||||
|
ii=cand(1);
|
||||||
|
|
||||||
Executable
+44
@@ -0,0 +1,44 @@
|
|||||||
|
## Copyright (C) 2016 Jens Ahrensfeld
|
||||||
|
##
|
||||||
|
## This program is free software; you can redistribute it and/or modify it
|
||||||
|
## under the terms of the GNU General Public License as published by
|
||||||
|
## the Free Software Foundation; either version 3 of the License, or
|
||||||
|
## (at your option) any later version.
|
||||||
|
##
|
||||||
|
## This program is distributed in the hope that it will be useful,
|
||||||
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
## GNU General Public License for more details.
|
||||||
|
##
|
||||||
|
## You should have received a copy of the GNU General Public License
|
||||||
|
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
## -*- texinfo -*-
|
||||||
|
## @deftypefn {Function File} {@var{retval} =} pt_eval (@var{input1}, @var{input2})
|
||||||
|
##
|
||||||
|
## @seealso{}
|
||||||
|
## @end deftypefn
|
||||||
|
|
||||||
|
## Author: Jens Ahrensfeld <ahrensfeld@w2ess001vm>
|
||||||
|
## Created: 2016-11-04
|
||||||
|
|
||||||
|
function pt_eval (vX, vY)
|
||||||
|
|
||||||
|
if 0
|
||||||
|
k = sqrt(2)/1.5;
|
||||||
|
v = sqrt(vX^2 + vY^2);
|
||||||
|
nx = k*abs(vX)/v;
|
||||||
|
ny = k*abs(vY)/v;
|
||||||
|
else
|
||||||
|
k = 1.0/1.5;
|
||||||
|
nx = k;
|
||||||
|
ny = k;
|
||||||
|
end
|
||||||
|
|
||||||
|
mot1 = 0.5*vX*nx + vY*ny
|
||||||
|
mot2 = -0.5*vX*nx + vY*ny
|
||||||
|
|
||||||
|
rotX = mot1 - mot2
|
||||||
|
rotY = 0.5*(mot1 + mot2)
|
||||||
|
vrot = sqrt(rotX^2 + rotY^2)
|
||||||
|
endfunction
|
||||||
Executable
+55
@@ -0,0 +1,55 @@
|
|||||||
|
## Copyright (C) 2018 Jens Ahrensfeld
|
||||||
|
##
|
||||||
|
## This program is free software; you can redistribute it and/or modify it
|
||||||
|
## under the terms of the GNU General Public License as published by
|
||||||
|
## the Free Software Foundation; either version 3 of the License, or
|
||||||
|
## (at your option) any later version.
|
||||||
|
##
|
||||||
|
## This program is distributed in the hope that it will be useful,
|
||||||
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
## GNU General Public License for more details.
|
||||||
|
##
|
||||||
|
## You should have received a copy of the GNU General Public License
|
||||||
|
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
## -*- texinfo -*-
|
||||||
|
## @deftypefn {Function File} {@var{retval} =} sallenkey_eval (@var{input1}, @var{input2})
|
||||||
|
##
|
||||||
|
## @seealso{}
|
||||||
|
## @end deftypefn
|
||||||
|
|
||||||
|
## Author: Jens Ahrensfeld <ahrensfeld@w2ess001vm>
|
||||||
|
## Created: 2018-05-28
|
||||||
|
|
||||||
|
function sallenkey_eval (f_cut_Hz, Q)
|
||||||
|
|
||||||
|
w_cut = 2*pi*f_cut_Hz;
|
||||||
|
|
||||||
|
m = 1.0;
|
||||||
|
n = Q*(m*m + 1)/m;
|
||||||
|
|
||||||
|
R = 1.0e+3;
|
||||||
|
C = 1/(R*w_cut)
|
||||||
|
|
||||||
|
R1 = m*R
|
||||||
|
R2 = R/m
|
||||||
|
|
||||||
|
C1 = n*C
|
||||||
|
C2 = C/n
|
||||||
|
|
||||||
|
|
||||||
|
w0 = 0.1;
|
||||||
|
w1 = 2*pi*1e+6;
|
||||||
|
w_step = 10;
|
||||||
|
|
||||||
|
s = j*(w0:w_step:w1);
|
||||||
|
|
||||||
|
H_s = 1./(1 + C2*(R1 + R2)*s + C1*C2*R1*R2*s.^2);
|
||||||
|
|
||||||
|
semilogx(abs(s)/(2*pi), abs(H_s)); grid; xlabel('f/Hz'); ylabel('|H(j*2*pi*f)|')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
endfunction
|
||||||
Executable
+61
@@ -0,0 +1,61 @@
|
|||||||
|
## Copyright (C) 2018 Jens Ahrensfeld
|
||||||
|
##
|
||||||
|
## This program is free software; you can redistribute it and/or modify it
|
||||||
|
## under the terms of the GNU General Public License as published by
|
||||||
|
## the Free Software Foundation; either version 3 of the License, or
|
||||||
|
## (at your option) any later version.
|
||||||
|
##
|
||||||
|
## This program is distributed in the hope that it will be useful,
|
||||||
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
## GNU General Public License for more details.
|
||||||
|
##
|
||||||
|
## You should have received a copy of the GNU General Public License
|
||||||
|
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
## -*- texinfo -*-
|
||||||
|
## @deftypefn {Function File} {@var{retval} =} stdp_eval (@var{input1}, @var{input2})
|
||||||
|
##
|
||||||
|
## @seealso{}
|
||||||
|
## @end deftypefn
|
||||||
|
|
||||||
|
## Author: Jens Ahrensfeld <ahrensfeld@w2ess001vm>
|
||||||
|
## Created: 2018-01-17
|
||||||
|
|
||||||
|
function stdp_eval ()
|
||||||
|
|
||||||
|
N = 8;
|
||||||
|
|
||||||
|
Vp = zeros(N,1);
|
||||||
|
W = rand(N, 1)
|
||||||
|
|
||||||
|
K = 100;
|
||||||
|
alpha = 0.5;
|
||||||
|
beta = 0.5;
|
||||||
|
thresh = 2.0;
|
||||||
|
kn = 0.01;
|
||||||
|
mu = 0.01;
|
||||||
|
|
||||||
|
Vf = 0;
|
||||||
|
for k=1:K,
|
||||||
|
|
||||||
|
Vin = rand(N,1) > 0.8;
|
||||||
|
Vp = max(alpha*Vp, Vin);
|
||||||
|
|
||||||
|
V = sum(W.*Vp);
|
||||||
|
n = kn*(2.0 * (0.5 - rand()));
|
||||||
|
fire = ((V+n) >= thresh);
|
||||||
|
Vf = max(beta*Vf, fire);
|
||||||
|
|
||||||
|
W = W + mu*Vp*Vf;
|
||||||
|
|
||||||
|
|
||||||
|
_V(k) = V;
|
||||||
|
_Vin(:, k) = Vin;
|
||||||
|
_fire(k) = fire;
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
plot(1:K, _V, 1:K, _fire); grid;
|
||||||
|
|
||||||
|
endfunction
|
||||||
Executable
+36
@@ -0,0 +1,36 @@
|
|||||||
|
## Copyright (C) 2017 Jens Ahrensfeld
|
||||||
|
##
|
||||||
|
## This program is free software; you can redistribute it and/or modify it
|
||||||
|
## under the terms of the GNU General Public License as published by
|
||||||
|
## the Free Software Foundation; either version 3 of the License, or
|
||||||
|
## (at your option) any later version.
|
||||||
|
##
|
||||||
|
## This program is distributed in the hope that it will be useful,
|
||||||
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
## GNU General Public License for more details.
|
||||||
|
##
|
||||||
|
## You should have received a copy of the GNU General Public License
|
||||||
|
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
## -*- texinfo -*-
|
||||||
|
## @deftypefn {Function File} {@var{retval} =} ui_eval (@var{input1}, @var{input2})
|
||||||
|
##
|
||||||
|
## @seealso{}
|
||||||
|
## @end deftypefn
|
||||||
|
|
||||||
|
## Author: Jens Ahrensfeld <ahrensfeld@w2ess001vm>
|
||||||
|
## Created: 2017-07-12
|
||||||
|
|
||||||
|
function ui_eval()
|
||||||
|
|
||||||
|
% create figure and panel on it
|
||||||
|
f = figure;
|
||||||
|
p = uipanel("title", "Panel Title", "position", [.25 .25 .5 .5]);
|
||||||
|
|
||||||
|
% add two buttons to the panel
|
||||||
|
b1 = uicontrol ("parent", p, "callback", "onPush(gcf)", "string", "A Button", "position",[18 10 150 36]);
|
||||||
|
b2 = uicontrol ("parent", p, "string", "Another Button", "position",[18 60 150 36]);
|
||||||
|
|
||||||
|
endfunction
|
||||||
|
|
||||||
Executable
+43
@@ -0,0 +1,43 @@
|
|||||||
|
## Copyright (C) 2018 Jens Ahrensfeld
|
||||||
|
##
|
||||||
|
## This program is free software; you can redistribute it and/or modify it
|
||||||
|
## under the terms of the GNU General Public License as published by
|
||||||
|
## the Free Software Foundation; either version 3 of the License, or
|
||||||
|
## (at your option) any later version.
|
||||||
|
##
|
||||||
|
## This program is distributed in the hope that it will be useful,
|
||||||
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
## GNU General Public License for more details.
|
||||||
|
##
|
||||||
|
## You should have received a copy of the GNU General Public License
|
||||||
|
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
## -*- texinfo -*-
|
||||||
|
## @deftypefn {Function File} {@var{retval} =} vanDusen_eval (@var{input1}, @var{input2})
|
||||||
|
##
|
||||||
|
## @seealso{}
|
||||||
|
## @end deftypefn
|
||||||
|
|
||||||
|
## Author: Jens Ahrensfeld <ahrensfeld@w2ess001vm>
|
||||||
|
## Created: 2018-05-28
|
||||||
|
|
||||||
|
function vanDusen_eval (R0, Tmin, Tmax, dT)
|
||||||
|
|
||||||
|
a = +3.90830e-03
|
||||||
|
b = -5.77500e-07
|
||||||
|
c = -4.18301e-12
|
||||||
|
|
||||||
|
T = Tmin:dT:Tmax;
|
||||||
|
|
||||||
|
R1 = R0*(1 + a*T + b*T.^2);
|
||||||
|
R2 = c.*(T - 100).*T.^3;
|
||||||
|
|
||||||
|
|
||||||
|
a_IEC = 0.00385055;
|
||||||
|
a_SAMA = 0.00392;
|
||||||
|
|
||||||
|
plot(T, R1, T, R0*(1+a_IEC*T), 'r', T, R0*(1+a_SAMA*T), 'g'); grid; xlabel('T/°C'); ylabel('RTD/ohms'); legend('van Dusen','a_{IEC}','a_{SAMA}');
|
||||||
|
|
||||||
|
|
||||||
|
endfunction
|
||||||
Executable
+28
@@ -0,0 +1,28 @@
|
|||||||
|
function vga_eval(gain_dB)
|
||||||
|
% gain_dB : combined gain
|
||||||
|
|
||||||
|
% Constants (gain contraints of HMC625)
|
||||||
|
gain_min_dB = -13.5;
|
||||||
|
gain_max_dB = +18.0;
|
||||||
|
|
||||||
|
% Gains of individual VGA
|
||||||
|
vga_gain = zeros(1,2);
|
||||||
|
|
||||||
|
if gain_dB > 0
|
||||||
|
for k=1:length(vga_gain),
|
||||||
|
vga_gain(k) = min(gain_max_dB, gain_dB);
|
||||||
|
gain_dB = gain_dB - vga_gain(k);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
for k=1:length(gain),
|
||||||
|
vga_gain(k) = max(gain_min_dB, gain_dB);
|
||||||
|
gain_dB = gain_dB - vga_gain(k);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
vga_gain = vga_gain
|
||||||
|
fprintf(stdout, "Gain = %f\n", vga_gain(1) + vga_gain(2));
|
||||||
|
if gain_dB > 0
|
||||||
|
fprintf("Gain not reached!\n");
|
||||||
|
end
|
||||||
|
|
||||||
Reference in New Issue
Block a user