add lab6-filters
This commit is contained in:
1 parent
4d5693aa1d
commit
aa399dcc93
6 files changed
+251
-193
No files matched your search
@@ -161,6 +161,7 @@
|
||||
|
||||
<!-- Code highlights -->
|
||||
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-armasm.js"></script>
|
||||
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-matlab.js"></script>
|
||||
|
||||
<!-- Dark Theme -->
|
||||
<script src="//cdn.jsdelivr.net/npm/docsify-darklight-theme@latest/dist/index.min.js"> </script>
|
||||
|
||||
@@ -17,6 +17,7 @@ In according to the sample theory, we have to choose at least 2 times the maximu
|
||||
In this case, the maximum frequency is 1 kHz, so we have to choose a sample frequency at least at 2 kHz.
|
||||
We take 10 time $f_c$ for the sample frequency, so we choose 20 kHz.
|
||||
|
||||
|
||||
## Transfer function
|
||||
For calculate the transfer function, we have to calculate the poles and zeros of the filter.
|
||||
|
||||
@@ -29,64 +30,104 @@ Be careful, $k_a$ is not the DC gain.
|
||||
For a low pass filter without zeros, the "digital" gain is :
|
||||
$$k_{d} = k_{a}\cdot \prod_{i} \frac{1-e^{P_{ai}\cdot T}}{P_{ai}}$$
|
||||
|
||||
----------
|
||||
We can apply the bilinear transformation to the poles and zeros of the analog filter to obtain the poles and zeros of the digital filter.
|
||||
$$
|
||||
p_{di} = \frac{1+p_{ai}\cdot \frac{T}{2}}{1-p_{ai}\cdot \frac{T}{2}}
|
||||
\qquad \qquad
|
||||
z_{di} = \frac{1+z_{ai}\cdot \frac{T}{2}}{1-z_{ai}\cdot \frac{T}{2}}
|
||||
$$
|
||||
And for the low pass filter, the "bilinear" gain is :
|
||||
$$k_{d} = k_{a}\cdot \frac{1}{\prod_{i}\left( \frac{2}{T}-p_{ai} \right)}$$
|
||||
|
||||
fc = 1000;
|
||||
wc = 2*pi*fc;
|
||||
fs = 10*fc;
|
||||
ts = 1/fs;
|
||||
|
||||
num = [0 0 1];
|
||||
den = [1/(wc*wc) 1.414/wc 1];
|
||||
sysa = tf(num, den)
|
||||
[za,pa,ka] = tf2zp(num, den);
|
||||
%fvtool(num,den,'polezero')
|
||||
|
||||
|
||||
kd = ka .* ((1-exp(pa(1).*ts))./pa(1)) .* ((1-exp(pa(2).*ts))./pa(2));
|
||||
kd = real(kd);
|
||||
pd = (1+pa.*(ts./2)) ./ (1-pa.*(ts./2));
|
||||
zd = (1+za.*(ts/2)) ./ (1-za.*(ts/2));
|
||||
sysd = zpk(zd, pd, kd, ts)
|
||||
[zdb, pdb, kdb] = bilinear(za, pa, ka, fs);
|
||||
sysdb = zpk(zdb, pdb, kdb, ts)
|
||||
|
||||
bode(sysa, sysd, sysdb);
|
||||
On the following diagram, we can see the bode diagram of the analog, digital filter and the filter with the bilinear transformation.
|
||||
|
||||

|
||||
|
||||
-----------
|
||||
clear;
|
||||
close all;
|
||||
clc;
|
||||
# IIR filter design
|
||||
|
||||
H0 = 0; % dB
|
||||
H1 = -3; % dB
|
||||
H2 = -40; % dB
|
||||
fn.p = 7000; % Hz
|
||||
fn.s = 9000 % Hz
|
||||
fs = 48000; % Hz
|
||||
We must design an IIR filter with the following specifications :
|
||||
|
||||
fa.p = (fs/pi) * tan((pi*fn.p)/fs);
|
||||
fa.s = (fs/pi) * tan((pi*fn.s)/fs)
|
||||
- $H_0 = 0 [dB]$
|
||||
- $H_1 = -3 [dB]$
|
||||
- $H_2 = -40 [dB]$
|
||||
- $f_{pass} = 7 [kHz]$
|
||||
- $f_{stop} = 9 [kHz]$
|
||||
- $f_s = 48 [kHz]$
|
||||
|
||||
wp = 2*pi*fa.p;
|
||||
ws = 2*pi*fa.s;
|
||||
ts = 1/fs;
|
||||
|
||||
[n, wp] = ellipord(wp, ws, 3, 40, 's')
|
||||
[z, p, k] = ellip(n, 3, 40, wp, 's');
|
||||
sys = zpk(z, p, k);
|
||||
[zd, pd, kd] = bilinear(z, p, k, fs);
|
||||
sysd = zpk(zd, pd, kd, ts)
|
||||
bode(sys, sysd)
|
||||
title('Bode Diagram', 'Color', '#808080');
|
||||
xlabel('Frequency (rad/s)', 'Color', '#808080');
|
||||
ylabel('Magnitude (dB)', 'Color', '#808080');
|
||||
ylabel('Phase (deg)', 'Color', '#808080');
|
||||
legend('digital','bilinear', 'Color', 'white')
|
||||
sos = zp2sos(z,p,k);
|
||||
We first calculate the analog filter for search the order with the function *ellipord*.
|
||||
Then, we calculate the poles and zeros with the function *ellip*.
|
||||
We apply the bilinear transformation to the poles and zeros to obtain the poles and zeros of the digital filter.
|
||||
Finally, we can plot the bode diagram of the digital filter and the filter with the bilinear transformation.
|
||||
|
||||

|
||||
|
||||
|
||||
# DSP implementation
|
||||
|
||||
We will implement the previously designed digital filter using a C program that will run in real-time on a fixed-point DSP.
|
||||
We will employ a cascade structure, consisting of 2 second-order stages.
|
||||
We will use the TMS320C6211 DSK from Texas Instruments.
|
||||
|
||||
The following equation represent an universal transfer function of a second-order filter :
|
||||
$$H(z) = \frac{b_{0}+b_{1}\cdot z^{-1}+b_{2}\cdot z^{-2}}{a_{0}+a_{1}\cdot z^{-1}+a_{2}\cdot z^{-2}}$$
|
||||
|
||||
The following figure depicts the block diagram of this implementation in the case where a0 = 1
|
||||
This structure is commonly referred to as "Direct Form I." It requires the storage of past values of both the input and output.
|
||||
|
||||

|
||||
|
||||
So we have the difference equation :
|
||||
$$y(n) = b_{0}\cdot x(n)+b_{1}\cdot x(n-1)+b_{2}\cdot x(n-2)-a_{1}\cdot y(n-1)-a_{2}\cdot y(n-2)$$
|
||||
|
||||
It exists a second structure called "Direct Form II" which is more efficient in terms of computation and memory usage.
|
||||
|
||||

|
||||
|
||||
The difference equation is :
|
||||
$$\begin{align}
|
||||
y(n) &= tmp\cdot b_{0}+w[0]\cdot b_{1}+w[1]\cdot b_{2} \\
|
||||
\\
|
||||
tmp &= x(n)-a_{1}\cdot w[0]-a_{2}\cdot w[1] \\
|
||||
\\
|
||||
w[0] &= tmp_{prev} \\
|
||||
\\
|
||||
w[1] &= w[0]_{prev}
|
||||
\end{align}$$
|
||||
|
||||
The variables can be translated into code by shifting the coefficients 14 positions to the left to enhance precision
|
||||
after the decimal point, as the DSP only works with integers.
|
||||
|
||||
Structures for the coefficients and the state variables are defined as follows :
|
||||
```c
|
||||
typedef struct {
|
||||
short b0;
|
||||
short b1;
|
||||
short b2;
|
||||
short a0;
|
||||
short a1;
|
||||
short a2;
|
||||
} coeff_sec_order;
|
||||
|
||||
short w3[2];
|
||||
short w4[2];
|
||||
|
||||
coeff_sec_order stage1 = { 469, 349, 469, 16384, -23699, 10692};
|
||||
coeff_sec_order stage2 = {16384, -11187, 16384, 16384, -19657, 14890};
|
||||
```
|
||||
|
||||
The following code is the implementation of the Direct Form II function :
|
||||
```c
|
||||
void iir_sec_order_dir_s(coeff_sec_order Coeff, short*w, short* Input, short* Output) {
|
||||
register short tmp;
|
||||
|
||||
tmp = (long)* Input - (( (Long)Coeff.a1 * (long)w[0]) >> SHIFT) - (( (long)Coeff.a2 * (long)w[1]) >> SHIFT);
|
||||
*Output = (( (long)Coeff.b0 * (long)tmp >> SHIFT) + (( (long)Coeff.b1 * (long)w[0]) >> SHIFT) + (( (long)Coeff.b2 * (long)w[1]) >> SHIFT);
|
||||
|
||||
w[1] = w[0];
|
||||
w[0] = tmp;
|
||||
}
|
||||
```
|
||||
|
||||
For a better effect of the filter, the function can be called several times.
|
||||
|
||||
|
||||
@@ -21,9 +21,9 @@
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.66684046"
|
||||
inkscape:cx="717.56294"
|
||||
inkscape:cy="398.14621"
|
||||
inkscape:zoom="0.94305482"
|
||||
inkscape:cx="1042.3572"
|
||||
inkscape:cy="236.99577"
|
||||
inkscape:window-width="1918"
|
||||
inkscape:window-height="1008"
|
||||
inkscape:window-x="953"
|
||||
@@ -2037,86 +2037,90 @@
|
||||
id="path643" />
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:sRGB;fill:#ffffff;stroke:#ffffff;color-rendering:optimizeSpeed;image-rendering:optimizeSpeed;shape-rendering:crispEdges;text-rendering:optimizeSpeed"
|
||||
id="g649"
|
||||
transform="translate(-238.52001,-80.103308)">
|
||||
<path
|
||||
style="stroke:none"
|
||||
d="m 1725,582 v -53 h -90 v 53 z"
|
||||
id="path647" />
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
transform="translate(1443.48,458.89669)"
|
||||
id="g653">
|
||||
<text
|
||||
x="0"
|
||||
xml:space="preserve"
|
||||
y="5"
|
||||
style="stroke:none"
|
||||
id="text651">analog</text>
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;fill:#0072bd;stroke:#0072bd;stroke-width:0.6667;stroke-linecap:butt;stroke-linejoin:round;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
id="g657"
|
||||
transform="translate(-238.52001,-80.103308)">
|
||||
<line
|
||||
y2="539"
|
||||
style="fill:none"
|
||||
x1="1639"
|
||||
x2="1679"
|
||||
y1="539"
|
||||
id="line655" />
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
transform="translate(1443.48,475.39669)"
|
||||
id="g661">
|
||||
<text
|
||||
x="0"
|
||||
xml:space="preserve"
|
||||
y="5"
|
||||
style="stroke:none"
|
||||
id="text659">digital</text>
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;fill:#d95319;stroke:#d95319;stroke-width:0.6667;stroke-linecap:butt;stroke-linejoin:round;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
id="g665"
|
||||
transform="translate(-238.52001,-80.103308)">
|
||||
<line
|
||||
y2="555.5"
|
||||
style="fill:none"
|
||||
x1="1639"
|
||||
x2="1679"
|
||||
y1="555.5"
|
||||
id="line663" />
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
transform="translate(1443.48,491.89669)"
|
||||
id="g669">
|
||||
<text
|
||||
x="0"
|
||||
xml:space="preserve"
|
||||
y="5"
|
||||
style="stroke:none"
|
||||
id="text667">bilinear</text>
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;fill:#edb120;stroke:#edb120;stroke-width:0.6667;stroke-linecap:butt;stroke-linejoin:round;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
id="g675"
|
||||
transform="translate(-238.52001,-80.103308)">
|
||||
<line
|
||||
y2="572"
|
||||
style="fill:none"
|
||||
x1="1639"
|
||||
x2="1679"
|
||||
y1="572"
|
||||
id="line671" />
|
||||
<path
|
||||
d="m 1635,582 v -53 h 90 v 53 z"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#262626;stroke-linejoin:miter"
|
||||
id="path673" />
|
||||
id="g644"
|
||||
transform="translate(-23.865014,-350.98702)">
|
||||
<g
|
||||
style="color-interpolation:sRGB;fill:#cccccc;stroke:#ffffff;color-rendering:optimizeSpeed;image-rendering:optimizeSpeed;shape-rendering:crispEdges;text-rendering:optimizeSpeed"
|
||||
id="g649"
|
||||
transform="translate(-238.52001,-80.103308)">
|
||||
<path
|
||||
style="fill:#cccccc;stroke:none"
|
||||
d="m 1725,582 v -53 h -90 v 53 z"
|
||||
id="path647" />
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
transform="translate(1443.48,458.89669)"
|
||||
id="g653">
|
||||
<text
|
||||
x="0"
|
||||
xml:space="preserve"
|
||||
y="5"
|
||||
style="stroke:none"
|
||||
id="text651">analog</text>
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;fill:#0072bd;stroke:#0072bd;stroke-width:0.6667;stroke-linecap:butt;stroke-linejoin:round;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
id="g657"
|
||||
transform="translate(-238.52001,-80.103308)">
|
||||
<line
|
||||
y2="539"
|
||||
style="fill:none"
|
||||
x1="1639"
|
||||
x2="1679"
|
||||
y1="539"
|
||||
id="line655" />
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
transform="translate(1443.48,475.39669)"
|
||||
id="g661">
|
||||
<text
|
||||
x="0"
|
||||
xml:space="preserve"
|
||||
y="5"
|
||||
style="stroke:none"
|
||||
id="text659">digital</text>
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;fill:#d95319;stroke:#d95319;stroke-width:0.6667;stroke-linecap:butt;stroke-linejoin:round;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
id="g665"
|
||||
transform="translate(-238.52001,-80.103308)">
|
||||
<line
|
||||
y2="555.5"
|
||||
style="fill:none"
|
||||
x1="1639"
|
||||
x2="1679"
|
||||
y1="555.5"
|
||||
id="line663" />
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
transform="translate(1443.48,491.89669)"
|
||||
id="g669">
|
||||
<text
|
||||
x="0"
|
||||
xml:space="preserve"
|
||||
y="5"
|
||||
style="stroke:none"
|
||||
id="text667">bilinear</text>
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;fill:#edb120;stroke:#edb120;stroke-width:0.6667;stroke-linecap:butt;stroke-linejoin:round;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
id="g675"
|
||||
transform="translate(-238.52001,-80.103308)">
|
||||
<line
|
||||
y2="572"
|
||||
style="fill:none"
|
||||
x1="1639"
|
||||
x2="1679"
|
||||
y1="572"
|
||||
id="line671" />
|
||||
<path
|
||||
d="m 1635,582 v -53 h 90 v 53 z"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#262626;stroke-linejoin:miter"
|
||||
id="path673" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(807.48099,15.146692)"
|
||||
|
||||
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Do not edit this file with editors other than draw.io -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="840px" height="286px" viewBox="-0.5 -0.5 840 286" content="<mxfile host="app.diagrams.net" modified="2024-02-03T22:03:26.442Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0" etag="Da41eLOf3AT8AQXfy7Nj" version="22.1.22"><diagram name="Page-1" id="CkdF-7UHB_tb0CRjxC_V">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</diagram></mxfile>"><defs><style type="text/css">@import url(https://fonts.googleapis.com/css2?family=Architects+Daughter:wght@400;500);
</style><style xmlns="http://www.w3.org/1999/xhtml" id="MJX-SVG-styles">
mjx-container[jax="SVG"] {
 direction: ltr;
}

mjx-container[jax="SVG"] > svg {
 overflow: visible;
 min-height: 1px;
 min-width: 1px;
}

mjx-container[jax="SVG"] > svg a {
 fill: blue;
 stroke: blue;
}

mjx-container[jax="SVG"][display="true"] {
 display: block;
 text-align: center;
 margin: 1em 0;
}

mjx-container[jax="SVG"][display="true"][width="full"] {
 display: flex;
}

mjx-container[jax="SVG"][justify="left"] {
 text-align: left;
}

mjx-container[jax="SVG"][justify="right"] {
 text-align: right;
}

g[data-mml-node="merror"] > g {
 fill: red;
 stroke: red;
}

g[data-mml-node="merror"] > rect[data-background] {
 fill: yellow;
 stroke: none;
}

g[data-mml-node="mtable"] > line[data-line], svg[data-table] > g > line[data-line] {
 stroke-width: 70px;
 fill: none;
}

g[data-mml-node="mtable"] > rect[data-frame], svg[data-table] > g > rect[data-frame] {
 stroke-width: 70px;
 fill: none;
}

g[data-mml-node="mtable"] > .mjx-dashed, svg[data-table] > g > .mjx-dashed {
 stroke-dasharray: 140;
}

g[data-mml-node="mtable"] > .mjx-dotted, svg[data-table] > g > .mjx-dotted {
 stroke-linecap: round;
 stroke-dasharray: 0,140;
}

g[data-mml-node="mtable"] > g > svg {
 overflow: visible;
}

[jax="SVG"] mjx-tool {
 display: inline-block;
 position: relative;
 width: 0;
 height: 0;
}

[jax="SVG"] mjx-tool > mjx-tip {
 position: absolute;
 top: 0;
 left: 0;
}

mjx-tool > mjx-tip {
 display: inline-block;
 padding: .2em;
 border: 1px solid #888;
 font-size: 70%;
 background-color: #F8F8F8;
 color: black;
 box-shadow: 2px 2px 5px #AAAAAA;
}

g[data-mml-node="maction"][data-toggle] {
 cursor: pLine truncated
|
||||
|
After Width: | Height: | Size: 82 KiB |
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Do not edit this file with editors other than draw.io -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="520px" height="366px" viewBox="-0.5 -0.5 520 366" content="<mxfile host="app.diagrams.net" modified="2024-02-03T22:16:47.416Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0" etag="gL6vpL3MQfkpyT-y1ADy" version="22.1.22"><diagram name="Page-1" id="CkdF-7UHB_tb0CRjxC_V">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</diagram></mxfile>"><defs><style type="text/css">@import url(https://fonts.googleapis.com/css2?family=Architects+Daughter:wght@400;500);
</style><style xmlns="http://www.w3.org/1999/xhtml" id="MJX-SVG-styles">
mjx-container[jax="SVG"] {
 direction: ltr;
}

mjx-container[jax="SVG"] > svg {
 overflow: visible;
 min-height: 1px;
 min-width: 1px;
}

mjx-container[jax="SVG"] > svg a {
 fill: blue;
 stroke: blue;
}

mjx-container[jax="SVG"][display="true"] {
 display: block;
 text-align: center;
 margin: 1em 0;
}

mjx-container[jax="SVG"][display="true"][width="full"] {
 display: flex;
}

mjx-container[jax="SVG"][justify="left"] {
 text-align: left;
}

mjx-container[jax="SVG"][justify="right"] {
 text-align: right;
}

g[data-mml-node="merror"] > g {
 fill: red;
 stroke: red;
}

g[data-mml-node="merror"] > rect[data-background] {
 fill: yellow;
 stroke: none;
}

g[data-mml-node="mtable"] > line[data-line], svg[data-table] > g > line[data-line] {
 stroke-width: 70px;
 fill: none;
}

g[data-mml-node="mtable"] > rect[data-frame], svg[data-table] > g > rect[data-frame] {
 stroke-width: 70px;
 fill: none;
}

g[data-mml-node="mtable"] > .mjx-dashed, svg[data-table] > g > .mjx-dashed {
 stroke-dasharray: 140;
}

g[data-mml-node="mtable"] > .mjx-dotted, svg[data-table] > g > .mjx-dotted {
 stroke-linecap: round;
 stroke-dasharray: 0,140;
}

g[data-mml-node="mtable"] > g > svg {
 overflow: visible;
}

[jax="SVG"] mjx-tool {
 display: inline-block;
 position: relative;
 width: 0;
 height: 0;
}

[jax="SVG"] mjx-tool > mjx-tip {
 position: absolute;
 top: 0;
 left: 0;
}

mjx-tool > mjx-tip {
 display: inline-block;
 padding: .2em;
 border: 1px solid #888;
 font-size: 70%;
 background-color: #F8F8F8;
 color: black;
 box-shadow: 2px 2px 5px #AAAAAA;
}

g[data-mml-node="maction"][data-toggle] {
 cursor: pLine truncated
|
||||
|
After Width: | Height: | Size: 79 KiB |
@@ -21,9 +21,9 @@
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.66684046"
|
||||
inkscape:cx="477.62549"
|
||||
inkscape:cy="398.14621"
|
||||
inkscape:zoom="1.3336809"
|
||||
inkscape:cx="1340.6505"
|
||||
inkscape:cy="283.80102"
|
||||
inkscape:window-width="1918"
|
||||
inkscape:window-height="1008"
|
||||
inkscape:window-x="953"
|
||||
@@ -1764,63 +1764,67 @@
|
||||
id="path2559" />
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:sRGB;fill:#ffffff;stroke:#ffffff;color-rendering:optimizeSpeed;image-rendering:optimizeSpeed;shape-rendering:crispEdges;text-rendering:optimizeSpeed"
|
||||
id="g2565"
|
||||
transform="translate(-238.52001,-80.103308)">
|
||||
<path
|
||||
style="stroke:none"
|
||||
d="m 1725,565 v -36 h -90 v 36 z"
|
||||
id="path2563" />
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
transform="translate(1443.48,458.75969)"
|
||||
id="g2569">
|
||||
<text
|
||||
x="0"
|
||||
xml:space="preserve"
|
||||
y="5"
|
||||
style="stroke:none"
|
||||
id="text2567">digital</text>
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;fill:#0072bd;stroke:#0072bd;stroke-width:0.6667;stroke-linecap:butt;stroke-linejoin:round;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
id="g2573"
|
||||
transform="translate(-238.52001,-80.103308)">
|
||||
<line
|
||||
y2="538.86298"
|
||||
style="fill:none"
|
||||
x1="1639"
|
||||
x2="1679"
|
||||
y1="538.86298"
|
||||
id="line2571" />
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
transform="translate(1443.48,475.03369)"
|
||||
id="g2577">
|
||||
<text
|
||||
x="0"
|
||||
xml:space="preserve"
|
||||
y="5"
|
||||
style="stroke:none"
|
||||
id="text2575">bilinear</text>
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;fill:#d95319;stroke:#d95319;stroke-width:0.6667;stroke-linecap:butt;stroke-linejoin:round;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
id="g2583"
|
||||
transform="translate(-238.52001,-80.103308)">
|
||||
<line
|
||||
y2="555.13702"
|
||||
style="fill:none"
|
||||
x1="1639"
|
||||
x2="1679"
|
||||
y1="555.13702"
|
||||
id="line2579" />
|
||||
<path
|
||||
d="m 1635,565 v -36 h 90 v 36 z"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#262626;stroke-linejoin:miter"
|
||||
id="path2581" />
|
||||
id="g1415"
|
||||
transform="translate(-5.2643303,-359.90618)">
|
||||
<g
|
||||
style="color-interpolation:sRGB;fill:#cccccc;stroke:#ffffff;color-rendering:optimizeSpeed;image-rendering:optimizeSpeed;shape-rendering:crispEdges;text-rendering:optimizeSpeed"
|
||||
id="g2565"
|
||||
transform="translate(-238.52001,-80.103308)">
|
||||
<path
|
||||
style="fill:#cccccc;stroke:none"
|
||||
d="m 1725,565 v -36 h -90 v 36 z"
|
||||
id="path2563" />
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
transform="translate(1443.48,458.75969)"
|
||||
id="g2569">
|
||||
<text
|
||||
x="0"
|
||||
xml:space="preserve"
|
||||
y="5"
|
||||
style="stroke:none"
|
||||
id="text2567">digital</text>
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;fill:#0072bd;stroke:#0072bd;stroke-width:0.6667;stroke-linecap:butt;stroke-linejoin:round;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
id="g2573"
|
||||
transform="translate(-238.52001,-80.103308)">
|
||||
<line
|
||||
y2="538.86298"
|
||||
style="fill:none"
|
||||
x1="1639"
|
||||
x2="1679"
|
||||
y1="538.86298"
|
||||
id="line2571" />
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
transform="translate(1443.48,475.03369)"
|
||||
id="g2577">
|
||||
<text
|
||||
x="0"
|
||||
xml:space="preserve"
|
||||
y="5"
|
||||
style="stroke:none"
|
||||
id="text2575">bilinear</text>
|
||||
</g>
|
||||
<g
|
||||
style="color-interpolation:linearRGB;fill:#d95319;stroke:#d95319;stroke-width:0.6667;stroke-linecap:butt;stroke-linejoin:round;color-rendering:optimizeQuality;image-rendering:optimizeQuality;text-rendering:geometricPrecision"
|
||||
id="g2583"
|
||||
transform="translate(-238.52001,-80.103308)">
|
||||
<line
|
||||
y2="555.13702"
|
||||
style="fill:none"
|
||||
x1="1639"
|
||||
x2="1679"
|
||||
y1="555.13702"
|
||||
id="line2579" />
|
||||
<path
|
||||
d="m 1635,565 v -36 h 90 v 36 z"
|
||||
style="fill:none;fill-rule:evenodd;stroke:#262626;stroke-linejoin:miter"
|
||||
id="path2581" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(807.48099,15.146692)"
|
||||
|
||||
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
Reference in new issue
Block a user