git-svn-id: http://moon:8086/svn/matlab/trunk@99 801c6759-fa7c-4059-a304-17956f83a07c
This commit is contained in:
2018-08-30 18:06:49 +00:00
parent 07c78cd992
commit 1ab94a4bea
24 changed files with 988 additions and 0 deletions
+52
View File
@@ -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
+27
View File
@@ -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
+11
View File
@@ -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;
+42
View File
@@ -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
+23
View File
@@ -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);
+67
View File
@@ -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)));
+53
View File
@@ -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
+50
View File
@@ -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
+36
View File
@@ -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));
+33
View File
@@ -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'
+50
View File
@@ -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
+23
View File
@@ -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
+88
View File
@@ -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);
BIN
View File
Binary file not shown.
+7
View File
@@ -0,0 +1,7 @@
function onPush(h)
disp('onPush')
close(h)
system ("nautilus .")
endfunction
+16
View File
@@ -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
+95
View File
@@ -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);
+48
View File
@@ -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);
+44
View File
@@ -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
+55
View File
@@ -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
+61
View File
@@ -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
+36
View File
@@ -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
+43
View File
@@ -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
+28
View File
@@ -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