mirror of
https://github.com/lleene/hugo-site.git
synced 2025-07-12 20:38:31 +02:00
Compare commits
7 Commits
3ee0d4f499
...
dev
Author | SHA1 | Date | |
---|---|---|---|
699e8e3bd2
|
|||
b28ec4e15a
|
|||
daf108c6db
|
|||
652bb72cf7
|
|||
82e5b5f80a
|
|||
59d13d46d1
|
|||
ad5454fe5f
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -2,3 +2,6 @@
|
||||
# Generated files by hugo
|
||||
public/
|
||||
resources/_gen
|
||||
.hugo*
|
||||
.fig/
|
||||
__pycache__
|
||||
|
209
content/posts/2024/generator-functions.md
Normal file
209
content/posts/2024/generator-functions.md
Normal file
@ -0,0 +1,209 @@
|
||||
---
|
||||
title: "Polynomial Generator Functions"
|
||||
date: 2024-12-28T12:33:01+01:00
|
||||
draft: false
|
||||
toc: false
|
||||
images:
|
||||
math: true
|
||||
tags:
|
||||
- signal-processing
|
||||
- polynomials
|
||||
- digital-circuits
|
||||
- python
|
||||
---
|
||||
|
||||
Previously I went over some interesting techniques for
|
||||
[synthesizing sinusoids]({{< relref "../2022/synthesizing-sinusoids" >}}).
|
||||
There were some interesting points to take away from that discussion. First
|
||||
the CIC topology essentially calculated the Nᵗʰ moments or derivatives in a
|
||||
signal and essentially reconstructed a corresponding response using a polynomial
|
||||
with those moments or piece-wise derivatives.
|
||||
|
||||
This leads to a interesting question when synthesizing a time-limited
|
||||
waveform: What are the properties for using polynomial generator functions
|
||||
for waveform synthesis if we follow a simple cascade of integrators? The
|
||||
general structure for a cascade of integrators is shown below.
|
||||
|
||||
|
||||
``` goat
|
||||
|
||||
.-. .-. .-.
|
||||
c₃ -->| Σ +-----*----->| Σ +-----*----->| Σ +-----*----> N sequence Waveform
|
||||
'-' | '-' | '-' |
|
||||
^ v ^ v ^ v
|
||||
| .-----. | .-----. | .-----.
|
||||
| | z⁻¹ |<-- | | z⁻¹ |<-- | | z⁻¹ |<-- Initial Conditions
|
||||
| '--+--' | '--+--' | '--+--' 3ʳᵈ Order Polynomial
|
||||
| | | | | | c₂, c₁, c₀
|
||||
'-----' '-----' '-----'
|
||||
|
||||
```
|
||||
|
||||
The concept here is that the registers are initialized with coefficients
|
||||
derived from the desired polynomial response and sequenced for a fixed set of
|
||||
cycles before we trigger a reset. This is some what a simplified scenario but
|
||||
one could imagine the sequence can be used to modulate a RF carrier in order
|
||||
to transmit amplitude modulated symbols. As we will see the approach of using
|
||||
generator functions will allow us to synthesize high-precision waveforms with
|
||||
exact frequency characteristics with just a few predetermined coefficients.
|
||||
|
||||
At first glance, we can reason that many of the desirable properties that one would
|
||||
like to see here are similar to that of window functions (e.g. Hanning or
|
||||
Kaiser Windows)[^1]. This is because we are interested in both the time and
|
||||
frequency properties of the generated sequence simultaneously. The key
|
||||
difference here however is that we are constrained to polynomial dynamics.
|
||||
As a result the text-book approach for approximating a sum of weighted cosines
|
||||
may not be the best approach. Although taking a padé-approximant, using a
|
||||
rational polynomial basis, may be a good choice in some cases. More generally
|
||||
nesting or convolving our polynomial basis will result in higher oder
|
||||
polynomal. In order to realize a transcendental response we would need to
|
||||
revisit the feedback coefficient for each integrator.
|
||||
|
||||
## Determining Initial Conditions
|
||||
|
||||
There are a few ways to go about defining a polynomial \\(P(x)\\). Either in terms of
|
||||
the roots or in terms of the characteristic equation. Both are useful,
|
||||
especially when we consider the derivative components at the extents of our
|
||||
synthesized waveform.
|
||||
|
||||
$$ P(x) = (x-p_1) (x-p_2) (x-p_3) ... (x-p_n) $$
|
||||
|
||||
$$ P(x) = a_n x^n + ... + a_2 x^2 + a_1 x + a_0 $$
|
||||
|
||||
We can back calculate the corresponding initial conditions for our cascade
|
||||
of integrators by considering the super-position of each component \\(a_n\\)
|
||||
seperately. Lets denote our initial conditions as \\( c_n + ... + c_2 + c_1 + c_0 \\)
|
||||
for our Nᵗʰ order polynomial. As shown in the diagram above the coefficient
|
||||
\\(c_n\\) is directly accumulated on the left most integrator. It should be obvious
|
||||
that the first two coefficients: \\(a_1\\) & \\(a_0\\) from our characteristic equation
|
||||
directly related correspond to \\(c_1\\) & \\(c_0\\) respectively. Now we can infer the
|
||||
mapping by recursion and equating the derivative components. For example \\(P(x) = a_2 x^2\\): the
|
||||
contribution from \\(a_2\\) on the 2nd order derivative is calculated as taking
|
||||
the 2nd derivative of \\(P(x)\\) and evaluating its value with x=0 which gives
|
||||
us \\(c_2 = 2 * a_2\\). Now equating the 1st derivative from \\(a_2\\)
|
||||
similarly gives \\(c_1 = a_2\\) and finally \\(c_0 = 0\\). If there were lower
|
||||
order terms, the contribution from \\(a_1\\) for example would be calculated
|
||||
independently and added together.
|
||||
|
||||
This was a simpler example but one can reason that if the mapping for a particular \\( a_n \\) is
|
||||
\\( m(n,i), ... , m(n,1), m(n,0) \\) such that for all \\( i \\) the initial conditions are
|
||||
\\(c_n = \sum^n_{i=0} m(n,i) * a_i\\). The final value for the initial condition \\(c_n\\) is then
|
||||
sum of all mapping terms from each \\(a_n\\). Then for some given mapping of a Nᵗʰ order polynomial
|
||||
we can add one more integration stage to the far right integrating the output
|
||||
to realize a N+1ᵗʰ order polynomial. This is equivalent to multiplying the
|
||||
response with \\( x + 1 \\). Now it should be clear that when we equate the
|
||||
derivative terms the N+1ᵗʰ order terms can be derived from the Nᵗʰ order terms
|
||||
simply by adding the appropriate contributions after the aforementioned
|
||||
multiplication. That is \\( m(n+1,i) = m(n,i) + m(n,i-1) \\) where \\( m(n+1,i) \\)
|
||||
are the mapping terms for the N+1ᵗʰ order polynomial.
|
||||
Interestingly the mapping here generates a set of basis coefficients related to
|
||||
the sterling-numbers of the second kind. More specifically the
|
||||
[A019538](https://oeis.org/A019538) sequence. Using python and numpy as np
|
||||
we can write the following recursive function:
|
||||
|
||||
``` python
|
||||
def mapping_coefficients(order: int) -> np.array:
|
||||
"""Determine nth coefficient scaling factor for initial condition."""
|
||||
assert order >= 0
|
||||
# Start with coefficient from n-1
|
||||
if order == 0:
|
||||
return np.array([1])
|
||||
elif order == 1:
|
||||
return np.array([1, 0])
|
||||
else:
|
||||
base = mapping_coefficients(order - 1)
|
||||
coef = np.zeros((order + 1,))
|
||||
for elem in range(order - 1):
|
||||
# for each element calculate new coefficient
|
||||
# Based on expanding d/dx * P(x) * (x+1)
|
||||
coef[elem + 1] = (order - elem - 1) * (base[elem] + base[elem + 1])
|
||||
# m_n will always be n!
|
||||
coef[0] = base[0] * order
|
||||
return coef
|
||||
|
||||
```
|
||||
|
||||
This function will derive the \\( m(n,i) \\) mapping values based on our recursive
|
||||
derivation above. In order to then determine the initial conditions we similarly
|
||||
iterate over the characteristic coefficients \\( a_n \\) and accumulate all
|
||||
contributions to resolve the initial conditions \\( c_n \\).
|
||||
|
||||
``` python
|
||||
def initial_condition(self, poly_coef: np.array) -> np.array:
|
||||
"""Set register values based on polynomial coefficients."""
|
||||
init_coef = np.zeros((poly_coef.size,))
|
||||
for index, elem in enumerate(poly_coef):
|
||||
init_coef[index:] += elem * mapping_coefficients(poly_coef.size - index - 1)
|
||||
return init_coef
|
||||
|
||||
```
|
||||
|
||||
It is worthwhile to point out that not all polynomial functions can be realized
|
||||
with this method. While not all zeros in \\( P(x) \\) have to be real, we do
|
||||
require the characteristic coefficients \\( a_n \\) and thereby \\( c_n \\) to
|
||||
to be real numbers.
|
||||
|
||||
## Frequency Response
|
||||
|
||||
Here we will consider a simplified scenario to exemplify the frequency \
|
||||
characteristics for generated polynomials.
|
||||
Specifically polynomials of even orders with real roots such
|
||||
that we can decompose the polynomial \\(P(x)\\) as a product of several
|
||||
elements in the form of \\( (x+p_1)(x+p_2) \\). We can show that the
|
||||
fourier-transform of of this element is in the form of \\( sinc(d ω)^2 \\)
|
||||
where \\( d = (p_1 - p_2)/2 \\) such that we can derive relations for the
|
||||
polynomial \\( P(x) = d^2-x^2 \\) and scale them accordingly.
|
||||
|
||||
$$
|
||||
\hat{P}(x) = \int^{d/2}_{d/2} (d^2-x^2) cos(k x) dx
|
||||
\quad = \quad
|
||||
\frac{8 \sin{ (d k) }}{k^3} - \frac{8 d \cos{ (d k ) }}{k^2}
|
||||
$$
|
||||
|
||||
Here we have an example where \\(d=1\\) and we observe the expected
|
||||
characteristic functions in both time and frequency space.
|
||||
|
||||
{{< figure src="/images/posts/generator/P2.svg" >}}
|
||||
{{< figure src="/images/posts/generator/F2.svg" >}}
|
||||
|
||||
We can numerically solve for some of the filter properties of interest and
|
||||
compare to other simple windows. There is little suprise in the table below
|
||||
as the roll-off and rejection is closely related to the 3dB bandwidth.
|
||||
Here we see that the frequency response of P(x) is somewhere inbetween a
|
||||
rectangular window and that of the raise-cosine or Hann window.
|
||||
|
||||
| Property | 2nd Order Poly len(2d) | Rectangle len(2d) | Hann len(2d) |
|
||||
|---------------|------------------------|-----------------------|-----------------------|
|
||||
| DC Value | \\(\frac{2d^3}{3}\\) | \\(2d^2\\) | \\(2d^2\\) |
|
||||
| 3dB Bandwidth | \\(\sim 2.498/d\\) | \\(\sim 1.895/d\\) | \\(\sim 3.168/d\\) |
|
||||
| 1st Null | \\(\sim 4.5/d\\) | \\(\frac{\pi}{d}\\) | \\(\frac{2\pi}{d}\\) |
|
||||
| Roll Off | 40 dB / decade | 20 dB / decade | 60 dB / decade |
|
||||
| First Sidelobe| -21 dB | -13 dB | -31 dB |
|
||||
|
||||
For completeness we also include the analytical expression for the Hann window
|
||||
frourier transform.
|
||||
|
||||
$$
|
||||
\hat{H}(x) = \int^{d/2}_{d/2} (1+cos(\frac{2\pi x}{d})) cos(k x) dx
|
||||
\quad = \quad
|
||||
\frac{2 \pi^2 sin(d k)}{k(d^2 k^2-\pi^2)}
|
||||
$$
|
||||
|
||||
Because we have a clean analytical representation of the frequency response
|
||||
it is simple to manipulate our coefficients to get a more desirable response.
|
||||
The second order function is limited to a three term composition:
|
||||
\\(sinc + sinc/k^2 + cos/k^2\\). Adding assymetry or using odd-order polynomials
|
||||
can resolve band-pass characteristics which are also interesting.
|
||||
|
||||
In the example below we have chosen to place poles at \\(\pm d\\) and
|
||||
\\(\pm 1.2 d\\) in order to minimize the first sidelobe level using a
|
||||
8ᵗʰ order polynomial.
|
||||
|
||||
{{< figure src="/images/posts/generator/P4.svg" title="" width="500" >}}
|
||||
{{< figure src="/images/posts/generator/F4.svg" title="" width="500" >}}
|
||||
|
||||
## References:
|
||||
|
||||
[^1]: A. Nuttall, ''Some windows with very good sidelobe behavior,'' IEEE
|
||||
Trans. Acoust., Speech, Signal Process. , vol. 29, no. 1, pp. 84-91, February
|
||||
1981 [Online]: http://dx.doi.org/10.1109/TASSP.1981.1163506.
|
315
content/posts/2025/analog-verification.md
Normal file
315
content/posts/2025/analog-verification.md
Normal file
@ -0,0 +1,315 @@
|
||||
---
|
||||
title: "Analogue Verification"
|
||||
date: 2025-02-03T09:52:41+01:00
|
||||
draft: false
|
||||
toc: false
|
||||
images:
|
||||
tags:
|
||||
- circuit-design
|
||||
- methodology
|
||||
- verification
|
||||
- analog-circuits
|
||||
---
|
||||
|
||||
This page briefly discusses aspects for planning and structuring analogue
|
||||
verification and some of the inherent issues related with coverage. Most of
|
||||
the examples will reference Cadence design tools which is common place but
|
||||
alternative with similar flavors exist. This is somewhat specific to analogue
|
||||
simulation that validates design from a functional point of view. This ties in
|
||||
with the construction of the test bench that will probe various aspects of the
|
||||
design to confirm that is operates as expected.
|
||||
|
||||
## Design Sign-Off
|
||||
|
||||
Sign-off for an analogue design could can imply a multitude of things depending
|
||||
its dependency. An exhaustive list of delivery items is shown below. Many of
|
||||
these are only relevant at certain points in the hierarchy but standardizing
|
||||
the flow for creating each item is essential for systematic design. This
|
||||
should allow you develop a check-list automated or manual for certain aspects
|
||||
in each deliverable that ensure quality.
|
||||
|
||||
- Specification Table
|
||||
- Schematic
|
||||
- Spice Netlist ✔
|
||||
- Verilog Netlist ✔
|
||||
- Layout
|
||||
- GDSII ✔
|
||||
- DRC Report ✔
|
||||
- ERC Report ✔
|
||||
- LVS Report ✔
|
||||
- LEF Abstract ✔
|
||||
- Testbench
|
||||
- Design Documentation
|
||||
- Verification Report
|
||||
- Design Review Checklist
|
||||
- Digital Timing Model
|
||||
- Test/Trimming Plan
|
||||
|
||||
Fortunately many of these items (✔) do not necessarily require manual intervention
|
||||
and can for the most part be part of a automated flow that sanity-checks
|
||||
different aspects of the design.
|
||||
|
||||
## Design Flow Automation
|
||||
|
||||
Several components in the industry analogue design flow are illustrated below
|
||||
with their relative association. The verification process only touches a small
|
||||
part in the overall picture but provides key indicators for many other aspects
|
||||
of the design flow such as project planning, lab work, and software development.
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
external@{ shape: notch-rect, label: "3rd Party IP" }
|
||||
requirements@{ shape: notch-rect, label: "Design\nRequirements" }
|
||||
design@{ shape: cyl, label: "Cadence\nDesign Database" }
|
||||
reports@{ shape: docs, label: "DRC/ERC/LVS Reports\nCircuit Netlists" }
|
||||
abstracts@{ shape: cyl, label: "GDSII\nLEF/DEF Abstracts" }
|
||||
simulation@{ shape: docs, label: "JSON Database\nVerification Reports\nCircuit Documentation" }
|
||||
labwork@{ shape: docs, label: "Measurement Reports\nRoot-Cause Analysis\n" }
|
||||
webdocs@{ shape: procs, label: "**Documentation Portal**\nUsage Guide\nDesign Theory\netc."}
|
||||
spotfire@{ shape: cyl, label: "Characterization Data"}
|
||||
external ==> design
|
||||
requirements ==> design
|
||||
design == NVAFLOW ==> reports
|
||||
design == NVAFLOW ==> abstracts
|
||||
design == RDBDOC ==> simulation
|
||||
simulation ==> webdocs
|
||||
labwork ==> webdocs
|
||||
```
|
||||
|
||||
Here I have highlighted two integration tools that automate and assist in
|
||||
generating various aspects of the design sign-off. Some of which are not user
|
||||
facing such as GDSII and LVS results which are handled by NVAFLOW and is
|
||||
closely tied to the process-development-kit (PDK). The other tool is RDBDOC
|
||||
which assists parsing the cadence database in order to generate and template
|
||||
reports.
|
||||
|
||||
The point here being is that when we sign-off at top-level it is not unusual
|
||||
for a large number of designs to be incorporated. Each of which should be
|
||||
checked while it is frozen for external delivery. Such a tool can rigorously
|
||||
generate all outputs systematically while also performing a series of sanity
|
||||
checks to grantee design quality.
|
||||
|
||||
## Verification Plan
|
||||
|
||||
Planning analogue verification in a structured manner is challenging primarily
|
||||
because one must often carefully consider what is important when simulating a
|
||||
design. It is very easy to exhaustively simulate without actually gaining
|
||||
confidence in the design.
|
||||
|
||||
Typically one would setup a test bench that checks for both specific
|
||||
performance metrics such as phase-margin in a amplifier and generic performance
|
||||
metric such as off-state leakage. Here is it good practice to have a base-line
|
||||
of checks reflecting best-practices. A few examples of design-agnostic checks:
|
||||
|
||||
- Supply sensitivity
|
||||
- Bias sensitivity
|
||||
- Nominal current
|
||||
- Leakage current
|
||||
- Peak-to-Peak current
|
||||
- Off-state / grounded controls
|
||||
- Assertions for illegal states
|
||||
- Distortion / Linearity
|
||||
- Calibration/Configuration edge cases
|
||||
- Debug coverage
|
||||
- Output/Input impedance
|
||||
|
||||
It is important to keep in mind that these metrics are a baseline for evaluating
|
||||
performance at a distance. One can obviously run a simulation an study the
|
||||
transient waveform in detail but it is usually not feasible to do this over 500+
|
||||
simulation points. This is why it is important to derive metrics for performance
|
||||
that accurately reflect underlying characteristics with one or several numbers
|
||||
that can be judged over corners and montecarlo.
|
||||
|
||||
Now as example a typical verification plan is presented that varies
|
||||
process parameters in order to expose variations and weakness in the design
|
||||
such that we have a good expectation of what post-silicon performance
|
||||
characteristics will look like. This plan is divided into three steps with
|
||||
increasing simulation effort.
|
||||
|
||||
``` markdown
|
||||
This is a baseline where the designer must recognize the best way to stress
|
||||
aspects of the design and adjust the plan accordingly.
|
||||
```
|
||||
|
||||
### Simulation Corners
|
||||
|
||||
Generally there are three aspect to simulation corner definition:
|
||||
Front-End-Of-Line (FEOL), Back-End-Of-Line (BEOL), Voltage+Temperature. These
|
||||
parameters are very closely tied to the process and qualification standard the
|
||||
circuit aims to achieve. Naturally the more demanding our qualification the harder
|
||||
it is to guarantee performance over coreners. For example we can target a
|
||||
temperature range of 0° 70°, -40° 85°, -40° 125° depending if we consider
|
||||
consumer, industrial, or grade-1 automotive qualification in the JEDEC standard.
|
||||
|
||||
We distinguish between FEOL and BEOL because these are two different sets of
|
||||
process parameters that are affected during fabrication that do not correlate
|
||||
with one another. FEOL generally relates to device characteristics such as
|
||||
threshold voltage, off-leakage, transconductance, and current drive while BEOL
|
||||
relates to interconnect and Metal-Oxide-Metal passives such as capacitors and
|
||||
inductors. A process will specify bias for FEOL and BEOL while the designer
|
||||
will specify a bias for temperature and voltage. Together a collection of
|
||||
parameter biases are grouped as corners and used to simulate circuits under
|
||||
various post-silicon conditions.
|
||||
|
||||
FEOL corners will come in a variety of flavors for different purposes and
|
||||
should be studied carefully. Analog circuits are generally not that interested
|
||||
in worst-case leakage corners but a worst-case noise corner maybe available.
|
||||
Analogue is generally interested in FF and SS extremities, sometimes called
|
||||
total corners not to be confused with the global corners FFG and SSG, to if
|
||||
trim ranges and bias ranges are sufficient to meet performance requirements.
|
||||
|
||||
Separately we should study BEOL corners. This is usually somewhat easier as the
|
||||
extremities simply best and worst case capacitance as CWORST/CBEST or best and
|
||||
worst interconnect time-constants as RCBEST/RCWORST. The designer should know
|
||||
which set of extremes is worst. Typically low frequency analogue will suffer
|
||||
most from CWORST/CBEST variation. High freuquency analogue and custom digital
|
||||
may opt to use the RCWORST/RCBEST corners.
|
||||
|
||||
Verification can be planned and separated into three levels of confidence,
|
||||
each with increasing simulation time. It is always advised to select corners
|
||||
to find the best and worst case process conditions for our circuit.
|
||||
|
||||
### Level 1: Corner Simulations
|
||||
|
||||
Level 1 focuses on total corner simulation without montecarlo. The purpose here
|
||||
is to demonstrate a brief overview of passing performance with DFM checks such
|
||||
as EMIR and Aging. There maybe some back-and-forth with the layout and design
|
||||
at this point as verification results are checked.
|
||||
|
||||
| **VT Corner** | **High Voltage** | **Nom. Voltage** | **Low Voltage** |
|
||||
|---------------|------------------|------------------|-----------------|
|
||||
| **High Temp** | | |FF/SS + CBEST/CWORST|
|
||||
| **Nom Temp** | |TT + CBEST/NOM/CWORST| |
|
||||
| **Low Temp** |FF/SS + CBEST/CWORST| | |
|
||||
|
||||
Total Simulations: 11 + EMIR + Aging
|
||||
|
||||
With these preliminary set of results one can pass some judgement over
|
||||
circuit performance during design review. By including the DFM simulations
|
||||
here (i.e. EMIR and Aging) the layout will be relatively close to the final
|
||||
result.
|
||||
|
||||
### Level 2: Montecarlo Simulations
|
||||
|
||||
Level 2 focuses on presenting a typical distribution of performance metrics
|
||||
using montecarlo methods. Here we must make an important choice of which mc
|
||||
corner is used. Generally foundries will recommend to use the global corners:
|
||||
FFG, SSG, FSG, SFG, and only apply local mismatch. This will yield good
|
||||
statistical distributions in our testbench metrics and allow use to make
|
||||
gaussian estimations to limit the number of simulations runs of the same
|
||||
confidence interval opposed to a unknown distribution. A alternative here is
|
||||
to use the typical corner and enable both local and global process variation.
|
||||
|
||||
| **VT Corner** | **High Voltage** | **Nom. Voltage** | **Low Voltage** |
|
||||
|---------------|------------------|------------------|-----------------|
|
||||
| **High Temp** | | |FFG/SSG+CBEST/CWORST|
|
||||
| **Nom Temp** | |TT+CNOM| |
|
||||
| **Low Temp** |FFG/SSG+CBEST/CWORST| | |
|
||||
|
||||
Total Simulations: 225 with 25 mc runs per corner
|
||||
|
||||
### Level 3: Completion
|
||||
|
||||
Level 3 is intended to be the target set of corners used to validate a design
|
||||
across corners using montecarlo methods. This is an exhaustive simulation
|
||||
job and doesn't quite cover all possible scenarios when combining FEOL+BEOL+VT.
|
||||
Generally however it will a good representation of post-silicon results with a
|
||||
high quality testbench.
|
||||
|
||||
| **VT Corner** | **High Voltage** | **Nom. Voltage** | **Low Voltage** |
|
||||
|---------------|------------------|------------------|-----------------|
|
||||
| **High Temp** |FFG/SSG+CBEST/CWORST| |FFG/SSG+CBEST/CWORST|
|
||||
| **Nom Temp** | |FFG/TT/FSG/SFG/SSG+CBEST/CNOM/CWORST| |
|
||||
| **Low Temp** |FFG/SSG+CBEST/CWORST| |FFG/SSG+CBEST/CWORST|
|
||||
|
||||
Total Simulations: 775 + EMIR + Aging with 25 mc runs per corner
|
||||
|
||||
This set of results ultimately feeds into the test program for the device.
|
||||
The distributions can be used to set limits and measurement inferences
|
||||
when binning and sorting fabricated devices.
|
||||
|
||||
## Verification Report
|
||||
|
||||
Reporting on our verification results should provide a overview on what the
|
||||
circuit targets where, where the senstivities lie, and how non-idialities
|
||||
manifest in circuit behavior. Lets discuss a general report structure and
|
||||
provide an example.
|
||||
|
||||
- Design Files
|
||||
- Simulator Setup
|
||||
- Target Specifications
|
||||
- Simulation Parameters
|
||||
- Simulation Notes
|
||||
- Results and Statistical Summary
|
||||
- Distributions
|
||||
- EMIR/Aging Results
|
||||
|
||||
With a ADE result database from Cadence we can export the data using skill
|
||||
and generate a generic database file that can be parsed and post-processed by
|
||||
python. This allows us to make a clean report that need minimal user input
|
||||
while providing a good overview on simulation results external to the Cadence
|
||||
environment. A cut-down version of such a report is detailed below. Notice
|
||||
the designer should still contribute certain annotations to the report such
|
||||
that it is self explanitory.
|
||||
|
||||
> # Verification Summary: MYLIB divider_tb
|
||||
>
|
||||
> lieuwel 2018-01-01
|
||||
>
|
||||
> ## Test Description
|
||||
>
|
||||
> This is a preliminary verification report for the divider circuit
|
||||
> which is a 8-bit reconfigurable clock divider operating on the RF clock
|
||||
> after the 4x clock divider from the counter module. This test bench
|
||||
> is intended to verify correct operation for all divider settings.
|
||||
>
|
||||
> ## Test: Interactive.2:MYLIB_divider_tb_1
|
||||
>
|
||||
> Simulation started on 1st Jan 2018 and ran for 2035 minutes.
|
||||
> The yield for this test is 100% to 100% (1675 of 1675 points passed)
|
||||
> Verification state: 1/3
|
||||
>
|
||||
> ### Design Setup
|
||||
>
|
||||
> Library Name: MYLIB
|
||||
> Cell Name: divider_tb
|
||||
> View Name: schematic
|
||||
> Simulator: spectre
|
||||
>
|
||||
> ### Parameters
|
||||
>
|
||||
> |Name|Expression|Values|
|
||||
> | :---: | :---: | :---: |
|
||||
> |clk_sr|15p|1.5e-11|
|
||||
> |clk_pw|clk_pd/2|3.333333e-10|
|
||||
> |clk_pd|4/6G|6.666667e-10|
|
||||
> |div|0|0:255|
|
||||
> |vdd|1.1|1.045, 1.1, 1.155|
|
||||
>
|
||||
> ### Specifications
|
||||
>
|
||||
> |Output|Specification|Pass/Fail|
|
||||
> | :---: | :---: | :---: |
|
||||
> |EnergyPerCycle|< 1p|Pass|
|
||||
> |div_err|-100m - 100m|Pass|
|
||||
> |div_meas|-|Info|
|
||||
> |dly_out|< 100p|Pass|
|
||||
> |fin|1.5G ±1%|Pass|
|
||||
>
|
||||
> ### Output: EnergyPerCycle
|
||||
>
|
||||
> Sample presents a mixed distribution. Using < 1p as specification requirement.
|
||||
>
|
||||
> |Corner|P0.16|P0.5|P0.84|Pass/Fail|
|
||||
> | :---: | :---: | :---: | :---: | :---: |
|
||||
> |C_BEST_HTHV|193f|193f, 193f|193f, 193f|Pass|
|
||||
> |C_BEST_HTLV|168f|168f, 168f|168f, 168f|Pass|
|
||||
>
|
||||
> {{< figure src="/images/posts/verification/energypercycle-c-best-hthv.png" title="C_BEST_HTHV" width="250" >}}
|
||||
> {{< figure src="/images/posts/verification/energypercycle-c-best-htlv.png" title="C_BEST_HTLV" width="250" >}}
|
||||
>
|
||||
> ## Summary
|
||||
>
|
||||
> Tests pass with good margin
|
||||
>
|
||||
> EMIR - pass (pre-TO)
|
30
content/posts/2025/dynamic-search.md
Normal file
30
content/posts/2025/dynamic-search.md
Normal file
@ -0,0 +1,30 @@
|
||||
---
|
||||
title: "Single-Bit Heuristics"
|
||||
date: 2025-01-13T12:31:02+01:00
|
||||
draft: true
|
||||
toc: false
|
||||
images:
|
||||
tags:
|
||||
- signal-processing
|
||||
- digital-circuits
|
||||
- python
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
``` goat
|
||||
|
||||
.
|
||||
.-. |\ .-.
|
||||
Vin -->| Σ +--+⨍+------*------->| Σ +--> Digitized Sequence
|
||||
'-' |/ | '-'
|
||||
^- ' v ^
|
||||
| .--------. |
|
||||
| | H(z) | |
|
||||
| '---+----' |
|
||||
| | |
|
||||
'------------*---------'
|
||||
|
||||
```
|
68
content/posts/2025/mixed-signal-simulation.md
Normal file
68
content/posts/2025/mixed-signal-simulation.md
Normal file
@ -0,0 +1,68 @@
|
||||
---
|
||||
title: "Mixed Signal Circuits & Digital Simulation"
|
||||
date: 2025-02-04T10:46:19+01:00
|
||||
draft: false
|
||||
toc: false
|
||||
images:
|
||||
tags:
|
||||
- circuit-design
|
||||
- methodology
|
||||
- verification
|
||||
- mixed-signal
|
||||
---
|
||||
|
||||
These days it is not usual even for "analogue" chips that we perform digital
|
||||
integration at the top-level. This is mainly because the digital integration
|
||||
flow is very well versed in 3rd-party IP integration and providing confidence
|
||||
in the result assuming well defined constraints. Here I will outline a various
|
||||
aspects for co-simulation of hard-macro analogue sub-modules in the digital
|
||||
design flow. Note that in this context full-custom-digital is often also viewed
|
||||
as analogue as from a integration point-of-view they are effectively equivalent.
|
||||
|
||||
## Design Views
|
||||
|
||||
As we progress through the analogue design flow, progressively more of the digital
|
||||
design views can be delivered at each stage. As shown here, first
|
||||
a functional definition can provided with a behavioral model. This can be in
|
||||
the form of a verilog netlist where ports are well defined and the underlying
|
||||
functionality is described using HDL statements. This requires us to discretize
|
||||
aspects of the design and choose what functionality is implemented
|
||||
as the end-goal here is digital integration testing.
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A2(Schematic)
|
||||
A3(Layout)
|
||||
A4(Simulation)
|
||||
A2 --> A3
|
||||
A3 --> A4
|
||||
D1(Verilog Netlist)
|
||||
D2(Abstract View)
|
||||
D3(Timing View)
|
||||
A2 --> D1
|
||||
A3 --> D2
|
||||
A4 --> D3
|
||||
style D1 fill:none, stroke:none
|
||||
style D2 fill:none, stroke:none
|
||||
style D3 fill:none, stroke:none
|
||||
```
|
||||
|
||||
Subsequently an abstract is generated based on the layout. Naturally
|
||||
this is used for floor-planning and place & route tools that realize a physical
|
||||
design. There are some minor nuances here such as pin definition and keep-out
|
||||
areas that will constrain the digital tools. However the key checks are simple:
|
||||
are all pins defined and accessible, and is there sufficient clearance to the
|
||||
boundary to avoid metal spacing violations.
|
||||
|
||||
Finally a timing view can be generated depending on how the underlying circuit
|
||||
is constructed. This process is slightly different when looking at a
|
||||
circuit where we interface directly with custom digital or transistor level
|
||||
elements. It is advisable to avoid this specialized part of the flow because
|
||||
it will require us to resimulate and perform our own characterization of the
|
||||
timing data using Cadence Liberate. If the digital interface is limited to
|
||||
standard-cell we can rely on standard-library defined timing-characterization
|
||||
and the associated digital corners that are used with the rest of the design.
|
||||
|
||||
## Innovus Flow
|
||||
|
||||
## Liberate Flow
|
22
content/posts/2025/source/analysis.ipynb
Normal file
22
content/posts/2025/source/analysis.ipynb
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"vscode": {
|
||||
"languageId": "plaintext"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
153
content/posts/2025/source/models.py
Normal file
153
content/posts/2025/source/models.py
Normal file
@ -0,0 +1,153 @@
|
||||
from sympy import Symbol, log, sin
|
||||
from scipy import constants
|
||||
from quantiphy import Quantity
|
||||
import control as ct
|
||||
|
||||
eval_constants = {
|
||||
"k": constants.k, # Boltzmann contant
|
||||
"T": constants.convert_temperature(25.0, "Celsius", "Kelvin"),
|
||||
"q": constants.e, # Elementary charge
|
||||
}
|
||||
|
||||
_pi = constants.pi
|
||||
_kT = constants.Boltzmann * constants.convert_temperature(25.0, "Celsius", "Kelvin")
|
||||
|
||||
|
||||
class Crystal:
|
||||
def __init__(self, frequency: float = 4.8e7, noise_floor_dBc: float = -160):
|
||||
self.frequency = frequency
|
||||
self.noise_floor_dBc = noise_floor_dBc
|
||||
## TODO low-frequency jitter offset contribution
|
||||
|
||||
def xtal_jitter(self, bandwidth, ref_frequency):
|
||||
"""XTAL jitter estimate over bandwidth"""
|
||||
return Quantity(
|
||||
(
|
||||
2
|
||||
* 10 ** (self.noise_floor_dBc / 10)
|
||||
* bandwidth
|
||||
/ (ref_frequency * 2 * _pi) ** 2
|
||||
)
|
||||
** 0.5,
|
||||
units="s_rms",
|
||||
)
|
||||
|
||||
|
||||
class Oscillator:
|
||||
"""
|
||||
VCO Phase-Noise Model of LC Oscillator
|
||||
|
||||
Bandwidth upper limit is set by the refence clock
|
||||
Back off by 10x in sampled systems for stability
|
||||
More accurately take xtal into account and equate jitter
|
||||
|
||||
Reference B. Razavi, "Jitter-Power Trade-Offs in PLLs,"
|
||||
in IEEE Transactions on Circuits and Systems I: Regular Papers,
|
||||
vol. 68, no. 4, pp. 1381-1387, April 2021, doi: 10.1109/TCSI.2021.3057580.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
f_center: float = 5e9,
|
||||
vout_max: float = 1.0,
|
||||
ibias: float = 5.0e-3,
|
||||
q_factor: float = 10,
|
||||
eta: float = 2.4, # noise excess factor (1+gamma)
|
||||
):
|
||||
self.R = _pi * vout_max / ibias / 2
|
||||
self.f_center = f_center
|
||||
self.vout_max = vout_max
|
||||
self.q_factor = q_factor
|
||||
self.ibias = ibias
|
||||
self.eta = eta
|
||||
|
||||
@property
|
||||
def vco_alpha(self):
|
||||
"""Oscillator Noise Figure alpha"""
|
||||
return (
|
||||
_kT / (self.q_factor**2) * self.eta * (_pi / self.ibias) ** 2 / self.R / 8
|
||||
)
|
||||
|
||||
def pll_phase_noise(self, pll_bandwidth):
|
||||
"""Estimate on a LC oscillator phase-noise as alpha/f**2"""
|
||||
return self.vco_alpha * (self.f_center / pll_bandwidth) ** 2
|
||||
|
||||
def pll_jitter(self, pll_bandwidth, ref_frequency):
|
||||
"""PLL jitter estimate due to VCO"""
|
||||
return Quantity(
|
||||
(
|
||||
4
|
||||
* self.pll_phase_noise(pll_bandwidth)
|
||||
* pll_bandwidth
|
||||
/ (ref_frequency * 2 * _pi) ** 2
|
||||
)
|
||||
** 0.5,
|
||||
units="s_rms",
|
||||
)
|
||||
|
||||
def opt_bandwidth(self, ref_xtal: Crystal):
|
||||
"""Optimal PLL bandwidth for matching reference noise."""
|
||||
f_ratio = self.f_center / ref_xtal.frequency
|
||||
eff_ref_noise = 2 * 10 ** (ref_xtal.noise_floor_dBc / 10) * f_ratio**2
|
||||
return Quantity(
|
||||
(4 * self.vco_alpha * self.f_center**2 / _pi / eff_ref_noise) ** 0.5,
|
||||
units="Hz",
|
||||
)
|
||||
|
||||
def jitter_tol(self, adc_tol_db: float, adc_resolution: float, adc_clock: float):
|
||||
"""Jitter tolerance calculation for m-dB penalty in ADC performance"""
|
||||
return Quantity(
|
||||
(
|
||||
(10 ** (adc_tol_db / 10) - 1)
|
||||
/ (3 * _pi**2 * adc_clock**2 * 2 ** (2 * adc_resolution - 1))
|
||||
)
|
||||
** 0.5,
|
||||
units="s_rms",
|
||||
)
|
||||
|
||||
|
||||
# LC Tank Parameter Selection
|
||||
# E. Hegazi, H. Sjoland and A. A. Abidi,
|
||||
# "A filtering technique to lower LC oscillator phase noise,"
|
||||
# in IEEE Journal of Solid-State Circuits,
|
||||
# vol. 36, no. 12, pp. 1921-1930, Dec. 2001, doi: 10.1109/4.972142
|
||||
# A. Mazzanti and P. Andreani,
|
||||
# "Class-C Harmonic CMOS VCOs, With a General Result on Phase Noise,"
|
||||
# in IEEE Journal of Solid-State Circuits,
|
||||
# vol. 43, no. 12, pp. 2716-2729, Dec. 2008,
|
||||
|
||||
|
||||
class Divider:
|
||||
# Error-Feedback Topology
|
||||
# https://www.youtube.com/watch?v=t1TY-D95CY8&t=4373s
|
||||
|
||||
ω = Symbol("ω")
|
||||
|
||||
def __init__(self, order: int = 2, fb_int:int = 100, fb_frac:float = 0.1337):
|
||||
self.fb_int = fb_int
|
||||
self.fb_frac = fb_frac
|
||||
self.order = order
|
||||
|
||||
@property
|
||||
def noise_function_approx(self):
|
||||
return (_pi / 3 / self.ω) ** self.order
|
||||
|
||||
@property
|
||||
def noise_function_exact(self):
|
||||
return (2 * sin(self.ω / 2)) ** self.order
|
||||
|
||||
@property
|
||||
def psd_out(self):
|
||||
return self.noise_function_exact**2 / 12
|
||||
|
||||
@property
|
||||
def modulator_c2p(self):
|
||||
return ct.tf([0,1],[1,-1],dt=True)*(2*_pi/(self.fb_int+self.fb_frac))
|
||||
|
||||
@property
|
||||
def pll_ntf(self):
|
||||
pass
|
||||
|
||||
@property
|
||||
def modulator_response_ss(self):
|
||||
return ct.tf2ss(self.modulator_c2p) * ct.tf2ss(self.pll_ntf)
|
@ -49,17 +49,17 @@ This section introduces the operating principle and circuit dynamics of the prop
|
||||
|
||||
A block diagram of the proposed architecture is detailed in Fig. 2a. For clarity, this shows the single ended equivalent of the fully differential circuit that was implemented. The difference in potential between two electrode inputs V<sub>R<sub> & V<sub>IN<sub> is chopped at the chopper frequency f<sub>chp<sub> to generate a up-modulated voltage waveform that couples the input onto V<sub>X<sub> through C<sub>I<sub>. The essential mechanism here is that signals appearing on V<sub>X<sub> induce a current that feeds into two oscillators with different polarities after being demodulated. This current forces the oscillators accumulate a relative phase difference because the phase is dependent on the integral of injected current [^19]. This phase difference is then evaluated for each oscillator tap using XOR logic to yield multiple time-encoded PWM signals that can also be chopped using digital logic. The resulting digital signal is capacitively coupled onto V<sub>X<sub> in parallel to close the loop. This is the main signal amplifying path that realises a first-order asynchronous ΔΣ modulator and this sense using N phase detectors in parallel represents asynchronous quantization of the phase difference with a resolution of log<sub>2<sub>(1+N) bits. Using this interpretation we can construct the corresponding analytical model that is shown in Fig. 2b and will assist in deducing the design's parameter dependencies.
|
||||
|
||||
$$ H(s) = \frac{ 1 }{ s / k_1 + N f } \approx \frac{1}{s\cdot \frac{N C_{gate} V_{RG}}{Gm}+\frac{C_F}{C_I}\frac{C_U}{C_U+\:\:\text{\makebox[-3pt][l]{\\(\nearrow\\)}}C_G/N}} $$
|
||||
$$ H(s) =\frac{ 1 }{ s / k_1 + N f } \approx \frac{1}{s \cdot \frac{N C_{gate} V_{RG}}{Gm}+\frac{C_F}{C_I}\frac{C_U}{C_U + C_G/N}} $$
|
||||
|
||||
$$ f = {\frac{C_F}{C_{I}+C_{F}}} \cdot \frac{N C_{U}}{C_{F}+N C_{U}+ \text{\makebox[-3pt][l]{\\(\nearrow\\)}}C_{G}} $$
|
||||
$$ f = {\frac{C_F}{C_{I}+C_{F}}} \cdot \frac{N C_{U}}{C_{F}+N C_{U}+C_{G}} $$
|
||||
|
||||
First the expression in Eq. 1 can be derived to characterise the signal amplifying loop. The feedback factor \\(f\\) evaluated in Eq. 2 corresponds to the capacitive coupling of a particular PWM phase Q on to V<sub>X<sub> with respect to the capacitors C<sub>I<sub>, C<sub>F<sub>, C<sub>G<sub>, C<sub>U<sub>. In this case C<sub>G<sub> can be digitally tuned to provide varying gain settings (41-53 dB). The oscillator's integration factor k<sub>1<sub> is derived by evaluating the impulse sensitivity function (ISF). The ISF captures how the oscillator phase is affected as a function of charge being injected into the virtual supply of the oscillator V<sub>R<sub> [^19]. Following the derivation for Eq. 2 in [^11] this factor can be assumed constant and is simply dependent on the transconductance Gm, loading capacitance of each delay stage C<sub>gate<sub>, and the voltage across the oscillator V<sub>RG<sub> such that k<sub>1<sub>=Gm/(N C<sub>gate<sub> V<sub>RG<sub>).
|
||||
|
||||
The second control loop is used to reject near-DC aggressors that will appear at the input of the main transconductor. Chopping will prevent the input-referred noise profile from being corrupted by flicker noise but in turn several large tones will appear at harmonics of f<sub>chp<sub> because off-set is being up-modulated. Moreover because this structure is not providing narrowband amplification the feedback must actively suppress these tones to avoid the output from being saturated and distorted. These components are integrated with a gain of approximately A<sub>ripple<sub>=k<sub>1<sub>/f<sub>chp<sub> which induces a 90\\(^\circ\\) phase shift. The phase-shift can be corrected for by using the chopper clock that is delayed by 1/4<sup>th<sup> of the period when demodulating Q to recover the off-set. The flicker rejection further depends on the transfer function F(s) which represents how the recovered signal is smoothed and fed back onto V<sub>X<sub>. Using a charge pump in addition to the pseudo-resistor R<sub>P<sub> will yield an expression for F(s) according to Eq. 3 where C<sub>L<sub> and I\tss{Δ} represent the main integration capacitor and charge pump bias current respectively. This is also shown in Fig. 2.
|
||||
The second control loop is used to reject near-DC aggressors that will appear at the input of the main transconductor. Chopping will prevent the input-referred noise profile from being corrupted by flicker noise but in turn several large tones will appear at harmonics of f<sub>chp<sub> because off-set is being up-modulated. Moreover because this structure is not providing narrowband amplification the feedback must actively suppress these tones to avoid the output from being saturated and distorted. These components are integrated with a gain of approximately A<sub>ripple<sub>=k<sub>1<sub>/f<sub>chp<sub> which induces a 90\\(^\circ\\) phase shift. The phase-shift can be corrected for by using the chopper clock that is delayed by 1/4<sup>th<sup> of the period when demodulating Q to recover the off-set. The flicker rejection further depends on the transfer function F(s) which represents how the recovered signal is smoothed and fed back onto V<sub>X<sub>. Using a charge pump in addition to the pseudo-resistor R<sub>P<sub> will yield an expression for F(s) according to Eq. 3 where C<sub>L<sub> and I<sub>Δ<sub> represent the main integration capacitor and charge pump bias current respectively. This is also shown in Fig. 2.
|
||||
|
||||
$$ F(s) = \frac{N I_{\Delta}}{s (C_{L} C_{I} R_{P} s + C_{L} + C_{I})} $$
|
||||
|
||||
Combining F(s) and A<sub>ripple<sub> will then predict how the noise aggressors at V<sub>x<sub> are removed. The frequency dependent response in Fig. 3 evaluates this control mechanism at different points in the loop using the following implemented circuit parameters: N=5, f<sub>chp<sub>=75 kHz, C<sub>I<sub>=288 fF, C<sub>G<sub>=69 fF, C<sub>F<sub>=C<sub>U<sub>=14 fF, R<sub>P<sub>=100 MΩ, C<sub>L<sub>=1.6 pF, I\tss{Δ}=5 nA. This shows the influence of noise at the input (e²<sub>flk<sub>) with respect to the ripple at the ATC output and the fluctuations on V<sub>X<sub> as a function of frequency. First notice the increased chopper frequency enables this circuit to increase its bandwidth and reject more of the low-frequency band including common-mode signals that asymmetrically couple onto V<sub>X<sub>. In addition the second order low-pass characteristic provides increased rejection of the chopper and oscillator tones such that the two control loops operate in isolation. A known drawback of increasing f<sub>chp<sub> is the reduction in input impedance but as shown in Sec. 10 this reduction can be mitigated with technology scaling and using a smaller value for C<sub>I<sub>.
|
||||
Combining F(s) and A<sub>ripple<sub> will then predict how the noise aggressors at V<sub>x<sub> are removed. The frequency dependent response in Fig. 3 evaluates this control mechanism at different points in the loop using the following implemented circuit parameters: N=5, f<sub>chp<sub>=75 kHz, C<sub>I<sub>=288 fF, C<sub>G<sub>=69 fF, C<sub>F<sub>=C<sub>U<sub>=14 fF, R<sub>P<sub>=100 MΩ, C<sub>L<sub>=1.6 pF, I<sub>Δ<sub>=5 nA. This shows the influence of noise at the input (e²<sub>flk<sub>) with respect to the ripple at the ATC output and the fluctuations on V<sub>X<sub> as a function of frequency. First notice the increased chopper frequency enables this circuit to increase its bandwidth and reject more of the low-frequency band including common-mode signals that asymmetrically couple onto V<sub>X<sub>. In addition the second order low-pass characteristic provides increased rejection of the chopper and oscillator tones such that the two control loops operate in isolation. A known drawback of increasing f<sub>chp<sub> is the reduction in input impedance but as shown in Sec. 10 this reduction can be mitigated with technology scaling and using a smaller value for C<sub>I<sub>.
|
||||
|
||||
{{< figure src="/images/jssc2018/noise_tf.svg" title="Figure 3: The closed loop response of the flicker rejection loop due to input-referred noise e²<sub>flk<sub> evaluated with respect to the ripple magnitude seen at Q (solid), the feedback seen at V<sub>X<sub> (dotted), and the open loop response F(s)\\(\cdot\\)A<sub>ripple<sub> (dashed)." width="500" >}}
|
||||
|
||||
@ -67,22 +67,22 @@ Given these dynamics there is still important distinction to be made with regard
|
||||
|
||||
# 4 Circuit Implementation
|
||||
|
||||
{{< figure src="/images/jssc2018/obi_sch.svg" title="Figure 4: The transistor level implementation of the ATC circuit in Fig. 2a. Here the complementary structure in a) represents the main transconductor; b) represents the pseudo-differential oscillator where each delay cell is shown in c); The flicker rejection stage is shown in d) where only the grey section is replicated for each phase. Note that all devices have their body connected to the corresponding supplies with the exception of M\tss{5-8} which have the body connected to the drain of M<sub>9<sub>. Furthermore M\tss{13-16} and M\tss{21-22} their body connected to V<sub>R<sub> and either terminal of C<sub>L<sub> respectively." width="500" >}}
|
||||
{{< figure src="/images/jssc2018/obi_sch.svg" title="Figure 4: The transistor level implementation of the ATC circuit in Fig. 2a. Here the complementary structure in a) represents the main transconductor; b) represents the pseudo-differential oscillator where each delay cell is shown in c); The flicker rejection stage is shown in d) where only the grey section is replicated for each phase. Note that all devices have their body connected to the corresponding supplies with the exception of M<sub>5-8<sub> which have the body connected to the drain of M<sub>9<sub>. Furthermore M\<sub>13-16<sub> and M\<sub>21-22<sub> their body connected to V<sub>R<sub> and either terminal of C<sub>L<sub> respectively." width="500" >}}
|
||||
|
||||
The transistor schematic for the proposed ATC is presented in Fig. 4 and the sizing of each device is listed in Table 1. This circuit can be segmented into four parts corresponding to the transconductor, oscillator, delay stage, and flicker rejection circuit. Each sub-block, including the capacitor array, will be described below. This configuration uses two bias voltages V<sub>BN<sub> & V<sub>BP<sub> to source the annotated drain currents. Both of these voltages are derived on-chip using a simple current mirror structure and a 1 μ A off-chip reference. Furthermore an external reference voltage V<sub>C<sub> is used to control the common mode voltage of V<sub>R<sub> that is placed at V<sub>DD<sub>/2. Note that the 65 nm technology used here provides transistors that can be configured with 150 mV (lvt), 250 mV (vt), and 350 mV (hvt) threshold voltages (V<sub>TH<sub>). The lvt option is used exclusively to reduce the supply voltage to 0.5 V with the exception of M\tss{23-24} which use a 250 mV threshold.
|
||||
The transistor schematic for the proposed ATC is presented in Fig. 4 and the sizing of each device is listed in Table 1. This circuit can be segmented into four parts corresponding to the transconductor, oscillator, delay stage, and flicker rejection circuit. Each sub-block, including the capacitor array, will be described below. This configuration uses two bias voltages V<sub>BN<sub> & V<sub>BP<sub> to source the annotated drain currents. Both of these voltages are derived on-chip using a simple current mirror structure and a 1 μ A off-chip reference. Furthermore an external reference voltage V<sub>C<sub> is used to control the common mode voltage of V<sub>R<sub> that is placed at V<sub>DD<sub>/2. Note that the 65 nm technology used here provides transistors that can be configured with 150 mV (lvt), 250 mV (vt), and 350 mV (hvt) threshold voltages (V<sub>TH<sub>). The lvt option is used exclusively to reduce the supply voltage to 0.5 V with the exception of M<sub>23-24<sub> which use a 250 mV threshold.
|
||||
|
||||
Table 1: Device Sizing in micrometers with the labels from Fig. 4
|
||||
| Device | Size (W/L) | Device | Size (W/L) |
|
||||
|----|----|----|----|
|
||||
| M<sub>0<sub> | 26/5 | M\tss{15-16} | 0.2/2.5 |
|
||||
| M\tss{1-2} | 16/0.25 | M\tss{17-18} | 2/5 |
|
||||
| M\tss{3-4} | 2/1 | M\tss{19-20} | 10/0.2 |
|
||||
| M\tss{5-6} | 4/0.5 | M\tss{21-22} | 1.6/0.4 |
|
||||
| M\tss{7-8} | 0.8/1.4 | M\tss{23-24} | 0.96/4 |
|
||||
| M<sub>0<sub> | 26/5 | M\<sub>15-16<sub> | 0.2/2.5 |
|
||||
| M\<sub>1-2<sub> | 16/0.25 | M\<sub>17-18<sub> | 2/5 |
|
||||
| M\<sub>3-4<sub> | 2/1 | M\<sub>19-20<sub> | 10/0.2 |
|
||||
| M\<sub>5-6<sub> | 4/0.5 | M\<sub>21-22<sub> | 1.6/0.4 |
|
||||
| M\<sub>7-8<sub> | 0.8/1.4 | M\<sub>23-24<sub> | 0.96/4 |
|
||||
| M<sub>9<sub> | 32/0.1 | Logic | 0.3/0.1 |
|
||||
| M<sub>10<sub> | 6/5 | Switch<sub>CHP<sub> | 1/0.1 (P<sub>type<sub>) |
|
||||
| M\tss{11-12} | 1.5/2.4 | Switch<sub>X<sub> | 1/0.2 (N<sub>type<sub>) |
|
||||
| M\tss{13-14} | 2.3/2.5 | C<sub>L<sub> | 21/21 |
|
||||
| M\<sub>11-12<sub> | 1.5/2.4 | Switch<sub>X<sub> | 1/0.2 (N<sub>type<sub>) |
|
||||
| M\<sub>13-14<sub> | 2.3/2.5 | C<sub>L<sub> | 21/21 |
|
||||
|
||||
## 5 Low-Noise Transconductor
|
||||
|
||||
@ -98,7 +98,7 @@ The main feature of the oscillators (Fig. 4b) used by this ATC is that it uses d
|
||||
|
||||
## 7 Flicker Rejection Stage
|
||||
|
||||
The flicker removal circuit (Fig. 4d) biases the input of the transconductor by feeding back common mode and differential mode signals using a cross coupled load to enable low voltage operation without an additional common-mode-feedback circuit[^20]. The differential feedback provides flicker cancellation by demodulating the digital output using a switched current DAC that integrates on C<sub>L<sub> which is a large vertical metal-insulator-metal (MIM) capacitor placed over the analogue circuitry. The diode connected devices M\tss{21-22} represent pseudo-resistors of 100 MΩ that provide a resistive path to V<sub>X<sub> and further smooths high frequency tones from f<sub>chp<sub> and f<sub>osc<sub>. A significant variation in resistive value is inherently expected but it is important to note that it does not influence the signal amplifying path and the non-dominant poles are far away from the 8 kHz bandwidth of F(s) in Eq. 3 by virtue of not using a second analogue integrator that may compromise stability. The common mode feedback regulates V<sub>R<sub> with respect to V<sub>C<sub> by biasing the common mode of V<sub>X<sub>. For this loop the gain arises from transconductance ratio gm\tss{M19-M20}/gm\tss{M23-M24} together with the drain resistance ratio rds<sub>M10<sub>/(rds<sub>M0<sub>+rds<sub>M9<sub>). This readily provides over 30 dB of gain with the dominant pole provided by the pseudo-resistors that will also attenuate the input common mode signals.
|
||||
The flicker removal circuit (Fig. 4d) biases the input of the transconductor by feeding back common mode and differential mode signals using a cross coupled load to enable low voltage operation without an additional common-mode-feedback circuit[^20]. The differential feedback provides flicker cancellation by demodulating the digital output using a switched current DAC that integrates on C<sub>L<sub> which is a large vertical metal-insulator-metal (MIM) capacitor placed over the analogue circuitry. The diode connected devices M<sub>21-22<sub> represent pseudo-resistors of 100 MΩ that provide a resistive path to V<sub>X<sub> and further smooths high frequency tones from f<sub>chp<sub> and f<sub>osc<sub>. A significant variation in resistive value is inherently expected but it is important to note that it does not influence the signal amplifying path and the non-dominant poles are far away from the 8 kHz bandwidth of F(s) in Eq. 3 by virtue of not using a second analogue integrator that may compromise stability. The common mode feedback regulates V<sub>R<sub> with respect to V<sub>C<sub> by biasing the common mode of V<sub>X<sub>. For this loop the gain arises from transconductance ratio gm\<sub>M19-M20<sub>/gm\<sub>M23-M24<sub> together with the drain resistance ratio rds<sub>M10<sub>/(rds<sub>M0<sub>+rds<sub>M9<sub>). This readily provides over 30 dB of gain with the dominant pole provided by the pseudo-resistors that will also attenuate the input common mode signals.
|
||||
|
||||
## 8 Capacitive Feedback Network
|
||||
|
||||
@ -128,27 +128,27 @@ Eq. 6 calculates the expected input resistance and provides a first order estima
|
||||
|
||||
Mismatch due to process variation is the primary cause of distortion during multi-bit signal conversion. Minimising this source of nonlinearity is essential for both synchronous and asynchronous ΔΣ modulators because mismatch in the feedback DAC is not shaped by the loop filter [^27]. Fortunately the modulating property of the oscillator can remove this distortion if the phase readout is performed in a parallel fashion [^5]. Here we will concisely demonstrate that property arises because the mismatch induced components are simply being averaged and induce a DC-offset together with tones at the harmonic components of f<sub>osc<sub>. This uses a mapping that relates the phase difference \\(x\\) to the generated PWM waveform as a function of time \\(\tau\\) defined in Eq. 7. The following expression in Eq. 8 then evaluates the analogue feedback voltage that appears on V<sub>X<sub> in the ideal case for a given a phase difference of Δφ between the two oscillators.
|
||||
|
||||
$$ A(\tau,x) \triangleq\begin{cases} 1 & \tau (mod\: 1) \: < \:x 0 & \text{otherwise} \end{cases} $$
|
||||
$$ A(\tau,x) \triangleq \begin{cases} 1 & \tau ( mod 1 ) < x \\\\ 0 & \text{otherwise} \end{cases} $$
|
||||
|
||||
$$ V_{X}(t) = f \cdot \sum_{k=0}^{N-1} \underbrace{A( t \cdot f_{osc}+\frac{k}{N}\:,\: \Delta \phi )}_{Q_{k}(t)} $$
|
||||
$$ V_{X}(t) = f \cdot \sum_{k=0}^{N-1} \underbrace{ A \left( t \cdot f_{osc}+\frac{k}{N} , \Delta \phi \right)}_{ Q_k(t) } $$
|
||||
|
||||
$$ Q_{k}(t) = (1+\frac{\sigma_{C,k}}{C_U}) A( t \cdot f_{osc} + \frac{k}{N} \: , \: \sigma_{\tau-\mu,k} + \Delta \phi) $$
|
||||
$$ Q_{k}(t) = (1+\frac{\sigma_{C,k}}{C_U}) A( t \cdot f_{osc} + \frac{k}{N} , \sigma_{\tau-\mu,k} + \Delta \phi) $$
|
||||
|
||||
There are two independent sources of mismatch for each phase: the deviation in capacitor weights of C<sub>U<sub> σ<sub>C,k<sub> and the differential delay variation in oscillator stages as a fraction of the oscillation period σ\tss{τ,k} that includes the digital gates generating Q (i.e. inverters and XOR-gate). These are used to formulate Eq. 9 which considers a particular phase of Q(t) and the random mismatch variables that have process dependent normal distributions. The variation in delay will locally increase/decrease the pulse-width of Q for a specific phase \\(k\\). This is a time-invariant component of the gate delay while Δφ and T<sub>osc<sub> are signal dependent. Precisely formulating the cumulative variation of σ\tss{τ} will relate the transistor sizing, gate capacitance, and threshold voltage of each delay during operation.
|
||||
There are two independent sources of mismatch for each phase: the deviation in capacitor weights of C<sub>U<sub> σ<sub>C,k<sub> and the differential delay variation in oscillator stages as a fraction of the oscillation period σ<sub>τ,k<sub> that includes the digital gates generating Q (i.e. inverters and XOR-gate). These are used to formulate Eq. 9 which considers a particular phase of Q(t) and the random mismatch variables that have process dependent normal distributions. The variation in delay will locally increase/decrease the pulse-width of Q for a specific phase \\(k\\). This is a time-invariant component of the gate delay while Δφ and T<sub>osc<sub> are signal dependent. Precisely formulating the cumulative variation of σ<sub>τ<sub> will relate the transistor sizing, gate capacitance, and threshold voltage of each delay during operation.
|
||||
|
||||
Notice that A is a linear function of Δφ with a gain of 1 for the DC component of the PWM output which can be further expanded to extract the high frequency behaviour. However by design these components are intentionally avoided which should reveal that that the capacitor weights are always uniformly averaged irrespective Δφ. Closed-loop operation feeds back each σ\tss{τ,k} such that the sum all components has zero mean, that is σ\tss{τ-μ,k}\ = σ\tss{τ,k}-(\\(\sum_{k=0}^{N-1}\\) σ\tss{τ,k}/N). The residual variation in delay for each phase inevitably induces spurs at at harmonics of f<sub>osc<sub>.
|
||||
Notice that A is a linear function of Δφ with a gain of 1 for the DC component of the PWM output which can be further expanded to extract the high frequency behaviour. However by design these components are intentionally avoided which should reveal that that the capacitor weights are always uniformly averaged irrespective Δφ. Closed-loop operation feeds back each σ<sub>τ,k<sub> such that the sum all components has zero mean, that is σ<sub>τ-μ,k<sub>\ = σ<sub>τ,k<sub>-(\\(\sum_{k=0}^{N-1}\\) σ<sub>τ,k<sub>/N). The residual variation in delay for each phase inevitably induces spurs at at harmonics of f<sub>osc<sub>.
|
||||
|
||||
{{< figure src="/images/jssc2018/vco_model.svg" title="Figure 6: A continuous-time multi-phase VCO model for evaluating parameter sensitivity with transient simulations using the logical operator **B** in Eq. 10." width="500" >}}
|
||||
|
||||
Verifying this behaviour is best done by modifying the behavioural model commonly used for oscillators[^28] to accommodate multi-phase readout using the above expressions. Such a model is shown in Fig. 6. This configuration uses an internal time variable at V<sub>T<sub> that accumulates according to f<sub>osc<sub>. Given a set of quantisation levels L<sub>k<sub> or equivalently the number of phases, a logical function **B** will compute the corresponding PWM waveform of Q which are weighted by the associated capacitor C<sub>k<sub>. In this case the digital gate delay arising from computing the phase difference and applying feedback to the capacitive DAC can also be modelled by adjusting τ<sub>dly<sub>.
|
||||
|
||||
$$ \begin{split}\mathbf{B}(\phi_{S},\phi_{R},L) \triangleq & \left(\phi_{S} > L > \phi_{R} \right) \lor \left(\phi_{S} < \phi_{R} < L \right) & \lor \left( L < \phi_{S} < \phi_{R} \right)\end{split} $$
|
||||
$$ \mathbf{B}(\phi_{S},\phi_{R},L) \triangleq \left(\phi_{S} > L > \phi_{R} \right) \lor \left(\phi_{S} < \phi_{R} < L \right) \lor \left( L < \phi_{S} < \phi_{R} \right) $$
|
||||
|
||||
The logical expression in Eq. 10 simply compares the two phases with respect to L and evaluates the digital condition for which the output should be high. This representation implies that the delays correspond to the interval between each level which can be distributed uniformly as L<sub>k<sub>=(0.5+k)/L for integers k from 0 to N-1. By distributing the quantisation levels from 0 to 1 the corresponding delays are inherently normalised to the periodicity of φ\tss{S/R} without explicitly having to compute values with respect to f<sub>osc<sub> even when it is dynamically changing. In addition a difference in oscillator frequency between X\tss{1-2} can also be accommodated by adding a second integrated frequency component to the summation node.
|
||||
The logical expression in Eq. 10 simply compares the two phases with respect to L and evaluates the digital condition for which the output should be high. This representation implies that the delays correspond to the interval between each level which can be distributed uniformly as L<sub>k<sub>=(0.5+k)/L for integers k from 0 to N-1. By distributing the quantisation levels from 0 to 1 the corresponding delays are inherently normalised to the periodicity of φ<sub>S/R<sub> without explicitly having to compute values with respect to f<sub>osc<sub> even when it is dynamically changing. In addition a difference in oscillator frequency between X\<sub>1-2<sub> can also be accommodated by adding a second integrated frequency component to the summation node.
|
||||
|
||||
{{< figure src="/images/jssc2018/dac_mm.svg" title="Figure 7: Simulated output spectrum with a 2.5 kHz input at -6 dB of the full input-range for a equivalent asynchronous flash quantiser with 2.6 bits of resolution and 5 % mismatch in σ\tss{τ,k} and σ<sub>C,k<sub>." width="500" >}}
|
||||
{{< figure src="/images/jssc2018/dac_mm.svg" title="Figure 7: Simulated output spectrum with a 2.5 kHz input at -6 dB of the full input-range for a equivalent asynchronous flash quantiser with 2.6 bits of resolution and 5 % mismatch in σ<sub>τ,k<sub> and σ<sub>C,k<sub>." width="500" >}}
|
||||
|
||||
{{< figure src="/images/jssc2018/dac_mm2.svg" title="Figure 8: Simulated output spectrum with a 2.5 kHz input at -6 dB of the full input-range for a asynchronous VCO quantiser with 2.6 bits of resolution, 300 kHz f<sub>osc<sub> and 5 % mismatch in σ\tss{τ,k} and σ<sub>C,k<sub>." width="500" >}}
|
||||
{{< figure src="/images/jssc2018/dac_mm2.svg" title="Figure 8: Simulated output spectrum with a 2.5 kHz input at -6 dB of the full input-range for a asynchronous VCO quantiser with 2.6 bits of resolution, 300 kHz f<sub>osc<sub> and 5 % mismatch in σ<sub>τ,k<sub> and σ<sub>C,k<sub>." width="500" >}}
|
||||
|
||||
Now the impact of mismatch can be simulated by adding parameter variation in the quantiser levels and the feedback weights (f). The analogous case where the mismatch is not modulated (i.e. f<sub>osc<sub> is 0) loosely corresponds to a flash-based ADC since the phase is simply being compared with N thresholds. The corresponding spectra of the flash quantiser is shown in Fig. 7 and oscillating quantiser is shown in Fig. 8 where we observe the distortion components in different bands of the spectrum.
|
||||
|
||||
@ -196,15 +196,16 @@ Table 2: System Characteristics and Comparison with State-of-the-Art
|
||||
| Technology[nm] | **65** | 40 | 130 | 40 | 40 | 65 | 65 | 90 | 180 | 65|
|
||||
| Modality | **Time** | Time | Volt. | Time | Volt. | Volt. | Volt. | Volt. | Volt. | Mix |
|
||||
| Supply-V[V] | **0.5** | 0.6 | 1.2 | 1.2 | 1.2 | 0.6 | 1 | 1 | 0.45 | 0.5 |
|
||||
| Supply-I[A] | \textbf{2.55 μ} | 5.5 μ | 5.3 μ | 14 μ | 2.5 μ | 3 n | 3.3 μ | 2.8 μ | 2.1 μ | 10 μ |
|
||||
| Supply-I[A] | **2.55 μ** | 5.5 μ | 5.3 μ | 14 μ | 2.5 μ | 3 n | 3.3 μ | 2.8 μ | 2.1 μ | 10 μ |
|
||||
| Bandwidth[Hz] | **11 k** | 150 | 500 | 5 k | 200 | 370 | 8.2 k | 10.5 k | 10 k | 10 k |
|
||||
| Input Range[mVpp] | **4** | 40 | - | 8 | 100 | 25 | 220 | 1 | 1 | 1 |
|
||||
| CMRR[dB] | \textbf{(>)60(^\star)} | 60 | 90 | 97 | - | 60 | (>)80 | (>)45 | 73 | 75 |
|
||||
| CMRR[dB] | **>60** | 60 | 90 | 97 | - | 60 | (>)80 | (>)45 | 73 | 75 |
|
||||
| SFDR[dB] | **60** | 56 | 72 | 70 | 79 | 75 | (>)40 | (>)37 | (>)46 | (>)34 |
|
||||
| Noise Floor[V/\rtxt{Hz}] | **36 n** | 0.6 μ | 46n | 32 n | - | 1.4 μ | 27.5n | 35n | 29n | 100n |
|
||||
| Noise Floor[V/√Hz] | **36 n** | 0.6 μ | 46n | 32 n | - | 1.4 μ | 27.5n | 35n | 29n | 100n |
|
||||
| RMS Noise[μ V<sub>rms<sub>] | **3.8** | 7.8 | 1.1 | 2.3 | 5.2 | 26 | 4.1 | 3.04 | 3.2 μ | 4.9 μ |
|
||||
| Area[mm²] | **0.006** | 0.015 | 0.013 | 0.015 | 0.135 | 0.15 | 0.042 | 0.137 | 0.25 | 0.013 |
|
||||
| NEF / PEF | \textbf{2.2 / 2.4} | 8.1 / 39| 2.9 / 10| 4.7 / 27| 22 / 581| 2.1 / 2.6| 3.2 / 10| 1.9 / 3.6 | 1.57 / 1.1 | 5.99 / 18 |
|
||||
| NEF / PEF | **2.2 / 2.4** | 8.1 / 39| 2.9 / 10| 4.7 / 27| 22 / 581| 2.1 / 2.6| 3.2 / 10| 1.9 / 3.6 | 1.57 / 1.1 | 5.99 / 18 |
|
||||
|
||||
|
||||
|
||||
{{< figure src="/images/jssc2018/breakdown.svg" title="Figure 19: Power and area contributions from each sub-circuit." width="500" >}}
|
||||
@ -230,17 +231,21 @@ The authors would like to thank Dr. Pantelis Georgiou, and the Europractice Adva
|
||||
[^4]: P.Prabha etal., ''A highly digital VCO-based ADC architecture for current sensing applications,'' IEEE J. Solid-State Circuits, vol.50, no.8, pp. 1785--1795, Aug 2015.
|
||||
[^3]: T.Anand, K.A.A. Makinwa, and P.K. Hanumolu, ''A VCO based highly digital temperature sensor with 0.034 $^\circ$C/mV supply sensitivity,'' IEEE J. Solid-State Circuits, vol.51, no.11, pp. 2651--2663, Nov 2016.
|
||||
[^10]: B.Vigraham, J.Kuppambatti, and P.R. Kinget, ''Switched-mode operational amplifiers and their application to continuous-time filters in nanoscale CMOS,'' IEEE J. Solid-State Circuits, vol.49, no.12, pp. 2758--2772, Dec 2014.
|
||||
[^23]: L.B. Leene and T.G. Constandinou, ''A 0.5V time-domain instrumentation circuit with clocked and unclocked
|
||||
[^23]: L.B. Leene and T.G. Constandinou, ''A 0.5V time-domain instrumentation circuit with clocked and unclocked
|
||||
Delta
|
||||
Sigma operation,'' in 2017 IEEE International Symposium on Circuits and Systems (ISCAS), May 2017, pp. 1--4.
|
||||
[^12]: Y.Chen etal., ''A continuous-time digital IIR filter with signal-derived timing and fully agile power consumption,'' IEEE J. Solid-State Circuits, vol.53, no.2, pp. 418--430, Feb 2018.
|
||||
[^22]: S.Pavan, ''Analysis of chopped integrators, and its application to continuous-time delta-sigma modulator design,'' IEEE Trans. Circuits Syst. I, vol.64, no.8, pp. 1953--1965, Aug 2017.
|
||||
[^24]: W.S.T. Yan and H.C. Luong, ''A 900-MHz cmos low-phase-noise voltage-controlled ring oscillator,'' IEEE Trans. Circuits Syst. II, vol.48, no.2, pp. 216--221, Feb 2001.
|
||||
[^17]: R.R. Harrison and C.Charles, ''A low-power low-noise CMOS amplifier for neural recording applications,'' IEEE J. Solid-State Circuits, vol.38, no.6, pp. 958--965, June 2003.
|
||||
[^19]: A.Hajimiri and T.H. Lee, ''A general theory of phase noise in electrical oscillators,'' IEEE J. Solid-State Circuits, vol.33, no.2, pp. 179--194, Feb 1998.
|
||||
[^17]: R.R. Harrison and C.Charles, ''A low-power low-noise CMOS amplifier for neural recording applications,'' IEEE J. Solid-State Circuits, vol.38, no.6, pp. 958--965, June 2003.
|
||||
[^25]: T.Denison etal., ''A 2
|
||||
muW 100 nV/rtHz chopper-stabilized instrumentation amplifier for chronic measurement of neural field potentials,'' IEEE J. Solid-State Circuits, vol.42, no.12, pp. 2934--2945, Dec 2007.
|
||||
[^14]: Y.Li, D.Zhao, and W.A. Serdijn, ''A sub-microwatt asynchronous level-crossing ADC for biomedical applications,'' IEEE Trans. Biomed. Circuits Syst., vol.7, no.2, pp. 149--157, April 2013.
|
||||
[^13]: W.Tang etal., ''Continuous time level crossing sampling ADC for bio-potential recording systems,'' IEEE Trans. Circuits Syst. I, vol.60, no.6, pp. 1407--1418, June 2013.
|
||||
[^9]: G.D. Colletta etal., ''A 20 nW 0.25 V inverter-based asynchronous delta-sigma modulator in 130 nm digital CMOS process,'' IEEE Trans. VLSI Syst., vol.25, no.12, pp. 3455--3463, Dec 2017.
|
||||
[^14]: Y.Li, D.Zhao, and W.A. Serdijn, ''A sub-microwatt asynchronous level-crossing ADC for biomedical applications,'' IEEE Trans. Biomed. Circuits Syst., vol.7, no.2, pp. 149--157, April 2013.
|
||||
[^16]: F.M. Yaul and A.P. Chandrakasan, ''A noise-efficient 36 nV/
|
||||
txtHz chopper amplifier using an inverter-based 0.2 V supply input stage,'' IEEE J. Solid-State Circuits, vol.52, no.11, pp. 3032--3042, Nov 2017.
|
||||
[^29]: H.Kassiri etal., ''Rail-to-rail-input dual-radio 64-channel closed-loop neurostimulator,'' IEEE J. Solid-State Circuits, vol.52, no.11, pp. 2793--2810, Nov 2017.
|
||||
[^28]: C.C. Kuo etal., ''Fast statistical analysis of process variation effects using accurate PLL behavioral models,'' IEEE Trans. Circuits Syst. I, vol.56, no.6, pp. 1160--1172, June 2009.
|
||||
[^7]: C.C. Tu, Y.K. Wang, and T.H. Lin, ''A low-noise area-efficient chopped VCO-based CTDSM for sensor applications in 40 nm CMOS,'' IEEE J. Solid-State Circuits, vol.52, no.10, pp. 2523--2532, Oct 2017.
|
||||
@ -249,9 +254,12 @@ The authors would like to thank Dr. Pantelis Georgiou, and the Europractice Adva
|
||||
[^32]: T.Yang and J.Holleman, ''An ultralow-power low-noise CMOS biopotential amplifier for neural recording,'' IEEE Trans. Circuits Syst. II, vol.62, no.10, pp. 927--931, Oct 2015.
|
||||
[^21]: S.Mondal and D.A. Hall, ''An ECG chopper amplifier achieving 0.92 NEF and 0.85 PEF with AC-coupled inverter-stacking for noise efficiency enhancement,'' May 2017, pp. 1--4.
|
||||
[^11]: L.B. Leene and T.G. Constandinou, ''Time domain processing techniques using ring oscillator-based filter structures,'' IEEE Trans. Circuits Syst. I, vol.64, no.12, pp. 3003--3012, Dec 2017.
|
||||
[^30]: P.Harpe etal., ''A 0.20$ $mm$^2$ 3$ $nW signal acquisition IC for miniature sensor nodes in 65 nm CMOS,'' IEEE J. Solid-State Circuits, vol.51, no.1, pp. 240--248, Jan 2016.
|
||||
[^33]: D.Han etal., ''A 0.45 V 100-channel neural-recording IC with sub-
|
||||
mu w/channel consumption in 0.18
|
||||
mu m CMOS,'' IEEE Trans. Biomed. Circuits Syst., vol.7, no.6, pp. 735--746, Dec 2013.
|
||||
[^34]: R.Muller, S.Gambini, and J.M. Rabaey, ''A 0.013 mm sqrd, 5 W, DC-coupled neural signal acquisition IC with 0.5 V supply,'' IEEE J. Solid-State Circuits, vol.47, no.1, pp. 232--243, Jan 2012.
|
||||
[^15]: A.Bagheri etal., ''Low-frequency noise and offset rejection in DC-coupled neural amplifiers: A review and digitally-assisted design tutorial,'' IEEE Trans. Biomed. Circuits Syst., vol.11, no.1, pp. 161--176, Feb 2017.
|
||||
[^20]: S.Chatterjee, Y.Tsividis, and P.Kinget, ''0.5-V analog circuit techniques and their application in OTA and filter design,'' IEEE J. Solid-State Circuits, vol.40, no.12, pp. 2373--2387, Dec 2005.
|
||||
[^33]: D.Han etal., ''A 0.45 V 100-channel neural-recording IC with sub-
|
||||
[^26]: C.C. Enz and E.A. Vittoz, Charge-based MOS transistor modeling: the EKV model for low-power and RF IC design.\hskip 1em plus 0.5em minus 0.4em
|
||||
elax John Wiley & Sons, Aug 2006.
|
||||
[^27]: K.-D. Chen and T.-H. Kuo, ''An improved technique for reducing baseband tones in sigma-delta modulators employing data weighted averaging algorithm without adding dither,'' IEEE Trans. Circuits Syst. II, vol.46, no.1, pp. 63--68, Jan 1999.
|
||||
|
@ -52,7 +52,7 @@ This ENGINI prototype has been developed for a 0.35 μ m CMOS technology such th
|
||||
This provides a stable power supply for the electronics and back-scatters digitised recordings. The circuit architecture is shown in Fig. 3. This contains a binary weighted capacitor bank C<sub>T<sub>, a passive full wave rectifier, and a sensing circuit which are all digitally-controlled. The principle of operation can be described as follows. First, the cross-coupled rectifier converts the induced AC voltage to a DC power on V<sub>x<sub>. Then, the low voltage amplifier A<sub>2<sub> performs auto-zeroing by shorting C<sub>F<sub> and simultaneously sampling the rectified voltage onto C<sub>I<sub>. After sampling, the parallel binary-weighted capacitor bank C<sub>T<sub> is adjusted to tune or de-tune LC tank on the secondary side. There is therefore a voltage fluctuation at node V<sub>x<sub>. The change in V<sub>x<sub> is amplified 30\\(\times\\) by A<sub>2<sub> which corresponds to the ratio C<sub>I<sub>/C<sub>F<sub>. The polarity of the resulting change is digitised using the comparator, instructing the digital control to add or remove parallel capacitors in the next cycle of regulation. Two supply voltage level indicators from the biasing circuit further assist this feedback to increase or reduce the supply voltage and whether to perform LSK respectively. The resistor R<sub>z<sub> is added after the output of rectifier such that the speed at which V<sub>X<sub> can be controlled is not dependent on the load capacitance C<sub>L<sub> which may be quite large. This allows fast regulation with a clock speed of 846 kHz at the cost of some reduction in power efficiency due to the voltage drop from V<sub>X<sub> to V<sub>DD<sub>.
|
||||
|
||||
{{< figure src="/images/biocas2017/REG.svg" title="Figure 3: Adaptive power conversion and regulation circuit using full-wave rectifier, tunable LC tank, auto-zeroing amplifier and strong arm comparator" width="500" >}}
|
||||
%
|
||||
|
||||
|
||||
## 6 \\(\Delta\Sigma\\) Instrumentation Circuit
|
||||
|
||||
@ -61,7 +61,7 @@ This provides a stable power supply for the electronics and back-scatters digiti
|
||||
The instrumentation circuit used to acquire the electrode recordings is based on the time-domain \\(\Delta\Sigma\\) modulator in [^11]. This uses differential oscillators as the integration element with an asynchronous signal quantizer. However the implementation presented here introduces an additional Gm-C integrator and a feed-forward path to realise second-order noise shaping. This reduces the oversampling ratio (OSR) requirement and substantially increases the dynamic range of the system. A single-ended equivalent of the fully-differential structure used here is shown in Fig. 4.
|
||||
|
||||
{{< figure src="/images/biocas2017/SDM.svg" title="Figure 4: Simplified equivalent of the second-order \\(\Delta\Sigma\\) modulator using time-domain signal quantization exhibiting a bandpass response due to the switched current DAC which removes any electrode offset." width="500" >}}
|
||||
%
|
||||
|
||||
|
||||
Note that this is a DC-coupled configuration where the analogue node V<sub>O<sub> tracks the electrode potential. An electrode offset larger than \\(\pm\\)100 mV can be accommodated without saturating the modulator by adding the digitally switched and duty cycled current in the feedback path. The quantized signal Q is AC coupled onto V<sub>O<sub> with a relatively large attenuation factor due to capacitive division α=1/(C<sub>0<sub>/C<sub>C<sub>+1) which will allow the in-band signal gain. This can be confirmed using the small signal model for this circuit described in Eq. 1-4 where H(s) represents the second-order loop filter and C(s) the charge pump with capacitive feed-forward. The factor k1=OSR f<sub>smp<sub>/2 reflects the modulator bandwidth in terms of the target sampling frequency f<sub>smp<sub>. The factor k2=2\\(\pi\\) f<sub>hp<sub> represents the integration constant of the charge pump in terms of the high-pass cut-off frequency f<sub>hp<sub>. This approach is inspired by the first order modulator in [^12]. The implemented circuit uses an OSR of 64, a 1 Hz high-pass corner frequency, and third order CIC filter to decimate the output. This leads to the noise and signal transfer functions shown in Fig. 5.
|
||||
|
||||
@ -118,7 +118,7 @@ Table 1: System Characteristics and Comparison with State-of-the-Art
|
||||
|
||||
# 9 Conclusion
|
||||
|
||||
This work demonstrates a compact system on chip architecture for LFP based recording systems that aims to distribute several implantable probes into the cortical tissue in a scalable fashion by relying on autonomous sensor operation. Using the resonant tuning for supply regulation and \\(\Delta\Sigma\\) modulator instrumentation has lead to a significant reduction in system complexity typically seen in BMI SoCs. Moreover this configuration is able to operate at high efficiency without much constraint on technology requirements since the overall system power budget is estimated to be 80 μ W from preliminary simulation results. The approach to brain machine interfaces presented here will lead to safer and simpler systems while delivering high fidelity multi-electrode recordings which is essential for applications in a clinical environment.%
|
||||
This work demonstrates a compact system on chip architecture for LFP based recording systems that aims to distribute several implantable probes into the cortical tissue in a scalable fashion by relying on autonomous sensor operation. Using the resonant tuning for supply regulation and \\(\Delta\Sigma\\) modulator instrumentation has lead to a significant reduction in system complexity typically seen in BMI SoCs. Moreover this configuration is able to operate at high efficiency without much constraint on technology requirements since the overall system power budget is estimated to be 80 μ W from preliminary simulation results. The approach to brain machine interfaces presented here will lead to safer and simpler systems while delivering high fidelity multi-electrode recordings which is essential for applications in a clinical environment.
|
||||
|
||||
# 10 Acknowledgement
|
||||
|
||||
|
@ -41,7 +41,9 @@ The rest of this paper if organised as follows: Sec 3 will introduce a recurrent
|
||||
|
||||
There are a number of recursive oscillator topologies available in the literature with two identifiable basis; biquads and waveguides[^9]. The feed-forward structure proposed here is derived from the standard coupled quadrature structure that provides feedback with equi-amplitude quadrature outputs. This structure is shown in Fig. 2a. The feed-forward configuration uses two integrators in negative feedback with two coefficients f and k to specify frequency and Q-factor respectively. This will require the same number of coefficient multiplications as the coupled quadrature configuration but uses 4 2-input summation nodes opposed to 2. The benefit here is that there are only 2 scaling coefficients and they are linearly dependent on the desired oscillation frequency. The conventional structure has f²\:dependence that requires excessive integrator precision to accurately resolve very small frequencies typically of interest for biomedical signals.
|
||||
|
||||
$$ \begin{bmatrix}\hat{x}_Q \hat{x}_I\end{bmatrix} =\underbrace{\begin{bmatrix}(1-k f) & -f f & (1-k f)\end{bmatrix}}_{\mathbf{R}(k,f)}\cdot\begin{bmatrix}x_Q x_I\end{bmatrix} $$
|
||||
$$ \begin{bmatrix}\hat{x}_Q \hat{x}_I\end{bmatrix} = \mathbf{R}(k,f) \cdot\begin{bmatrix}x_Q x_I\end{bmatrix} $$
|
||||
|
||||
$$ \mathbf{R}(k,f) = \begin{bmatrix}(1-k f) & -f \\\\ f & (1-k f)\end{bmatrix} $$
|
||||
|
||||
Digital oscillators are usually characterised in terms of a rotation matrix \\(\mathbf{R}\\)(k,f) that is applied to two state variables x<sub>Q<sub> and x<sub>I<sub>. This representation is formulated in Eq. 1. For clarity the k²\: factor is ignored in this analysis since it yields a simpler solution to the basic feed-forward configuration. In this case we are interested in manipulating the pole location adaptively which is why we will solve for the complex pole positions of this dynamic system below.
|
||||
|
||||
@ -55,7 +57,7 @@ $$ \begin{split}poles\left(\frac{1}{1+D_O(z)}\right) = 1 - k f \pm √{ f^2 k^2
|
||||
|
||||
Finding the poles yields the two solutions in Eq. 4 that correspond to the complex pair P\tss{Q/I} which dictate the oscillatory behaviour of this circuit. This reveals the behaviour shown in Fig. 2b which is that adjusting k will rotate the pole-pair in and out of the unit circle resulting in a growing or receding complex exponential or oscillation. It is also readily seen that for the case k=0 the pole locations lie outside the unit circle. Solving for a steady state solution where P\tss{Q/I} are on the unit circle gives k=f/2.
|
||||
|
||||
# 4 DDWS Core]{\\(\Delta\Sigma^2\\) type DDWS Core
|
||||
# 4 DDWS Core \\(\Delta\Sigma^2\\) type DDWS Core
|
||||
|
||||
In order to realise the proposed multiplier-free DDWS, two additional components will be introduced. The first is a second order digital ΔΣ \: modulator that will allow us to mitigate the need to for high-precision multipliers and the second is a controller module that will regulate the dynamic oscillatory behaviour given a set input parameters. This configuration is shown in Fig. 3 together with sub-blocks for amplitude tracking and noise shaping.
|
||||
|
||||
@ -65,26 +67,7 @@ Introducing a ΔΣ \: modulator is a well established means reduce hardware comp
|
||||
|
||||
The block diagram in Fig. 3 also includes logic for tracking the peak to peak amplitude of the internal oscillation. This is done by detecting zero-crossings of either integrator and latching the other that will at that moment be at the peak amplitude. The oscillation amplitude is used to control the dynamics of the wavelet generator and prevents saturation.
|
||||
|
||||
\begin{algorithm}
|
||||
\DontPrintSemicolon
|
||||
\KwIn{Wavelet synthesis parameters (f, c<sub>bw<sub>, ic, vpp)}
|
||||
\KwResult{Quadrature bit-streams (D1\tss{Q/I}, D2\tss{Q/I})}
|
||||
**Initialise:** x1<sub>Q<sub>=ic, x1<sub>I<sub>=0, x2<sub>Q<sub>=vpp/2, x2<sub>I<sub>=0, s1=c<sub>bw<sub>, s2=-c<sub>bw<sub>
|
||||
\Begin{
|
||||
\ShowLn
|
||||
k1 = 0.5 + s1(D1<sub>PP<sub> - vpp)
|
||||
k2 = 0.5 + s2(D2<sub>PP<sub> - vpp)
|
||||
\\(\mathbf{x1}\\)\tss{Q/I}[n] = \\(\mathbf{R}\\)(k1,f) \\(\cdot\\) \\(\mathbf{x1}\\)\tss{Q/I}[n-1]
|
||||
\\(\mathbf{x2}\\)\tss{Q/I}[n] = \\(\mathbf{R}\\)(k2,f) \\(\cdot\\) \\(\mathbf{x2}\\)\tss{Q/I}[n-1]
|
||||
\uIf{ D1<sub>PP<sub> \textgreater vpp **or** $|\\(k1\\)|$ \textless c<sub>bw<sub>/2}{s1=-c<sub>bw<sub>}
|
||||
\ElseIf{ D1<sub>PP<sub> \textless ic **and** s2\textless0 }{s1=c<sub>bw<sub>}
|
||||
\uIf{ D2<sub>PP<sub> \textgreater vpp **or** $|\\(k2\\)|$ \textless c<sub>bw<sub>/2}{s2=-c<sub>bw<sub>}
|
||||
\ElseIf{ D2<sub>PP<sub> \textless ic **and** s1\textless0 }{s2=c<sub>bw<sub>}
|
||||
}
|
||||
\BlankLine
|
||||
\caption{DDWS Controller}
|
||||
\label{algo:ddws-control}
|
||||
\end{algorithm}
|
||||
|
||||
|
||||
An overview of the control logic is described in Alg. 1. Here the notation from Eq. 1 is used to simplify how the oscillator states evolve by using the rotation matrix. In the behavioural implementation lines 5-6 are realised by a series of conditional statements that increment/decrement the oscillator states \\(\mathbf{x}\\)\tss{Q/I} and then compute the feed forward value by adding or subtracting k1/k2. Notice that we use the state variable s1/s2 to iteratively make sure only one oscillator is growing in amplitude while the other is shrinking in amplitude but at all times the growth is bounded by how close the peak to peak value is to the target maximum vpp. In fact several configurable parameters are used here in addition to vpp to specify the wavelet dynamics. Like before f controls the oscillation frequency in rads per second. The parameter ic determines the extinction ratio between the minimum and maximum oscillation amplitudes and c<sub>bw<sub> controls the window bandwidth together with ic to allow high or low out-of-band rejection.
|
||||
|
||||
|
@ -49,9 +49,10 @@ $$ QNP \approx \underbrace{\left( V^2_{DD} e^{-3\tau} + \frac{V^2_{DD}}{2^{2N}}
|
||||
|
||||
The expression in Eq. 2 parametrises the overall SAR resolution as N, the loop fillter order as M, and the number of time constants we allow the capacitive DAC to settle as τ \:in order to estimate QNP. This construction shows that settling and quantisation errors are shaped by the loop filter reducing the noise power by the term outside the brackets. Both in Fig. 3 and in the formulation we observe a strong dependency with regard to M as long as we provide sufficient settling time during SAR conversion. This result suggests that the noise-shaping feed-back must avoid driving the capacitive DAC with active amplifiers during successive-approximation to avoid slowing down the conversion speed or equivalently increasing the power requirement of each amplifier. We can also confirm here that the order of the loop filter does not need to be very high if the QNP needs to match the SNP.
|
||||
|
||||
$$ MNP \approx \underbrace{\left( \frac{\pi^2 2^{-2D}}{3 \cdot 2^K OSR^3} + \frac{\pi^{2E} 2^{-2K}}{(1+2E) OSR^{1+2E}} \right)}_{\text{DWA-MSB + MES-LSB DAC}} \frac{\sigma^2 V^2_{DD}}{3} $$
|
||||
$$ MNP \approx \Delta^2 \underbrace{ \left( \frac{\pi^2 2^{-2D}}{3 \cdot 2^K OSR^3} + \frac{\pi^{2E} 2^{-2K}}{(1+2E) OSR^{1+2E}} \right) }_{\text{DWA-MSB + MES-LSB DAC}} $$
|
||||
|
||||
The MNP is evaluated in Eq. 3 with respect to the MES noise shaping order E, the number of bits D used to calibrate each capacitor in the MSB DAC in an idealised way. K represents the MSB DAC resolution in bits. Using a capacitor standard deviation \\(\sigma=0.5%\\) and K=4, the MNP of several configurations is shown in Fig. 4. The observation here is that for small OSR values the mismatch noise is typically dominated by the MSB DAC as the mismatch is not sufficiently shaped. It is relatively expensive to increase the number of elements in the MSB DAC since the scaling is linear and increasing the OSR diminishes the advantage of performing SAR. Instead we propose to calibrate the 15 capacitors in the MSB section as D will reduce the MNP more efficiently. The mismatch from the LSB section contains many more elements and is more effectively shaped using a second-order MES technique.
|
||||
The MNP is evaluated in Eq. 3 with respect to the MES noise shaping order E, the number of bits D used to calibrate each capacitor in the MSB DAC in an idealised way. K represents the MSB DAC resolution in bits.
|
||||
\\( \Delta^2 = \frac{\sigma^2 V^2_{DD}}{3}\\) represents the the capacitor mismatch power using a standard deviation \\(\sigma=0.5%\\) and K=4, the MNP of several configurations is shown in Fig. 4. The observation here is that for small OSR values the mismatch noise is typically dominated by the MSB DAC as the mismatch is not sufficiently shaped. It is relatively expensive to increase the number of elements in the MSB DAC since the scaling is linear and increasing the OSR diminishes the advantage of performing SAR. Instead we propose to calibrate the 15 capacitors in the MSB section as D will reduce the MNP more efficiently. The mismatch from the LSB section contains many more elements and is more effectively shaped using a second-order MES technique.
|
||||
|
||||
The above trends are used to optimise the FOM<sub>S<sub> in a similar fashion to [^3] by correlating hardware requirements with power and accuracy estimators for several configurations. Given an initial 18 bit target precision, we propose the following configuration: CT=50 pF, M=2,τ=5, K=5, D=4, E=2 with the OSR set to 16 to ease the decimation effort.
|
||||
|
||||
@ -117,7 +118,8 @@ This works presents a 17 bit Noise Shaping SAR ADC with reduced oversampling rat
|
||||
|
||||
# Refernces:
|
||||
|
||||
[^11]: S.Pavan, R.Schreier, and G.C. Temes, Understanding Delta-Sigma Data Converters.\hskip 1em plus 0.5em minus 0.4em
|
||||
[^11]: S.Pavan, R.Schreier, and G.C. Temes, Understanding Delta-Sigma Data Converters.\hskip 1em plus 0.5em minus 0.4em
|
||||
elax IEEE, 2017. [Online]: http://dx.doi.org/10.1002/9781119258308
|
||||
[^12]: R.Schreier, J.Silva, J.Steensgaard, and G.C. Temes, ''Design-oriented estimation of thermal noise in switched-capacitor circuits,'' IEEE Trans. Circuits Syst. I, vol.52, no.11, pp. 2358--2368, Nov 2005. [Online]: http://dx.doi.org/10.1109/TCSI.2005.853909
|
||||
[^10]: M.Aboudina and B.Razavi, ''A new DAC mismatch shaping technique for sigma–delta modulators,'' IEEE Trans. Circuits Syst. II, vol.57, no.12, pp. 966--970, Dec 2010. [Online]: http://dx.doi.org/10.1109/TCSII.2010.2083172
|
||||
[^13]: J.Liu, G.Wen, and N.Sun, ''Second-order DAC MES for SAR ADCs,'' IET Elec. Letters, vol.53, no.24, pp. 1570--1572, 2017. [Online]: http://dx.doi.org/10.1049/el.2017.3138
|
||||
@ -126,7 +128,8 @@ This works presents a 17 bit Noise Shaping SAR ADC with reduced oversampling rat
|
||||
[^5]: A.AlMarashli, J.Anders, J.Becker, and M.Ortmanns, ''A nyquist rate SAR ADC employing incremental sigma delta DAC achieving peak SFDR=107 dB at 80 kS/s,'' IEEE J. Solid-State Circuits, vol.53, no.5, pp. 1493--1507, May 2018. [Online]: http://dx.doi.org/10.1109/JSSC.2017.2776299
|
||||
[^4]: I.Jang etal., ''A 4.2 mW 10 MHz BW 74.4 dB SNDR continuous-time delta-sigma modulator with SAR-assisted digital-domain noise coupling,'' IEEE J. Solid-State Circuits, vol.53, no.4, pp. 1139--1148, April 2018. [Online]: http://dx.doi.org/10.1109/JSSC.2017.2778284
|
||||
[^3]: L.B. Leene and T.G. Constandinou, ''A 0.016 mm sqrd 12 b $\Delta\Sigma$ SAR with 14 fJ/conv. for ultra low power biosensor arrays,'' IEEE Trans. Circuits Syst. I, vol.64, no.10, pp. 2655--2665, Oct 2017. [Online]: http://dx.doi.org/10.1109/TCSI.2017.2703580
|
||||
[^3]: L.B. Leene and T.G. Constandinou, ''A 0.016 mm sqrd 12 b $\Delta\Sigma$ SAR with 14 fJ/conv. for ultra low power biosensor arrays,'' IEEE Trans. Circuits Syst. I, vol.64, no.10, pp. 2655--2665, Oct 2017. [Online]: http://dx.doi.org/10.1109/TCSI.2017.2703580
|
||||
[^1]: Y.Chae, K.Souri, and K.A.A. Makinwa, ''A 6.3
|
||||
mu W 20 bit incremental zoom-ADC with 6 ppm INL and 1 mu V offset,'' IEEE J. Solid-State Circuits, vol.48, no.12, pp. 3019--3027, Dec 2013. [Online]: http://dx.doi.org/10.1109/JSSC.2013.2278737
|
||||
[^16]: S.Choi etal., ''An 84.6 dB-SNDR and 98.2 dB-SFDR residue-integrated SAR ADC for low-power sensor applications,'' IEEE J. Solid-State Circuits, vol.53, no.2, pp. 404--417, Feb 2018. [Online]: http://dx.doi.org/10.1109/JSSC.2017.2774287
|
||||
[^2]: Y.Shu, L.Kuo, and T.Lo, ''An oversampling SAR ADC with DAC mismatch error shaping achieving 105 dB SFDR and 101 dB SNDR over 1 kHz BW in 55 nm CMOS,'' IEEE J. Solid-State Circuits, vol.51, no.12, pp. 2928--2940, Dec 2016. [Online]: http://dx.doi.org/10.1109/JSSC.2016.2592623
|
||||
[^7]: J.A. Fredenburg and M.P. Flynn, ''A 90 MS/s 11 MHz bandwidth 62 dB SNDR noise-shaping SAR ADC,'' IEEE J. Solid-State Circuits, vol.47, no.12, pp. 2898--2904, Dec 2012. [Online]: http://dx.doi.org/10.1109/JSSC.2012.2217874
|
||||
|
1159
static/images/posts/generator/F2.svg
Normal file
1159
static/images/posts/generator/F2.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 30 KiB |
1503
static/images/posts/generator/F4.svg
Normal file
1503
static/images/posts/generator/F4.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 38 KiB |
880
static/images/posts/generator/P2.svg
Normal file
880
static/images/posts/generator/P2.svg
Normal file
@ -0,0 +1,880 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="460.8pt" height="345.6pt" viewBox="0 0 460.8 345.6" xmlns="http://www.w3.org/2000/svg" version="1.1">
|
||||
<metadata>
|
||||
<rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||
<cc:Work>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:date>2025-01-05T14:42:00.552829</dc:date>
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Matplotlib v3.9.2, https://matplotlib.org/</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs>
|
||||
<style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style>
|
||||
</defs>
|
||||
<g id="figure_1">
|
||||
<g id="patch_1">
|
||||
<path d="M 0 345.6
|
||||
L 460.8 345.6
|
||||
L 460.8 0
|
||||
L 0 0
|
||||
L 0 345.6
|
||||
z
|
||||
" style="fill: none"/>
|
||||
</g>
|
||||
<g id="axes_1">
|
||||
<g id="patch_2">
|
||||
<path d="M 57.6 307.584
|
||||
L 414.72 307.584
|
||||
L 414.72 41.472
|
||||
L 57.6 41.472
|
||||
L 57.6 307.584
|
||||
z
|
||||
" style="fill: none"/>
|
||||
</g>
|
||||
<g id="matplotlib.axis_1">
|
||||
<g id="xtick_1">
|
||||
<g id="line2d_1">
|
||||
<defs>
|
||||
<path id="ma786b2d5a2" d="M 0 0
|
||||
L 0 3.5
|
||||
" style="stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</defs>
|
||||
<g>
|
||||
<use xlink:href="#ma786b2d5a2" x="57.6" y="295.488" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_1">
|
||||
<!-- −2.0 -->
|
||||
<g style="fill: #ffffff" transform="translate(45.559375 310.139563) scale(0.1 -0.1)">
|
||||
<defs>
|
||||
<path id="DejaVuSansMono-2212" d="M 275 2272
|
||||
L 3578 2272
|
||||
L 3578 1741
|
||||
L 275 1741
|
||||
L 275 2272
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSansMono-32" d="M 1166 531
|
||||
L 3309 531
|
||||
L 3309 0
|
||||
L 475 0
|
||||
L 475 531
|
||||
Q 1059 1147 1496 1619
|
||||
Q 1934 2091 2100 2284
|
||||
Q 2413 2666 2522 2902
|
||||
Q 2631 3138 2631 3384
|
||||
Q 2631 3775 2401 3997
|
||||
Q 2172 4219 1772 4219
|
||||
Q 1488 4219 1175 4116
|
||||
Q 863 4013 513 3803
|
||||
L 513 4441
|
||||
Q 834 4594 1145 4672
|
||||
Q 1456 4750 1759 4750
|
||||
Q 2444 4750 2861 4386
|
||||
Q 3278 4022 3278 3431
|
||||
Q 3278 3131 3139 2831
|
||||
Q 3000 2531 2688 2169
|
||||
Q 2513 1966 2180 1606
|
||||
Q 1847 1247 1166 531
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSansMono-2e" d="M 1528 953
|
||||
L 2316 953
|
||||
L 2316 0
|
||||
L 1528 0
|
||||
L 1528 953
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSansMono-30" d="M 1509 2344
|
||||
Q 1509 2516 1629 2641
|
||||
Q 1750 2766 1919 2766
|
||||
Q 2094 2766 2219 2641
|
||||
Q 2344 2516 2344 2344
|
||||
Q 2344 2169 2220 2047
|
||||
Q 2097 1925 1919 1925
|
||||
Q 1744 1925 1626 2044
|
||||
Q 1509 2163 1509 2344
|
||||
z
|
||||
M 1925 4250
|
||||
Q 1484 4250 1267 3775
|
||||
Q 1050 3300 1050 2328
|
||||
Q 1050 1359 1267 884
|
||||
Q 1484 409 1925 409
|
||||
Q 2369 409 2586 884
|
||||
Q 2803 1359 2803 2328
|
||||
Q 2803 3300 2586 3775
|
||||
Q 2369 4250 1925 4250
|
||||
z
|
||||
M 1925 4750
|
||||
Q 2672 4750 3055 4137
|
||||
Q 3438 3525 3438 2328
|
||||
Q 3438 1134 3055 521
|
||||
Q 2672 -91 1925 -91
|
||||
Q 1178 -91 797 521
|
||||
Q 416 1134 416 2328
|
||||
Q 416 3525 797 4137
|
||||
Q 1178 4750 1925 4750
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<use xlink:href="#DejaVuSansMono-2212"/>
|
||||
<use xlink:href="#DejaVuSansMono-32" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="120.410156"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="180.615234"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="xtick_2">
|
||||
<g id="line2d_2">
|
||||
<g>
|
||||
<use xlink:href="#ma786b2d5a2" x="102.24" y="295.488" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_2">
|
||||
<!-- −1.5 -->
|
||||
<g style="fill: #ffffff" transform="translate(90.199375 310.139563) scale(0.1 -0.1)">
|
||||
<defs>
|
||||
<path id="DejaVuSansMono-31" d="M 844 531
|
||||
L 1825 531
|
||||
L 1825 4097
|
||||
L 769 3859
|
||||
L 769 4434
|
||||
L 1819 4666
|
||||
L 2450 4666
|
||||
L 2450 531
|
||||
L 3419 531
|
||||
L 3419 0
|
||||
L 844 0
|
||||
L 844 531
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSansMono-35" d="M 647 4666
|
||||
L 3009 4666
|
||||
L 3009 4134
|
||||
L 1222 4134
|
||||
L 1222 2988
|
||||
Q 1356 3038 1492 3061
|
||||
Q 1628 3084 1766 3084
|
||||
Q 2491 3084 2916 2656
|
||||
Q 3341 2228 3341 1497
|
||||
Q 3341 759 2895 334
|
||||
Q 2450 -91 1678 -91
|
||||
Q 1306 -91 998 -41
|
||||
Q 691 9 447 109
|
||||
L 447 750
|
||||
Q 734 594 1025 517
|
||||
Q 1316 441 1619 441
|
||||
Q 2141 441 2423 716
|
||||
Q 2706 991 2706 1497
|
||||
Q 2706 1997 2414 2275
|
||||
Q 2122 2553 1600 2553
|
||||
Q 1347 2553 1106 2495
|
||||
Q 866 2438 647 2322
|
||||
L 647 4666
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<use xlink:href="#DejaVuSansMono-2212"/>
|
||||
<use xlink:href="#DejaVuSansMono-31" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="120.410156"/>
|
||||
<use xlink:href="#DejaVuSansMono-35" x="180.615234"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="xtick_3">
|
||||
<g id="line2d_3">
|
||||
<g>
|
||||
<use xlink:href="#ma786b2d5a2" x="146.88" y="295.488" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_3">
|
||||
<!-- −1.0 -->
|
||||
<g style="fill: #ffffff" transform="translate(134.839375 310.139563) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-2212"/>
|
||||
<use xlink:href="#DejaVuSansMono-31" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="120.410156"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="180.615234"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="xtick_4">
|
||||
<g id="line2d_4">
|
||||
<g>
|
||||
<use xlink:href="#ma786b2d5a2" x="191.52" y="295.488" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_4">
|
||||
<!-- −0.5 -->
|
||||
<g style="fill: #ffffff" transform="translate(179.479375 310.139563) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-2212"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="120.410156"/>
|
||||
<use xlink:href="#DejaVuSansMono-35" x="180.615234"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="xtick_5">
|
||||
<g id="line2d_5">
|
||||
<g>
|
||||
<use xlink:href="#ma786b2d5a2" x="236.16" y="295.488" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_5">
|
||||
<!-- 0.0 -->
|
||||
<g style="fill: #ffffff" transform="translate(227.129531 310.139563) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-30"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="120.410156"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="xtick_6">
|
||||
<g id="line2d_6">
|
||||
<g>
|
||||
<use xlink:href="#ma786b2d5a2" x="280.8" y="295.488" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_6">
|
||||
<!-- 0.5 -->
|
||||
<g style="fill: #ffffff" transform="translate(271.769531 310.139563) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-30"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-35" x="120.410156"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="xtick_7">
|
||||
<g id="line2d_7">
|
||||
<g>
|
||||
<use xlink:href="#ma786b2d5a2" x="325.44" y="295.488" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_7">
|
||||
<!-- 1.0 -->
|
||||
<g style="fill: #ffffff" transform="translate(316.409531 310.139563) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-31"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="120.410156"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="xtick_8">
|
||||
<g id="line2d_8">
|
||||
<g>
|
||||
<use xlink:href="#ma786b2d5a2" x="370.08" y="295.488" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_8">
|
||||
<!-- 1.5 -->
|
||||
<g style="fill: #ffffff" transform="translate(361.049531 310.139563) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-31"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-35" x="120.410156"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="xtick_9">
|
||||
<g id="line2d_9">
|
||||
<g>
|
||||
<use xlink:href="#ma786b2d5a2" x="414.72" y="295.488" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_9">
|
||||
<!-- 2.0 -->
|
||||
<g style="fill: #ffffff" transform="translate(405.689531 310.139563) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-32"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="120.410156"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_10">
|
||||
<!-- x -->
|
||||
<g style="fill: #ffffff" transform="translate(233.149844 323.870812) scale(0.1 -0.1)">
|
||||
<defs>
|
||||
<path id="DejaVuSansMono-78" d="M 3494 3500
|
||||
L 2241 1825
|
||||
L 3616 0
|
||||
L 2950 0
|
||||
L 1925 1403
|
||||
L 903 0
|
||||
L 238 0
|
||||
L 1613 1825
|
||||
L 359 3500
|
||||
L 997 3500
|
||||
L 1925 2234
|
||||
L 2847 3500
|
||||
L 3494 3500
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<use xlink:href="#DejaVuSansMono-78"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="matplotlib.axis_2">
|
||||
<g id="ytick_1">
|
||||
<g id="line2d_10">
|
||||
<defs>
|
||||
<path id="m4ac0e6df2a" d="M 0 0
|
||||
L -3.5 0
|
||||
" style="stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</defs>
|
||||
<g>
|
||||
<use xlink:href="#m4ac0e6df2a" x="236.16" y="295.488" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_11">
|
||||
<!-- 0.0 -->
|
||||
<g style="fill: #ffffff" transform="translate(211.099063 299.313781) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-30"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="120.410156"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="ytick_2">
|
||||
<g id="line2d_11">
|
||||
<g>
|
||||
<use xlink:href="#m4ac0e6df2a" x="236.16" y="247.103806" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_12">
|
||||
<!-- 0.2 -->
|
||||
<g style="fill: #ffffff" transform="translate(211.099063 250.929587) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-30"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-32" x="120.410156"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="ytick_3">
|
||||
<g id="line2d_12">
|
||||
<g>
|
||||
<use xlink:href="#m4ac0e6df2a" x="236.16" y="198.719612" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_13">
|
||||
<!-- 0.4 -->
|
||||
<g style="fill: #ffffff" transform="translate(211.099063 202.545393) scale(0.1 -0.1)">
|
||||
<defs>
|
||||
<path id="DejaVuSansMono-34" d="M 2297 4091
|
||||
L 825 1625
|
||||
L 2297 1625
|
||||
L 2297 4091
|
||||
z
|
||||
M 2194 4666
|
||||
L 2925 4666
|
||||
L 2925 1625
|
||||
L 3547 1625
|
||||
L 3547 1113
|
||||
L 2925 1113
|
||||
L 2925 0
|
||||
L 2297 0
|
||||
L 2297 1113
|
||||
L 319 1113
|
||||
L 319 1709
|
||||
L 2194 4666
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<use xlink:href="#DejaVuSansMono-30"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-34" x="120.410156"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="ytick_4">
|
||||
<g id="line2d_13">
|
||||
<g>
|
||||
<use xlink:href="#m4ac0e6df2a" x="236.16" y="150.335418" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_14">
|
||||
<!-- 0.6 -->
|
||||
<g style="fill: #ffffff" transform="translate(211.099063 154.161199) scale(0.1 -0.1)">
|
||||
<defs>
|
||||
<path id="DejaVuSansMono-36" d="M 3097 4563
|
||||
L 3097 3981
|
||||
Q 2900 4097 2678 4158
|
||||
Q 2456 4219 2216 4219
|
||||
Q 1616 4219 1306 3767
|
||||
Q 997 3316 997 2438
|
||||
Q 1147 2750 1412 2917
|
||||
Q 1678 3084 2022 3084
|
||||
Q 2697 3084 3067 2670
|
||||
Q 3438 2256 3438 1497
|
||||
Q 3438 741 3056 325
|
||||
Q 2675 -91 1984 -91
|
||||
Q 1172 -91 794 492
|
||||
Q 416 1075 416 2328
|
||||
Q 416 3509 870 4129
|
||||
Q 1325 4750 2188 4750
|
||||
Q 2419 4750 2650 4701
|
||||
Q 2881 4653 3097 4563
|
||||
z
|
||||
M 1972 2591
|
||||
Q 1569 2591 1337 2300
|
||||
Q 1106 2009 1106 1497
|
||||
Q 1106 984 1337 693
|
||||
Q 1569 403 1972 403
|
||||
Q 2391 403 2603 679
|
||||
Q 2816 956 2816 1497
|
||||
Q 2816 2041 2603 2316
|
||||
Q 2391 2591 1972 2591
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<use xlink:href="#DejaVuSansMono-30"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-36" x="120.410156"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="ytick_5">
|
||||
<g id="line2d_14">
|
||||
<g>
|
||||
<use xlink:href="#m4ac0e6df2a" x="236.16" y="101.951224" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_15">
|
||||
<!-- 0.8 -->
|
||||
<g style="fill: #ffffff" transform="translate(211.099063 105.777006) scale(0.1 -0.1)">
|
||||
<defs>
|
||||
<path id="DejaVuSansMono-38" d="M 1925 2216
|
||||
Q 1503 2216 1273 1980
|
||||
Q 1044 1744 1044 1313
|
||||
Q 1044 881 1276 642
|
||||
Q 1509 403 1925 403
|
||||
Q 2350 403 2579 639
|
||||
Q 2809 875 2809 1313
|
||||
Q 2809 1741 2576 1978
|
||||
Q 2344 2216 1925 2216
|
||||
z
|
||||
M 1375 2478
|
||||
Q 972 2581 745 2862
|
||||
Q 519 3144 519 3541
|
||||
Q 519 4097 897 4423
|
||||
Q 1275 4750 1925 4750
|
||||
Q 2578 4750 2956 4423
|
||||
Q 3334 4097 3334 3541
|
||||
Q 3334 3144 3107 2862
|
||||
Q 2881 2581 2478 2478
|
||||
Q 2947 2375 3195 2062
|
||||
Q 3444 1750 3444 1253
|
||||
Q 3444 622 3041 265
|
||||
Q 2638 -91 1925 -91
|
||||
Q 1213 -91 811 264
|
||||
Q 409 619 409 1247
|
||||
Q 409 1747 657 2061
|
||||
Q 906 2375 1375 2478
|
||||
z
|
||||
M 1147 3481
|
||||
Q 1147 3106 1347 2909
|
||||
Q 1547 2713 1925 2713
|
||||
Q 2306 2713 2506 2909
|
||||
Q 2706 3106 2706 3481
|
||||
Q 2706 3863 2507 4063
|
||||
Q 2309 4263 1925 4263
|
||||
Q 1547 4263 1347 4061
|
||||
Q 1147 3859 1147 3481
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<use xlink:href="#DejaVuSansMono-30"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-38" x="120.410156"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="ytick_6">
|
||||
<g id="line2d_15">
|
||||
<g>
|
||||
<use xlink:href="#m4ac0e6df2a" x="236.16" y="53.56703" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_16">
|
||||
<!-- 1.0 -->
|
||||
<g style="fill: #ffffff" transform="translate(211.099063 57.392812) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-31"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="120.410156"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="line2d_16">
|
||||
<path d="M 57.6 295.488
|
||||
L 146.611892 295.488
|
||||
L 146.969369 295.003916
|
||||
L 151.616577 270.499625
|
||||
L 155.906306 249.043826
|
||||
L 160.196036 228.705032
|
||||
L 164.485766 209.483242
|
||||
L 168.418018 192.844526
|
||||
L 172.35027 177.144404
|
||||
L 176.282523 162.382877
|
||||
L 179.857297 149.777789
|
||||
L 183.432072 137.948398
|
||||
L 187.006847 126.894706
|
||||
L 190.224144 117.609604
|
||||
L 193.441441 108.952817
|
||||
L 196.658739 100.924346
|
||||
L 199.876036 93.52419
|
||||
L 202.735856 87.473747
|
||||
L 205.595676 81.919752
|
||||
L 208.455495 76.862203
|
||||
L 210.957838 72.844088
|
||||
L 213.46018 69.206066
|
||||
L 215.962523 65.948136
|
||||
L 218.464865 63.070297
|
||||
L 220.60973 60.9061
|
||||
L 222.754595 59.021155
|
||||
L 224.899459 57.415461
|
||||
L 227.044324 56.089018
|
||||
L 229.189189 55.041826
|
||||
L 231.334054 54.273885
|
||||
L 233.121441 53.847251
|
||||
L 234.908829 53.614542
|
||||
L 236.696216 53.575757
|
||||
L 238.483604 53.730897
|
||||
L 240.270991 54.07996
|
||||
L 242.058378 54.622949
|
||||
L 244.203243 55.530515
|
||||
L 246.348108 56.717333
|
||||
L 248.492973 58.183401
|
||||
L 250.637838 59.928721
|
||||
L 252.782703 61.953292
|
||||
L 254.927568 64.257115
|
||||
L 257.42991 67.29785
|
||||
L 259.932252 70.718677
|
||||
L 262.434595 74.519595
|
||||
L 264.936937 78.700606
|
||||
L 267.796757 83.944323
|
||||
L 270.656577 89.684486
|
||||
L 273.516396 95.921096
|
||||
L 276.376216 102.654152
|
||||
L 279.593514 110.822249
|
||||
L 282.810811 119.618661
|
||||
L 286.028108 129.043388
|
||||
L 289.602883 140.25222
|
||||
L 293.177658 152.23675
|
||||
L 296.752432 164.996978
|
||||
L 300.327207 178.532903
|
||||
L 304.259459 194.318352
|
||||
L 308.191712 211.042395
|
||||
L 312.123964 228.705032
|
||||
L 316.413694 249.043826
|
||||
L 320.703423 270.499625
|
||||
L 324.993153 293.072429
|
||||
L 325.350631 295.003916
|
||||
L 325.708108 295.488
|
||||
L 414.72 295.488
|
||||
L 414.72 295.488
|
||||
" clip-path="url(#p9aa527a3c7)" style="fill: none; stroke: #ffffff; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="patch_3">
|
||||
<path d="M 236.16 307.584
|
||||
L 236.16 41.472
|
||||
" style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="patch_4">
|
||||
<path d="M 414.72 307.584
|
||||
L 414.72 41.472
|
||||
" style="fill: none"/>
|
||||
</g>
|
||||
<g id="patch_5">
|
||||
<path d="M 57.6 295.488
|
||||
L 414.72 295.488
|
||||
" style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="patch_6">
|
||||
<path d="M 57.6 41.472
|
||||
L 414.72 41.472
|
||||
" style="fill: none"/>
|
||||
</g>
|
||||
<g id="text_17">
|
||||
<!-- $P(x) = d^2-x^2$ where $|x| \leq d$ -->
|
||||
<g style="fill: #ffffff" transform="translate(151.74 35.472) scale(0.12 -0.12)">
|
||||
<defs>
|
||||
<path id="DejaVuSans-Oblique-50" d="M 1081 4666
|
||||
L 2541 4666
|
||||
Q 3178 4666 3512 4369
|
||||
Q 3847 4072 3847 3500
|
||||
Q 3847 2731 3353 2303
|
||||
Q 2859 1875 1966 1875
|
||||
L 1172 1875
|
||||
L 806 0
|
||||
L 172 0
|
||||
L 1081 4666
|
||||
z
|
||||
M 1613 4147
|
||||
L 1275 2394
|
||||
L 2069 2394
|
||||
Q 2606 2394 2893 2669
|
||||
Q 3181 2944 3181 3456
|
||||
Q 3181 3784 2986 3965
|
||||
Q 2791 4147 2438 4147
|
||||
L 1613 4147
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-28" d="M 1984 4856
|
||||
Q 1566 4138 1362 3434
|
||||
Q 1159 2731 1159 2009
|
||||
Q 1159 1288 1364 580
|
||||
Q 1569 -128 1984 -844
|
||||
L 1484 -844
|
||||
Q 1016 -109 783 600
|
||||
Q 550 1309 550 2009
|
||||
Q 550 2706 781 3412
|
||||
Q 1013 4119 1484 4856
|
||||
L 1984 4856
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-Oblique-78" d="M 3841 3500
|
||||
L 2234 1784
|
||||
L 3219 0
|
||||
L 2559 0
|
||||
L 1819 1388
|
||||
L 531 0
|
||||
L -166 0
|
||||
L 1556 1844
|
||||
L 641 3500
|
||||
L 1300 3500
|
||||
L 1972 2234
|
||||
L 3144 3500
|
||||
L 3841 3500
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-29" d="M 513 4856
|
||||
L 1013 4856
|
||||
Q 1481 4119 1714 3412
|
||||
Q 1947 2706 1947 2009
|
||||
Q 1947 1309 1714 600
|
||||
Q 1481 -109 1013 -844
|
||||
L 513 -844
|
||||
Q 928 -128 1133 580
|
||||
Q 1338 1288 1338 2009
|
||||
Q 1338 2731 1133 3434
|
||||
Q 928 4138 513 4856
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-3d" d="M 678 2906
|
||||
L 4684 2906
|
||||
L 4684 2381
|
||||
L 678 2381
|
||||
L 678 2906
|
||||
z
|
||||
M 678 1631
|
||||
L 4684 1631
|
||||
L 4684 1100
|
||||
L 678 1100
|
||||
L 678 1631
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-Oblique-64" d="M 2675 525
|
||||
Q 2444 222 2128 65
|
||||
Q 1813 -91 1428 -91
|
||||
Q 903 -91 598 267
|
||||
Q 294 625 294 1247
|
||||
Q 294 1766 478 2236
|
||||
Q 663 2706 1013 3078
|
||||
Q 1244 3325 1534 3454
|
||||
Q 1825 3584 2144 3584
|
||||
Q 2481 3584 2739 3421
|
||||
Q 2997 3259 3138 2956
|
||||
L 3513 4863
|
||||
L 4091 4863
|
||||
L 3144 0
|
||||
L 2566 0
|
||||
L 2675 525
|
||||
z
|
||||
M 891 1350
|
||||
Q 891 897 1095 644
|
||||
Q 1300 391 1663 391
|
||||
Q 1931 391 2161 520
|
||||
Q 2391 650 2566 903
|
||||
Q 2750 1166 2856 1509
|
||||
Q 2963 1853 2963 2188
|
||||
Q 2963 2622 2758 2865
|
||||
Q 2553 3109 2194 3109
|
||||
Q 1922 3109 1687 2981
|
||||
Q 1453 2853 1288 2613
|
||||
Q 1106 2353 998 2009
|
||||
Q 891 1666 891 1350
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-32" d="M 1228 531
|
||||
L 3431 531
|
||||
L 3431 0
|
||||
L 469 0
|
||||
L 469 531
|
||||
Q 828 903 1448 1529
|
||||
Q 2069 2156 2228 2338
|
||||
Q 2531 2678 2651 2914
|
||||
Q 2772 3150 2772 3378
|
||||
Q 2772 3750 2511 3984
|
||||
Q 2250 4219 1831 4219
|
||||
Q 1534 4219 1204 4116
|
||||
Q 875 4013 500 3803
|
||||
L 500 4441
|
||||
Q 881 4594 1212 4672
|
||||
Q 1544 4750 1819 4750
|
||||
Q 2544 4750 2975 4387
|
||||
Q 3406 4025 3406 3419
|
||||
Q 3406 3131 3298 2873
|
||||
Q 3191 2616 2906 2266
|
||||
Q 2828 2175 2409 1742
|
||||
Q 1991 1309 1228 531
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-2212" d="M 678 2272
|
||||
L 4684 2272
|
||||
L 4684 1741
|
||||
L 678 1741
|
||||
L 678 2272
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSansMono-20" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSansMono-77" d="M 0 3500
|
||||
L 569 3500
|
||||
L 1178 672
|
||||
L 1678 2478
|
||||
L 2169 2478
|
||||
L 2675 672
|
||||
L 3284 3500
|
||||
L 3853 3500
|
||||
L 3034 0
|
||||
L 2484 0
|
||||
L 1925 1919
|
||||
L 1369 0
|
||||
L 819 0
|
||||
L 0 3500
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSansMono-68" d="M 3284 2169
|
||||
L 3284 0
|
||||
L 2706 0
|
||||
L 2706 2169
|
||||
Q 2706 2641 2540 2862
|
||||
Q 2375 3084 2022 3084
|
||||
Q 1619 3084 1401 2798
|
||||
Q 1184 2513 1184 1978
|
||||
L 1184 0
|
||||
L 609 0
|
||||
L 609 4863
|
||||
L 1184 4863
|
||||
L 1184 2975
|
||||
Q 1338 3275 1600 3429
|
||||
Q 1863 3584 2222 3584
|
||||
Q 2756 3584 3020 3232
|
||||
Q 3284 2881 3284 2169
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSansMono-65" d="M 3475 1894
|
||||
L 3475 1613
|
||||
L 984 1613
|
||||
L 984 1594
|
||||
Q 984 1022 1282 709
|
||||
Q 1581 397 2125 397
|
||||
Q 2400 397 2700 484
|
||||
Q 3000 572 3341 750
|
||||
L 3341 178
|
||||
Q 3013 44 2708 -23
|
||||
Q 2403 -91 2119 -91
|
||||
Q 1303 -91 843 398
|
||||
Q 384 888 384 1747
|
||||
Q 384 2584 834 3084
|
||||
Q 1284 3584 2034 3584
|
||||
Q 2703 3584 3089 3131
|
||||
Q 3475 2678 3475 1894
|
||||
z
|
||||
M 2900 2063
|
||||
Q 2888 2569 2661 2833
|
||||
Q 2434 3097 2009 3097
|
||||
Q 1594 3097 1325 2822
|
||||
Q 1056 2547 1006 2059
|
||||
L 2900 2063
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSansMono-72" d="M 3609 2778
|
||||
Q 3425 2922 3234 2987
|
||||
Q 3044 3053 2816 3053
|
||||
Q 2278 3053 1993 2715
|
||||
Q 1709 2378 1709 1741
|
||||
L 1709 0
|
||||
L 1131 0
|
||||
L 1131 3500
|
||||
L 1709 3500
|
||||
L 1709 2816
|
||||
Q 1853 3188 2151 3386
|
||||
Q 2450 3584 2859 3584
|
||||
Q 3072 3584 3256 3531
|
||||
Q 3441 3478 3609 3366
|
||||
L 3609 2778
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-7c" d="M 1344 4891
|
||||
L 1344 -1509
|
||||
L 813 -1509
|
||||
L 813 4891
|
||||
L 1344 4891
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-2264" d="M 4684 3175
|
||||
L 1684 2309
|
||||
L 4684 1453
|
||||
L 4684 897
|
||||
L 678 2047
|
||||
L 678 2578
|
||||
L 4684 3725
|
||||
L 4684 3175
|
||||
z
|
||||
M 678 531
|
||||
L 4684 531
|
||||
L 4684 0
|
||||
L 678 0
|
||||
L 678 531
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<use xlink:href="#DejaVuSans-Oblique-50" transform="translate(0 0.765625)"/>
|
||||
<use xlink:href="#DejaVuSans-28" transform="translate(60.302734 0.765625)"/>
|
||||
<use xlink:href="#DejaVuSans-Oblique-78" transform="translate(99.316406 0.765625)"/>
|
||||
<use xlink:href="#DejaVuSans-29" transform="translate(158.496094 0.765625)"/>
|
||||
<use xlink:href="#DejaVuSans-3d" transform="translate(216.992188 0.765625)"/>
|
||||
<use xlink:href="#DejaVuSans-Oblique-64" transform="translate(320.263672 0.765625)"/>
|
||||
<use xlink:href="#DejaVuSans-32" transform="translate(391.187943 39.046875) scale(0.7)"/>
|
||||
<use xlink:href="#DejaVuSans-2212" transform="translate(457.940872 0.765625)"/>
|
||||
<use xlink:href="#DejaVuSans-Oblique-78" transform="translate(561.212357 0.765625)"/>
|
||||
<use xlink:href="#DejaVuSans-32" transform="translate(624.85819 39.046875) scale(0.7)"/>
|
||||
<use xlink:href="#DejaVuSansMono-20" transform="translate(672.128698 0.765625)"/>
|
||||
<use xlink:href="#DejaVuSansMono-77" transform="translate(732.333776 0.765625)"/>
|
||||
<use xlink:href="#DejaVuSansMono-68" transform="translate(792.538854 0.765625)"/>
|
||||
<use xlink:href="#DejaVuSansMono-65" transform="translate(852.743932 0.765625)"/>
|
||||
<use xlink:href="#DejaVuSansMono-72" transform="translate(912.94901 0.765625)"/>
|
||||
<use xlink:href="#DejaVuSansMono-65" transform="translate(973.154089 0.765625)"/>
|
||||
<use xlink:href="#DejaVuSansMono-20" transform="translate(1033.359167 0.765625)"/>
|
||||
<use xlink:href="#DejaVuSans-7c" transform="translate(1093.564245 0.765625)"/>
|
||||
<use xlink:href="#DejaVuSans-Oblique-78" transform="translate(1127.255651 0.765625)"/>
|
||||
<use xlink:href="#DejaVuSans-7c" transform="translate(1186.435339 0.765625)"/>
|
||||
<use xlink:href="#DejaVuSans-2264" transform="translate(1239.609167 0.765625)"/>
|
||||
<use xlink:href="#DejaVuSans-Oblique-64" transform="translate(1342.880651 0.765625)"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="p9aa527a3c7">
|
||||
<rect x="57.6" y="41.472" width="357.12" height="266.112"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 23 KiB |
890
static/images/posts/generator/P4.svg
Normal file
890
static/images/posts/generator/P4.svg
Normal file
@ -0,0 +1,890 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="460.8pt" height="345.6pt" viewBox="0 0 460.8 345.6" xmlns="http://www.w3.org/2000/svg" version="1.1">
|
||||
<metadata>
|
||||
<rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||
<cc:Work>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:date>2025-01-05T14:55:46.808329</dc:date>
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Matplotlib v3.9.2, https://matplotlib.org/</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs>
|
||||
<style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style>
|
||||
</defs>
|
||||
<g id="figure_1">
|
||||
<g id="patch_1">
|
||||
<path d="M 0 345.6
|
||||
L 460.8 345.6
|
||||
L 460.8 0
|
||||
L 0 0
|
||||
L 0 345.6
|
||||
z
|
||||
" style="fill: none"/>
|
||||
</g>
|
||||
<g id="axes_1">
|
||||
<g id="patch_2">
|
||||
<path d="M 57.6 307.584
|
||||
L 414.72 307.584
|
||||
L 414.72 41.472
|
||||
L 57.6 41.472
|
||||
L 57.6 307.584
|
||||
z
|
||||
" style="fill: none"/>
|
||||
</g>
|
||||
<g id="matplotlib.axis_1">
|
||||
<g id="xtick_1">
|
||||
<g id="line2d_1">
|
||||
<defs>
|
||||
<path id="mdf7ef5a109" d="M 0 0
|
||||
L 0 3.5
|
||||
" style="stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</defs>
|
||||
<g>
|
||||
<use xlink:href="#mdf7ef5a109" x="57.6" y="302.899786" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_1">
|
||||
<!-- −1.00 -->
|
||||
<g style="fill: #ffffff" transform="translate(42.549219 317.551349) scale(0.1 -0.1)">
|
||||
<defs>
|
||||
<path id="DejaVuSansMono-2212" d="M 275 2272
|
||||
L 3578 2272
|
||||
L 3578 1741
|
||||
L 275 1741
|
||||
L 275 2272
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSansMono-31" d="M 844 531
|
||||
L 1825 531
|
||||
L 1825 4097
|
||||
L 769 3859
|
||||
L 769 4434
|
||||
L 1819 4666
|
||||
L 2450 4666
|
||||
L 2450 531
|
||||
L 3419 531
|
||||
L 3419 0
|
||||
L 844 0
|
||||
L 844 531
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSansMono-2e" d="M 1528 953
|
||||
L 2316 953
|
||||
L 2316 0
|
||||
L 1528 0
|
||||
L 1528 953
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSansMono-30" d="M 1509 2344
|
||||
Q 1509 2516 1629 2641
|
||||
Q 1750 2766 1919 2766
|
||||
Q 2094 2766 2219 2641
|
||||
Q 2344 2516 2344 2344
|
||||
Q 2344 2169 2220 2047
|
||||
Q 2097 1925 1919 1925
|
||||
Q 1744 1925 1626 2044
|
||||
Q 1509 2163 1509 2344
|
||||
z
|
||||
M 1925 4250
|
||||
Q 1484 4250 1267 3775
|
||||
Q 1050 3300 1050 2328
|
||||
Q 1050 1359 1267 884
|
||||
Q 1484 409 1925 409
|
||||
Q 2369 409 2586 884
|
||||
Q 2803 1359 2803 2328
|
||||
Q 2803 3300 2586 3775
|
||||
Q 2369 4250 1925 4250
|
||||
z
|
||||
M 1925 4750
|
||||
Q 2672 4750 3055 4137
|
||||
Q 3438 3525 3438 2328
|
||||
Q 3438 1134 3055 521
|
||||
Q 2672 -91 1925 -91
|
||||
Q 1178 -91 797 521
|
||||
Q 416 1134 416 2328
|
||||
Q 416 3525 797 4137
|
||||
Q 1178 4750 1925 4750
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<use xlink:href="#DejaVuSansMono-2212"/>
|
||||
<use xlink:href="#DejaVuSansMono-31" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="120.410156"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="180.615234"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="240.820312"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="xtick_2">
|
||||
<g id="line2d_2">
|
||||
<g>
|
||||
<use xlink:href="#mdf7ef5a109" x="102.24" y="302.899786" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_2">
|
||||
<!-- −0.75 -->
|
||||
<g style="fill: #ffffff" transform="translate(87.189219 317.551349) scale(0.1 -0.1)">
|
||||
<defs>
|
||||
<path id="DejaVuSansMono-37" d="M 434 4666
|
||||
L 3372 4666
|
||||
L 3372 4397
|
||||
L 1703 0
|
||||
L 1044 0
|
||||
L 2669 4134
|
||||
L 434 4134
|
||||
L 434 4666
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSansMono-35" d="M 647 4666
|
||||
L 3009 4666
|
||||
L 3009 4134
|
||||
L 1222 4134
|
||||
L 1222 2988
|
||||
Q 1356 3038 1492 3061
|
||||
Q 1628 3084 1766 3084
|
||||
Q 2491 3084 2916 2656
|
||||
Q 3341 2228 3341 1497
|
||||
Q 3341 759 2895 334
|
||||
Q 2450 -91 1678 -91
|
||||
Q 1306 -91 998 -41
|
||||
Q 691 9 447 109
|
||||
L 447 750
|
||||
Q 734 594 1025 517
|
||||
Q 1316 441 1619 441
|
||||
Q 2141 441 2423 716
|
||||
Q 2706 991 2706 1497
|
||||
Q 2706 1997 2414 2275
|
||||
Q 2122 2553 1600 2553
|
||||
Q 1347 2553 1106 2495
|
||||
Q 866 2438 647 2322
|
||||
L 647 4666
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<use xlink:href="#DejaVuSansMono-2212"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="120.410156"/>
|
||||
<use xlink:href="#DejaVuSansMono-37" x="180.615234"/>
|
||||
<use xlink:href="#DejaVuSansMono-35" x="240.820312"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="xtick_3">
|
||||
<g id="line2d_3">
|
||||
<g>
|
||||
<use xlink:href="#mdf7ef5a109" x="146.88" y="302.899786" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_3">
|
||||
<!-- −0.50 -->
|
||||
<g style="fill: #ffffff" transform="translate(131.829219 317.551349) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-2212"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="120.410156"/>
|
||||
<use xlink:href="#DejaVuSansMono-35" x="180.615234"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="240.820312"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="xtick_4">
|
||||
<g id="line2d_4">
|
||||
<g>
|
||||
<use xlink:href="#mdf7ef5a109" x="191.52" y="302.899786" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_4">
|
||||
<!-- −0.25 -->
|
||||
<g style="fill: #ffffff" transform="translate(176.469219 317.551349) scale(0.1 -0.1)">
|
||||
<defs>
|
||||
<path id="DejaVuSansMono-32" d="M 1166 531
|
||||
L 3309 531
|
||||
L 3309 0
|
||||
L 475 0
|
||||
L 475 531
|
||||
Q 1059 1147 1496 1619
|
||||
Q 1934 2091 2100 2284
|
||||
Q 2413 2666 2522 2902
|
||||
Q 2631 3138 2631 3384
|
||||
Q 2631 3775 2401 3997
|
||||
Q 2172 4219 1772 4219
|
||||
Q 1488 4219 1175 4116
|
||||
Q 863 4013 513 3803
|
||||
L 513 4441
|
||||
Q 834 4594 1145 4672
|
||||
Q 1456 4750 1759 4750
|
||||
Q 2444 4750 2861 4386
|
||||
Q 3278 4022 3278 3431
|
||||
Q 3278 3131 3139 2831
|
||||
Q 3000 2531 2688 2169
|
||||
Q 2513 1966 2180 1606
|
||||
Q 1847 1247 1166 531
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<use xlink:href="#DejaVuSansMono-2212"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="120.410156"/>
|
||||
<use xlink:href="#DejaVuSansMono-32" x="180.615234"/>
|
||||
<use xlink:href="#DejaVuSansMono-35" x="240.820312"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="xtick_5">
|
||||
<g id="line2d_5">
|
||||
<g>
|
||||
<use xlink:href="#mdf7ef5a109" x="236.16" y="302.899786" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_5">
|
||||
<!-- 0.00 -->
|
||||
<g style="fill: #ffffff" transform="translate(224.119375 317.551349) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-30"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="120.410156"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="180.615234"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="xtick_6">
|
||||
<g id="line2d_6">
|
||||
<g>
|
||||
<use xlink:href="#mdf7ef5a109" x="280.8" y="302.899786" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_6">
|
||||
<!-- 0.25 -->
|
||||
<g style="fill: #ffffff" transform="translate(268.759375 317.551349) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-30"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-32" x="120.410156"/>
|
||||
<use xlink:href="#DejaVuSansMono-35" x="180.615234"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="xtick_7">
|
||||
<g id="line2d_7">
|
||||
<g>
|
||||
<use xlink:href="#mdf7ef5a109" x="325.44" y="302.899786" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_7">
|
||||
<!-- 0.50 -->
|
||||
<g style="fill: #ffffff" transform="translate(313.399375 317.551349) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-30"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-35" x="120.410156"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="180.615234"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="xtick_8">
|
||||
<g id="line2d_8">
|
||||
<g>
|
||||
<use xlink:href="#mdf7ef5a109" x="370.08" y="302.899786" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_8">
|
||||
<!-- 0.75 -->
|
||||
<g style="fill: #ffffff" transform="translate(358.039375 317.551349) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-30"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-37" x="120.410156"/>
|
||||
<use xlink:href="#DejaVuSansMono-35" x="180.615234"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="xtick_9">
|
||||
<g id="line2d_9">
|
||||
<g>
|
||||
<use xlink:href="#mdf7ef5a109" x="414.72" y="302.899786" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_9">
|
||||
<!-- 1.00 -->
|
||||
<g style="fill: #ffffff" transform="translate(402.679375 317.551349) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-31"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="120.410156"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="180.615234"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_10">
|
||||
<!-- k -->
|
||||
<g style="fill: #ffffff" transform="translate(233.149844 331.282599) scale(0.1 -0.1)">
|
||||
<defs>
|
||||
<path id="DejaVuSansMono-6b" d="M 738 4863
|
||||
L 1331 4863
|
||||
L 1331 2047
|
||||
L 2841 3500
|
||||
L 3541 3500
|
||||
L 2163 2181
|
||||
L 3756 0
|
||||
L 3053 0
|
||||
L 1759 1806
|
||||
L 1331 1403
|
||||
L 1331 0
|
||||
L 738 0
|
||||
L 738 4863
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<use xlink:href="#DejaVuSansMono-6b"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="matplotlib.axis_2">
|
||||
<g id="ytick_1">
|
||||
<g id="line2d_10">
|
||||
<defs>
|
||||
<path id="maddb77383e" d="M 0 0
|
||||
L -3.5 0
|
||||
" style="stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</defs>
|
||||
<g>
|
||||
<use xlink:href="#maddb77383e" x="236.16" y="302.899786" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_11">
|
||||
<!-- 0.0 -->
|
||||
<g style="fill: #ffffff" transform="translate(211.099063 306.725567) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-30"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="120.410156"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="ytick_2">
|
||||
<g id="line2d_11">
|
||||
<g>
|
||||
<use xlink:href="#maddb77383e" x="236.16" y="261.723196" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_12">
|
||||
<!-- 0.5 -->
|
||||
<g style="fill: #ffffff" transform="translate(211.099063 265.548978) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-30"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-35" x="120.410156"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="ytick_3">
|
||||
<g id="line2d_12">
|
||||
<g>
|
||||
<use xlink:href="#maddb77383e" x="236.16" y="220.546606" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_13">
|
||||
<!-- 1.0 -->
|
||||
<g style="fill: #ffffff" transform="translate(211.099063 224.372388) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-31"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="120.410156"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="ytick_4">
|
||||
<g id="line2d_13">
|
||||
<g>
|
||||
<use xlink:href="#maddb77383e" x="236.16" y="179.370017" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_14">
|
||||
<!-- 1.5 -->
|
||||
<g style="fill: #ffffff" transform="translate(211.099063 183.195798) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-31"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-35" x="120.410156"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="ytick_5">
|
||||
<g id="line2d_14">
|
||||
<g>
|
||||
<use xlink:href="#maddb77383e" x="236.16" y="138.193427" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_15">
|
||||
<!-- 2.0 -->
|
||||
<g style="fill: #ffffff" transform="translate(211.099063 142.019208) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-32"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="120.410156"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="ytick_6">
|
||||
<g id="line2d_15">
|
||||
<g>
|
||||
<use xlink:href="#maddb77383e" x="236.16" y="97.016837" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_16">
|
||||
<!-- 2.5 -->
|
||||
<g style="fill: #ffffff" transform="translate(211.099063 100.842618) scale(0.1 -0.1)">
|
||||
<use xlink:href="#DejaVuSansMono-32"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-35" x="120.410156"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="ytick_7">
|
||||
<g id="line2d_16">
|
||||
<g>
|
||||
<use xlink:href="#maddb77383e" x="236.16" y="55.840247" style="fill: #ffffff; stroke: #ffffff; stroke-width: 0.8"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="text_17">
|
||||
<!-- 3.0 -->
|
||||
<g style="fill: #ffffff" transform="translate(211.099063 59.666028) scale(0.1 -0.1)">
|
||||
<defs>
|
||||
<path id="DejaVuSansMono-33" d="M 2425 2497
|
||||
Q 2884 2375 3128 2064
|
||||
Q 3372 1753 3372 1288
|
||||
Q 3372 644 2939 276
|
||||
Q 2506 -91 1741 -91
|
||||
Q 1419 -91 1084 -31
|
||||
Q 750 28 428 141
|
||||
L 428 769
|
||||
Q 747 603 1056 522
|
||||
Q 1366 441 1672 441
|
||||
Q 2191 441 2469 675
|
||||
Q 2747 909 2747 1350
|
||||
Q 2747 1756 2469 1995
|
||||
Q 2191 2234 1716 2234
|
||||
L 1234 2234
|
||||
L 1234 2753
|
||||
L 1716 2753
|
||||
Q 2150 2753 2394 2943
|
||||
Q 2638 3134 2638 3475
|
||||
Q 2638 3834 2411 4026
|
||||
Q 2184 4219 1766 4219
|
||||
Q 1488 4219 1191 4156
|
||||
Q 894 4094 569 3969
|
||||
L 569 4550
|
||||
Q 947 4650 1242 4700
|
||||
Q 1538 4750 1766 4750
|
||||
Q 2447 4750 2855 4408
|
||||
Q 3263 4066 3263 3500
|
||||
Q 3263 3116 3048 2859
|
||||
Q 2834 2603 2425 2497
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<use xlink:href="#DejaVuSansMono-33"/>
|
||||
<use xlink:href="#DejaVuSansMono-2e" x="60.205078"/>
|
||||
<use xlink:href="#DejaVuSansMono-30" x="120.410156"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="line2d_17">
|
||||
<path d="M 57.6 295.488
|
||||
L 61.532252 294.410681
|
||||
L 65.107027 293.211283
|
||||
L 68.681802 291.784415
|
||||
L 72.256577 290.112304
|
||||
L 75.831351 288.177414
|
||||
L 79.406126 285.963008
|
||||
L 82.623423 283.718248
|
||||
L 85.840721 281.224443
|
||||
L 89.058018 278.472826
|
||||
L 92.632793 275.104337
|
||||
L 96.207568 271.401118
|
||||
L 99.782342 267.358372
|
||||
L 103.357117 262.974188
|
||||
L 106.931892 258.24965
|
||||
L 110.864144 252.664576
|
||||
L 114.796396 246.682544
|
||||
L 119.086126 239.720847
|
||||
L 123.375856 232.328269
|
||||
L 128.023063 223.86885
|
||||
L 133.027748 214.28638
|
||||
L 138.747387 202.819868
|
||||
L 145.181982 189.40051
|
||||
L 153.761441 170.958526
|
||||
L 170.562883 134.751353
|
||||
L 176.997477 121.491183
|
||||
L 182.35964 110.941831
|
||||
L 187.006847 102.267278
|
||||
L 191.296577 94.714577
|
||||
L 195.228829 88.22418
|
||||
L 198.803604 82.718741
|
||||
L 202.378378 77.619235
|
||||
L 205.595676 73.398942
|
||||
L 208.812973 69.547205
|
||||
L 211.672793 66.446212
|
||||
L 214.532613 63.65999
|
||||
L 217.392432 61.198005
|
||||
L 219.894775 59.316354
|
||||
L 222.397117 57.694284
|
||||
L 224.899459 56.336028
|
||||
L 227.401802 55.245136
|
||||
L 229.904144 54.42446
|
||||
L 232.049009 53.93774
|
||||
L 234.193874 53.65207
|
||||
L 236.338739 53.568
|
||||
L 238.483604 53.685692
|
||||
L 240.628468 54.004918
|
||||
L 242.773333 54.525067
|
||||
L 244.918198 55.245136
|
||||
L 247.420541 56.336028
|
||||
L 249.922883 57.694284
|
||||
L 252.425225 59.316354
|
||||
L 254.927568 61.198005
|
||||
L 257.42991 63.334328
|
||||
L 260.28973 66.080515
|
||||
L 263.14955 69.142716
|
||||
L 266.009369 72.510544
|
||||
L 269.226667 76.650441
|
||||
L 272.443964 81.145006
|
||||
L 276.018739 86.531602
|
||||
L 279.950991 92.901507
|
||||
L 283.883243 99.6982
|
||||
L 288.172973 107.549354
|
||||
L 293.177658 117.208971
|
||||
L 298.53982 128.051162
|
||||
L 305.331892 142.327561
|
||||
L 315.341261 163.966597
|
||||
L 327.852973 190.913538
|
||||
L 334.645045 205.006965
|
||||
L 340.364685 216.377902
|
||||
L 345.369369 225.860431
|
||||
L 350.016577 234.215244
|
||||
L 354.306306 241.502726
|
||||
L 358.596036 248.352641
|
||||
L 362.528288 254.22764
|
||||
L 366.460541 259.702562
|
||||
L 370.035315 264.325288
|
||||
L 373.61009 268.607017
|
||||
L 377.184865 272.547571
|
||||
L 380.75964 276.149739
|
||||
L 384.334414 279.419158
|
||||
L 387.909189 282.364141
|
||||
L 391.483964 284.995465
|
||||
L 395.058739 287.326093
|
||||
L 398.633514 289.370842
|
||||
L 402.208288 291.145993
|
||||
L 405.783063 292.668825
|
||||
L 409.357838 293.957089
|
||||
L 413.29009 295.124256
|
||||
L 414.72 295.488
|
||||
L 414.72 295.488
|
||||
" clip-path="url(#p90606aa11e)" style="fill: none; stroke: #ffffff; stroke-width: 2; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="patch_3">
|
||||
<path d="M 236.16 307.584
|
||||
L 236.16 41.472
|
||||
" style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="patch_4">
|
||||
<path d="M 414.72 307.584
|
||||
L 414.72 41.472
|
||||
" style="fill: none"/>
|
||||
</g>
|
||||
<g id="patch_5">
|
||||
<path d="M 57.6 302.899786
|
||||
L 414.72 302.899786
|
||||
" style="fill: none; stroke: #ffffff; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/>
|
||||
</g>
|
||||
<g id="patch_6">
|
||||
<path d="M 57.6 41.472
|
||||
L 414.72 41.472
|
||||
" style="fill: none"/>
|
||||
</g>
|
||||
<g id="text_18">
|
||||
<!-- G(x) = $c + \left(- d + x\right) \left(d + x\right) \left(- a + d + x\right) \left(a - d + x\right)$ -->
|
||||
<g style="fill: #ffffff" transform="translate(90.42 35.472) scale(0.12 -0.12)">
|
||||
<defs>
|
||||
<path id="DejaVuSansMono-47" d="M 3450 384
|
||||
Q 3197 150 2880 29
|
||||
Q 2563 -91 2194 -91
|
||||
Q 1306 -91 812 545
|
||||
Q 319 1181 319 2328
|
||||
Q 319 3472 819 4111
|
||||
Q 1319 4750 2209 4750
|
||||
Q 2503 4750 2772 4667
|
||||
Q 3041 4584 3291 4416
|
||||
L 3291 3769
|
||||
Q 3038 4009 2772 4123
|
||||
Q 2506 4238 2209 4238
|
||||
Q 1594 4238 1286 3761
|
||||
Q 978 3284 978 2328
|
||||
Q 978 1356 1276 889
|
||||
Q 1575 422 2194 422
|
||||
Q 2403 422 2561 470
|
||||
Q 2719 519 2847 622
|
||||
L 2847 1875
|
||||
L 2169 1875
|
||||
L 2169 2394
|
||||
L 3450 2394
|
||||
L 3450 384
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSansMono-28" d="M 2766 4856
|
||||
Q 2350 4144 2145 3436
|
||||
Q 1941 2728 1941 2009
|
||||
Q 1941 1294 2145 584
|
||||
Q 2350 -125 2766 -844
|
||||
L 2266 -844
|
||||
Q 1794 -100 1562 604
|
||||
Q 1331 1309 1331 2009
|
||||
Q 1331 2706 1562 3412
|
||||
Q 1794 4119 2266 4856
|
||||
L 2766 4856
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSansMono-78" d="M 3494 3500
|
||||
L 2241 1825
|
||||
L 3616 0
|
||||
L 2950 0
|
||||
L 1925 1403
|
||||
L 903 0
|
||||
L 238 0
|
||||
L 1613 1825
|
||||
L 359 3500
|
||||
L 997 3500
|
||||
L 1925 2234
|
||||
L 2847 3500
|
||||
L 3494 3500
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSansMono-29" d="M 1088 4856
|
||||
L 1588 4856
|
||||
Q 2059 4119 2290 3412
|
||||
Q 2522 2706 2522 2009
|
||||
Q 2522 1306 2290 600
|
||||
Q 2059 -106 1588 -844
|
||||
L 1088 -844
|
||||
Q 1503 -119 1708 590
|
||||
Q 1913 1300 1913 2009
|
||||
Q 1913 2722 1708 3431
|
||||
Q 1503 4141 1088 4856
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSansMono-20" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSansMono-3d" d="M 275 1638
|
||||
L 3578 1638
|
||||
L 3578 1100
|
||||
L 275 1100
|
||||
L 275 1638
|
||||
z
|
||||
M 275 2906
|
||||
L 3578 2906
|
||||
L 3578 2375
|
||||
L 275 2375
|
||||
L 275 2906
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-Oblique-63" d="M 3431 3366
|
||||
L 3316 2797
|
||||
Q 3109 2947 2876 3022
|
||||
Q 2644 3097 2394 3097
|
||||
Q 2119 3097 1870 3000
|
||||
Q 1622 2903 1453 2725
|
||||
Q 1184 2453 1037 2087
|
||||
Q 891 1722 891 1331
|
||||
Q 891 859 1127 628
|
||||
Q 1363 397 1844 397
|
||||
Q 2081 397 2348 469
|
||||
Q 2616 541 2906 684
|
||||
L 2797 116
|
||||
Q 2547 13 2283 -39
|
||||
Q 2019 -91 1741 -91
|
||||
Q 1044 -91 669 257
|
||||
Q 294 606 294 1253
|
||||
Q 294 1797 489 2255
|
||||
Q 684 2713 1069 3078
|
||||
Q 1331 3328 1684 3456
|
||||
Q 2038 3584 2456 3584
|
||||
Q 2700 3584 2940 3529
|
||||
Q 3181 3475 3431 3366
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-2b" d="M 2944 4013
|
||||
L 2944 2272
|
||||
L 4684 2272
|
||||
L 4684 1741
|
||||
L 2944 1741
|
||||
L 2944 0
|
||||
L 2419 0
|
||||
L 2419 1741
|
||||
L 678 1741
|
||||
L 678 2272
|
||||
L 2419 2272
|
||||
L 2419 4013
|
||||
L 2944 4013
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-28" d="M 1984 4856
|
||||
Q 1566 4138 1362 3434
|
||||
Q 1159 2731 1159 2009
|
||||
Q 1159 1288 1364 580
|
||||
Q 1569 -128 1984 -844
|
||||
L 1484 -844
|
||||
Q 1016 -109 783 600
|
||||
Q 550 1309 550 2009
|
||||
Q 550 2706 781 3412
|
||||
Q 1013 4119 1484 4856
|
||||
L 1984 4856
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-2212" d="M 678 2272
|
||||
L 4684 2272
|
||||
L 4684 1741
|
||||
L 678 1741
|
||||
L 678 2272
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-Oblique-64" d="M 2675 525
|
||||
Q 2444 222 2128 65
|
||||
Q 1813 -91 1428 -91
|
||||
Q 903 -91 598 267
|
||||
Q 294 625 294 1247
|
||||
Q 294 1766 478 2236
|
||||
Q 663 2706 1013 3078
|
||||
Q 1244 3325 1534 3454
|
||||
Q 1825 3584 2144 3584
|
||||
Q 2481 3584 2739 3421
|
||||
Q 2997 3259 3138 2956
|
||||
L 3513 4863
|
||||
L 4091 4863
|
||||
L 3144 0
|
||||
L 2566 0
|
||||
L 2675 525
|
||||
z
|
||||
M 891 1350
|
||||
Q 891 897 1095 644
|
||||
Q 1300 391 1663 391
|
||||
Q 1931 391 2161 520
|
||||
Q 2391 650 2566 903
|
||||
Q 2750 1166 2856 1509
|
||||
Q 2963 1853 2963 2188
|
||||
Q 2963 2622 2758 2865
|
||||
Q 2553 3109 2194 3109
|
||||
Q 1922 3109 1687 2981
|
||||
Q 1453 2853 1288 2613
|
||||
Q 1106 2353 998 2009
|
||||
Q 891 1666 891 1350
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-Oblique-78" d="M 3841 3500
|
||||
L 2234 1784
|
||||
L 3219 0
|
||||
L 2559 0
|
||||
L 1819 1388
|
||||
L 531 0
|
||||
L -166 0
|
||||
L 1556 1844
|
||||
L 641 3500
|
||||
L 1300 3500
|
||||
L 1972 2234
|
||||
L 3144 3500
|
||||
L 3841 3500
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-29" d="M 513 4856
|
||||
L 1013 4856
|
||||
Q 1481 4119 1714 3412
|
||||
Q 1947 2706 1947 2009
|
||||
Q 1947 1309 1714 600
|
||||
Q 1481 -109 1013 -844
|
||||
L 513 -844
|
||||
Q 928 -128 1133 580
|
||||
Q 1338 1288 1338 2009
|
||||
Q 1338 2731 1133 3434
|
||||
Q 928 4138 513 4856
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
<path id="DejaVuSans-Oblique-61" d="M 3438 1997
|
||||
L 3047 0
|
||||
L 2472 0
|
||||
L 2578 531
|
||||
Q 2325 219 2001 64
|
||||
Q 1678 -91 1281 -91
|
||||
Q 834 -91 548 182
|
||||
Q 263 456 263 884
|
||||
Q 263 1497 752 1853
|
||||
Q 1241 2209 2100 2209
|
||||
L 2900 2209
|
||||
L 2931 2363
|
||||
Q 2938 2388 2941 2417
|
||||
Q 2944 2447 2944 2509
|
||||
Q 2944 2788 2717 2942
|
||||
Q 2491 3097 2081 3097
|
||||
Q 1800 3097 1504 3025
|
||||
Q 1209 2953 897 2809
|
||||
L 997 3341
|
||||
Q 1322 3463 1633 3523
|
||||
Q 1944 3584 2234 3584
|
||||
Q 2853 3584 3176 3315
|
||||
Q 3500 3047 3500 2534
|
||||
Q 3500 2431 3484 2292
|
||||
Q 3469 2153 3438 1997
|
||||
z
|
||||
M 2816 1759
|
||||
L 2241 1759
|
||||
Q 1534 1759 1195 1570
|
||||
Q 856 1381 856 984
|
||||
Q 856 709 1029 553
|
||||
Q 1203 397 1509 397
|
||||
Q 1978 397 2328 733
|
||||
Q 2678 1069 2791 1631
|
||||
L 2816 1759
|
||||
z
|
||||
" transform="scale(0.015625)"/>
|
||||
</defs>
|
||||
<use xlink:href="#DejaVuSansMono-47" transform="translate(0 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSansMono-28" transform="translate(60.205078 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSansMono-78" transform="translate(120.410156 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSansMono-29" transform="translate(180.615234 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSansMono-20" transform="translate(240.820312 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSansMono-3d" transform="translate(301.025391 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSansMono-20" transform="translate(361.230469 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-Oblique-63" transform="translate(421.435547 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-2b" transform="translate(495.898438 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-28" transform="translate(599.169922 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-2212" transform="translate(638.183594 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-Oblique-64" transform="translate(721.972656 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-2b" transform="translate(804.931641 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-Oblique-78" transform="translate(908.203125 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-29" transform="translate(967.382812 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-28" transform="translate(1006.396484 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-Oblique-64" transform="translate(1045.410156 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-2b" transform="translate(1128.369141 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-Oblique-78" transform="translate(1231.640625 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-29" transform="translate(1290.820312 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-28" transform="translate(1329.833984 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-2212" transform="translate(1368.847656 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-Oblique-61" transform="translate(1452.636719 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-2b" transform="translate(1533.398438 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-Oblique-64" transform="translate(1636.669922 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-2b" transform="translate(1719.628906 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-Oblique-78" transform="translate(1822.900391 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-29" transform="translate(1882.080078 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-28" transform="translate(1921.09375 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-Oblique-61" transform="translate(1960.107422 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-2212" transform="translate(2040.869141 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-Oblique-64" transform="translate(2144.140625 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-2b" transform="translate(2227.099609 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-Oblique-78" transform="translate(2330.371094 0.015625)"/>
|
||||
<use xlink:href="#DejaVuSans-29" transform="translate(2389.550781 0.015625)"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="p90606aa11e">
|
||||
<rect x="57.6" y="41.472" width="357.12" height="266.112"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 25 KiB |
BIN
static/images/posts/verification/energypercycle-c-best-hthv.png
Normal file
BIN
static/images/posts/verification/energypercycle-c-best-hthv.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.0 KiB |
BIN
static/images/posts/verification/energypercycle-c-best-htlv.png
Normal file
BIN
static/images/posts/verification/energypercycle-c-best-htlv.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
Reference in New Issue
Block a user