Commit ee2ff04c6201ec2798d6445f20b53fc3c30cca66

Authored by jfriedt
1 parent 76ebb20ed4
Exists in master

illustration quantification

Showing 4 changed files with 1464 additions and 0 deletions Inline Diff

ifcs2018_proceeding.tex
\documentclass[a4paper,conference]{IEEEtran/IEEEtran} 1 1 \documentclass[a4paper,conference]{IEEEtran/IEEEtran}
\usepackage{graphicx,color,hyperref} 2 2 \usepackage{graphicx,color,hyperref}
\usepackage{amsfonts} 3 3 \usepackage{amsfonts}
\usepackage{url} 4 4 \usepackage{url}
\usepackage[normalem]{ulem} 5 5 \usepackage[normalem]{ulem}
\graphicspath{{/home/jmfriedt/gpr/170324_avalanche/}{/home/jmfriedt/gpr/1705_homemade/}} 6 6 \graphicspath{{/home/jmfriedt/gpr/170324_avalanche/}{/home/jmfriedt/gpr/1705_homemade/}}
% correct bad hyphenation here 7 7 % correct bad hyphenation here
\hyphenation{op-tical net-works semi-conduc-tor} 8 8 \hyphenation{op-tical net-works semi-conduc-tor}
\textheight=26cm 9 9 \textheight=26cm
\setlength{\footskip}{30pt} 10 10 \setlength{\footskip}{30pt}
\pagenumbering{gobble} 11 11 \pagenumbering{gobble}
\begin{document} 12 12 \begin{document}
\title{Filter optimization for real time digital processing of radiofrequency signals: application 13 13 \title{Filter optimization for real time digital processing of radiofrequency signals: application
to oscillator metrology} 14 14 to oscillator metrology}
15 15
\author{\IEEEauthorblockN{A. Hugeat\IEEEauthorrefmark{1}\IEEEauthorrefmark{2}, J. Bernard\IEEEauthorrefmark{2}, 16 16 \author{\IEEEauthorblockN{A. Hugeat\IEEEauthorrefmark{1}\IEEEauthorrefmark{2}, J. Bernard\IEEEauthorrefmark{2},
G. Goavec-M\'erou\IEEEauthorrefmark{1}, 17 17 G. Goavec-M\'erou\IEEEauthorrefmark{1},
P.-Y. Bourgeois\IEEEauthorrefmark{1}, J.-M. Friedt\IEEEauthorrefmark{1}} 18 18 P.-Y. Bourgeois\IEEEauthorrefmark{1}, J.-M. Friedt\IEEEauthorrefmark{1}}
\IEEEauthorblockA{\IEEEauthorrefmark{1}FEMTO-ST, Time \& Frequency department, Besan\c con, France } 19 19 \IEEEauthorblockA{\IEEEauthorrefmark{1}FEMTO-ST, Time \& Frequency department, Besan\c con, France }
\IEEEauthorblockA{\IEEEauthorrefmark{2}FEMTO-ST, Computer Science department DISC, Besan\c con, France \\ 20 20 \IEEEauthorblockA{\IEEEauthorrefmark{2}FEMTO-ST, Computer Science department DISC, Besan\c con, France \\
Email: \{pyb2,jmfriedt\}@femto-st.fr} 21 21 Email: \{pyb2,jmfriedt\}@femto-st.fr}
} 22 22 }
\maketitle 23 23 \maketitle
\thispagestyle{plain} 24 24 \thispagestyle{plain}
\pagestyle{plain} 25 25 \pagestyle{plain}
26 26
\begin{abstract} 27 27 \begin{abstract}
Software Defined Radio (SDR) provides stability, flexibility and reconfigurability to 28 28 Software Defined Radio (SDR) provides stability, flexibility and reconfigurability to
radiofrequency signal processing. Applied to oscillator characterization in the context 29 29 radiofrequency signal processing. Applied to oscillator characterization in the context
of ultrastable clocks, stringent filtering requirements are defined by spurious signal or 30 30 of ultrastable clocks, stringent filtering requirements are defined by spurious signal or
noise rejection needs. Since real time radiofrequency processing must be performed in a 31 31 noise rejection needs. Since real time radiofrequency processing must be performed in a
Field Programmable Array to meet timing constraints, we investigate optimization strategies 32 32 Field Programmable Array to meet timing constraints, we investigate optimization strategies
to design filters meeting rejection characteristics while limiting the hardware resources 33 33 to design filters meeting rejection characteristics while limiting the hardware resources
required and keeping timing constraints within the targeted measurement bandwidths. 34 34 required and keeping timing constraints within the targeted measurement bandwidths.
\end{abstract} 35 35 \end{abstract}
36 36
\begin{IEEEkeywords} 37 37 \begin{IEEEkeywords}
Software Defined Radio, Mixed-Integer Linear Programming, Finite Impulse Response filter 38 38 Software Defined Radio, Mixed-Integer Linear Programming, Finite Impulse Response filter
\end{IEEEkeywords} 39 39 \end{IEEEkeywords}
40 40
\section{Digital signal processing of ultrastable clock signals} 41 41 \section{Digital signal processing of ultrastable clock signals}
42 42
Analog oscillator phase noise characteristics are classically performed by downconverting 43 43 Analog oscillator phase noise characteristics are classically performed by downconverting
the radiofrequency signal using a saturated mixer to bring the radiofrequency signal to baseband, 44 44 the radiofrequency signal using a saturated mixer to bring the radiofrequency signal to baseband,
followed by a Fourier analysis of the beat signal to analyze phase fluctuations close to carrier. In 45 45 followed by a Fourier analysis of the beat signal to analyze phase fluctuations close to carrier. In
a fully digital approach, the radiofrequency signal is digitized and numerically downconverted by 46 46 a fully digital approach, the radiofrequency signal is digitized and numerically downconverted by
multiplying the samples with a local numerically controlled oscillator (Fig. \ref{schema}) \cite{rsi}. 47 47 multiplying the samples with a local numerically controlled oscillator (Fig. \ref{schema}) \cite{rsi}.
48 48
\begin{figure}[h!tb] 49 49 \begin{figure}[h!tb]
\begin{center} 50 50 \begin{center}
\includegraphics[width=.8\linewidth]{images/schema} 51 51 \includegraphics[width=.8\linewidth]{images/schema}
\end{center} 52 52 \end{center}
\caption{Fully digital oscillator phase noise characterization: the Device Under Test 53 53 \caption{Fully digital oscillator phase noise characterization: the Device Under Test
(DUT) signal is sampled by the radiofrequency grade Analog to Digital Converter (ADC) and 54 54 (DUT) signal is sampled by the radiofrequency grade Analog to Digital Converter (ADC) and
downconverted by mixing with a Numerically Controlled Oscillator (NCO). Unwanted signals 55 55 downconverted by mixing with a Numerically Controlled Oscillator (NCO). Unwanted signals
and noise aliases are rejected by a Low Pass Filter (LPF) implemented as a cascade of Finite 56 56 and noise aliases are rejected by a Low Pass Filter (LPF) implemented as a cascade of Finite
Impulse Response (FIR) filters. The signal is then decimated before a Fourier analysis displays 57 57 Impulse Response (FIR) filters. The signal is then decimated before a Fourier analysis displays
the spectral characteristics of the phase fluctuations.} 58 58 the spectral characteristics of the phase fluctuations.}
\label{schema} 59 59 \label{schema}
\end{figure} 60 60 \end{figure}
61 61
As with the analog mixer, 62 62 As with the analog mixer,
the non-linear behavior of the downconverter introduces noise or spurious signal aliasing as 63 63 the non-linear behavior of the downconverter introduces noise or spurious signal aliasing as
well as the generation of the frequency sum signal in addition to the frequency difference. 64 64 well as the generation of the frequency sum signal in addition to the frequency difference.
These unwanted spectral characteristics must be rejected before decimating the data stream 65 65 These unwanted spectral characteristics must be rejected before decimating the data stream
for the phase noise spectral characterization. The characteristics introduced between the downconverter 66 66 for the phase noise spectral characterization. The characteristics introduced between the downconverter
and the decimation processing blocks are core characteristics of an oscillator characterization 67 67 and the decimation processing blocks are core characteristics of an oscillator characterization
system, and must reject out-of-band signals below the targeted phase noise -- typically in the 68 68 system, and must reject out-of-band signals below the targeted phase noise -- typically in the
sub -170~dBc/Hz for ultrastable oscillator we aim at characterizing. The filter blocks will 69 69 sub -170~dBc/Hz for ultrastable oscillator we aim at characterizing. The filter blocks will
use most resources of the Field Programmable Gate Array (FPGA) used to process the radiofrequency 70 70 use most resources of the Field Programmable Gate Array (FPGA) used to process the radiofrequency
datastream: optimizing the performance of the filter while reducing the needed resources is 71 71 datastream: optimizing the performance of the filter while reducing the needed resources is
hence tackled in a systematic approach using optimization techniques. Most significantly, we 72 72 hence tackled in a systematic approach using optimization techniques. Most significantly, we
tackle the issue by attempting to cascade multiple Finite Impulse Response (FIR) filters with 73 73 tackle the issue by attempting to cascade multiple Finite Impulse Response (FIR) filters with
tunable number of coefficients and tunable number of bits representing the coefficients and the 74 74 tunable number of coefficients and tunable number of bits representing the coefficients and the
data being processed. 75 75 data being processed.
76 76
\section{Finite impulse response filter} 77 77 \section{Finite impulse response filter}
78 78
We select FIR filter for their unconditional stability and ease of design. A FIR filter is defined 79 79 We select FIR filter for their unconditional stability and ease of design. A FIR filter is defined
by a set of weights $b_k$ applied to the inputs $x_k$ through a convolution to generate the outputs $y_k$ 80 80 by a set of weights $b_k$ applied to the inputs $x_k$ through a convolution to generate the outputs $y_k$
$$y_n=\sum_{k=0}^N b_k x_{n-k}$$ 81 81 $$y_n=\sum_{k=0}^N b_k x_{n-k}$$
82 82
As opposed to an implementation on a general purpose processor in which word size is defined by the 83 83 As opposed to an implementation on a general purpose processor in which word size is defined by the
processor architecture, implementing such a filter on an FPGA offer more degrees of freedom since 84 84 processor architecture, implementing such a filter on an FPGA offer more degrees of freedom since
not only the coefficient values and number of taps must be defined, but also the number of bits defining 85 85 not only the coefficient values and number of taps must be defined, but also the number of bits defining
the coefficients and the sample size. 86 86 the coefficients and the sample size.
87 87
The coefficients are classically expressed as floating point values. However, this binary 88 88 The coefficients are classically expressed as floating point values. However, this binary
number representation is not efficient for fast arithmetic computation by an FPGA. Instead, 89 89 number representation is not efficient for fast arithmetic computation by an FPGA. Instead,
we select to quantify these floating point values into integer values. This quantization 90 90 we select to quantify these floating point values into integer values. This quantization
will result in some precision loss. As illustrated in Fig. \ref{float_vs_int}, we see that we aren't 91 91 will result in some precision loss. As illustrated in Fig. \ref{float_vs_int}, we see that we aren't
need too coefficients or too sample size. If we have lot of coefficients but a small sample size, 92 92 need too coefficients or too sample size. If we have lot of coefficients but a small sample size,
the first and last are equal to zero. But if we have too sample size for few coefficients that not improve the quality. 93 93 the first and last are equal to zero. But if we have too sample size for few coefficients that not improve the quality.
94 94
% JMF je ne comprends pas la derniere phrase ci-dessus ni la figure ci dessous 95 95 % JMF je ne comprends pas la derniere phrase ci-dessus ni la figure ci dessous
\begin{figure}[h!tb] 96 96 \begin{figure}[h!tb]
\includegraphics[width=\linewidth]{images/float-vs-integer.pdf} 97 97 \includegraphics[width=\linewidth]{images/float-vs-integer.pdf}
\caption{Impact of the quantization resolution of the coefficients} 98 98 \caption{Impact of the quantization resolution of the coefficients}
99 %\label{float_vs_int}
100 \end{figure}
101
102 \begin{figure}[h!tb]
103 \includegraphics[width=\linewidth]{images/demo_filtre}
104 \caption{Impact of the quantization resolution of the coefficients: the quantization is
105 set to 6~bits, setting the 30~first and 30~last coefficients out of the initial 128~band-pass
106 filter coefficients to 0.}
\label{float_vs_int} 99 107 \label{float_vs_int}
\end{figure} 100 108 \end{figure}
109
101 110
\section{Filter optimization} 102 111 \section{Filter optimization}
103 112
A basic approach for implementing the FIR filter is to compute the transfer function of 104 113 A basic approach for implementing the FIR filter is to compute the transfer function of
a monolithic filter: this single filter defines all coefficients with the same resolution 105 114 a monolithic filter: this single filter defines all coefficients with the same resolution
(number of bits) and processes data represented with their own resolution. Meeting the 106 115 (number of bits) and processes data represented with their own resolution. Meeting the
filter shape requires a large number of coefficients, limited by resources of the FPGA since 107 116 filter shape requires a large number of coefficients, limited by resources of the FPGA since
this filter must process data stream at the radiofrequency sampling rate after the mixer. 108 117 this filter must process data stream at the radiofrequency sampling rate after the mixer.
109 118
An optimization problem \cite{leung2004handbook} aims at improving one or many 110 119 An optimization problem \cite{leung2004handbook} aims at improving one or many
performance criteria within a constrained resource environment. Amongst the tools 111 120 performance criteria within a constrained resource environment. Amongst the tools
developed to meet this aim, Mixed-Integer Linear Programming (MILP) provides the framework to 112 121 developed to meet this aim, Mixed-Integer Linear Programming (MILP) provides the framework to
provide a formal definition of the stated problem and search for an optimal use of available 113 122 provide a formal definition of the stated problem and search for an optimal use of available
resources \cite{yu2007design, kodek1980design}. 114 123 resources \cite{yu2007design, kodek1980design}.
115 124
The degrees of freedom when addressing the problem of replacing the single monolithic 116 125 The degrees of freedom when addressing the problem of replacing the single monolithic
FIR with a cascade of optimized filters are the number of coefficients $N_i$ of each filter $i$, 117 126 FIR with a cascade of optimized filters are the number of coefficients $N_i$ of each filter $i$,
the number of bits $c_i$ representing the coefficients and the number of bits $d_i$ representing 118 127 the number of bits $c_i$ representing the coefficients and the number of bits $d_i$ representing
the data fed to the filter. Because each FIR in the chain is fed the output of the previous stage, 119 128 the data fed to the filter. Because each FIR in the chain is fed the output of the previous stage,
the optimization of the complete processing chain within a constrained resource environment is not 120 129 the optimization of the complete processing chain within a constrained resource environment is not
trivial. The resource occupation of a FIR filter is considered as $c_i+d_i+\log_2(N_i)$ which is 121 130 trivial. The resource occupation of a FIR filter is considered as $c_i+d_i+\log_2(N_i)$ which is
the number of bits needed in a worst case condition to represent the output of the FIR. 122 131 the number of bits needed in a worst case condition to represent the output of the FIR.
123 132
124 133
\begin{figure}[h!tb] 125 134 \begin{figure}[h!tb]
\includegraphics[width=\linewidth]{images/noise-rejection.pdf} 126 135 \includegraphics[width=\linewidth]{images/noise-rejection.pdf}
\caption{Rejection as a function of number of coefficients and number of bits} 127 136 \caption{Rejection as a function of number of coefficients and number of bits}
\label{noise-rejection} 128 137 \label{noise-rejection}
\end{figure} 129 138 \end{figure}
130 139
The objective function maximizes the noise rejection while keeping resource occupation below 131 140 The objective function maximizes the noise rejection while keeping resource occupation below
a user-defined threshold. The MILP solver is allowed to choose the number of successive 132 141 a user-defined threshold. The MILP solver is allowed to choose the number of successive
filters, within an upper bound. The last problem is to model the noise rejection. Since filter 133 142 filters, within an upper bound. The last problem is to model the noise rejection. Since filter
noise rejection capability is not modeled with linear equation, a look-up-table is generated 134 143 noise rejection capability is not modeled with linear equation, a look-up-table is generated
for multiple filter configurations in which the $c_i$, $d_i$ and $N_i$ parameters are varied: for each 135 144 for multiple filter configurations in which the $c_i$, $d_i$ and $N_i$ parameters are varied: for each
one of these conditions, the low-pass filter rejection defined as the mean power between 136 145 one of these conditions, the low-pass filter rejection defined as the mean power between
half the Nyquist frequency and the Nyquist frequency is stored as computed by the frequency response 137 146 half the Nyquist frequency and the Nyquist frequency is stored as computed by the frequency response
of the digital filter (Fig. \ref{noise-rejection}). 138 147 of the digital filter (Fig. \ref{noise-rejection}).
139 148
Linear program formalism for solving the problem is well documented: an objective function is 140 149 Linear program formalism for solving the problem is well documented: an objective function is
defined which is linearly dependent on the parameters to be optimized. Constraints are expressed 141 150 defined which is linearly dependent on the parameters to be optimized. Constraints are expressed
as linear equation and solved using one of the available solvers, in our case GLPK\cite{glpk}. 142 151 as linear equation and solved using one of the available solvers, in our case GLPK\cite{glpk}.
143 152
The MILP solver provides a solution to the problem by selecting a series of small FIR with 144 153 The MILP solver provides a solution to the problem by selecting a series of small FIR with
increasing number of bits representing data and coefficients as well as an increasing number 145 154 increasing number of bits representing data and coefficients as well as an increasing number
of coefficients, instead of a single monolithic filter. Fig. \ref{compare-fir} exhibits the 146 155 of coefficients, instead of a single monolithic filter. Fig. \ref{compare-fir} exhibits the
performance comparison between one solution and a monolithic FIR when selecting a cutoff 147 156 performance comparison between one solution and a monolithic FIR when selecting a cutoff
frequency of half the Nyquist frequency: a series of 5 FIR and a series of 10 FIR with the 148 157 frequency of half the Nyquist frequency: a series of 5 FIR and a series of 10 FIR with the
same space usage are provided as selected by the MILP solver. The FIR cascade provides improved 149 158 same space usage are provided as selected by the MILP solver. The FIR cascade provides improved
rejection than the monolithic FIR at the expense of a lower cutoff frequency which remains to 150 159 rejection than the monolithic FIR at the expense of a lower cutoff frequency which remains to
be tuned or compensated for. 151 160 be tuned or compensated for.
152 161
\begin{figure}[h!tb] 153 162 \begin{figure}[h!tb]
% \includegraphics[width=\linewidth]{images/compare-fir.pdf} 154 163 % \includegraphics[width=\linewidth]{images/compare-fir.pdf}
\includegraphics[width=\linewidth]{images/fir-mono-vs-fir-series-200dB.pdf} 155 164 \includegraphics[width=\linewidth]{images/fir-mono-vs-fir-series-200dB.pdf}
\caption{Comparison of the rejection capability between a series of FIR and a monolithic FIR 156 165 \caption{Comparison of the rejection capability between a series of FIR and a monolithic FIR
with a cutoff frequency set at half the Nyquist frequency.} 157 166 with a cutoff frequency set at half the Nyquist frequency.}
\label{compare-fir} 158 167 \label{compare-fir}
\end{figure} 159 168 \end{figure}
160 169
The resource occupation when synthesizing such FIR on a Xilinx FPGA is summarized as Tab. \ref{t1}. 161 170 The resource occupation when synthesizing such FIR on a Xilinx FPGA is summarized as Tab. \ref{t1}.
162 171
\begin{table}[h!tb] 163 172 \begin{table}[h!tb]
\caption{Resource occupation on a Xilinx Zynq-7000 series FPGA when synthesizing the FIR cascade 164 173 \caption{Resource occupation on a Xilinx Zynq-7000 series FPGA when synthesizing the FIR cascade
identified as optimal by the MILP solver within a finite resource criterion. The last line refers 165 174 identified as optimal by the MILP solver within a finite resource criterion. The last line refers
to available resources on a Zynq-7010 as found on the Redpitaya board. The rejection is the mean 166 175 to available resources on a Zynq-7010 as found on the Redpitaya board. The rejection is the mean
value from 0.6 to 1 Nyquist frequency.} 167 176 value from 0.6 to 1 Nyquist frequency.}
\begin{center} 168 177 \begin{center}
\begin{tabular}{|c|cccc|}\hline 169 178 \begin{tabular}{|c|cccc|}\hline
FIR & BlockRAM & LookUpTables & DSP & rejection (dB)\\\hline\hline 170 179 FIR & BlockRAM & LookUpTables & DSP & rejection (dB)\\\hline\hline
1 (monolithic) & 1 & 4064 & 40 & -72 \\ 171 180 1 (monolithic) & 1 & 4064 & 40 & -72 \\
5 & 5 & 12332 & 0 & -217 \\ 172 181 5 & 5 & 12332 & 0 & -217 \\
10 & 10 & 12717 & 0 & -251 \\\hline\hline 173 182 10 & 10 & 12717 & 0 & -251 \\\hline\hline
Zynq 7010 & 60 & 17600 & 80 & \\\hline 174 183 Zynq 7010 & 60 & 17600 & 80 & \\\hline
\end{tabular} 175 184 \end{tabular}
\end{center} 176 185 \end{center}
%\vspace{-0.7cm} 177 186 %\vspace{-0.7cm}
\label{t1} 178 187 \label{t1}
\end{table} 179 188 \end{table}
180 189
\section{Filter coefficient selection} 181 190 \section{Filter coefficient selection}
182 191
The coefficients of a single monolithic filter are computed as the impulse response 183 192 The coefficients of a single monolithic filter are computed as the impulse response
of the filter transfer function, and practically approximated by a multitude of methods 184 193 of the filter transfer function, and practically approximated by a multitude of methods
including least square optimization (Matlab's {\tt firls} function), Hamming or Kaiser windowing 185 194 including least square optimization (Matlab's {\tt firls} function), Hamming or Kaiser windowing
(Matlab's {\tt fir1} function). Cascading filters opens a new optimization opportunity by 186 195 (Matlab's {\tt fir1} function). Cascading filters opens a new optimization opportunity by
selecting various coefficient sets depending on the number of coefficients. Fig. \ref{2} 187 196 selecting various coefficient sets depending on the number of coefficients. Fig. \ref{2}
illustrates that for a number of coefficients ranging from 8 to 47, {\tt fir1} provides a better 188 197 illustrates that for a number of coefficients ranging from 8 to 47, {\tt fir1} provides a better
rejection than {\tt firls}: since the linear solver increases the number of coefficients along 189 198 rejection than {\tt firls}: since the linear solver increases the number of coefficients along
the processing chain, the type of selected filter also changes depending on the number of coefficients 190 199 the processing chain, the type of selected filter also changes depending on the number of coefficients
images/demo_filtre.eps
File was created 1 %!PS-Adobe-2.0 EPSF-2.0
2 %%Title: demo_filtre.eps
3 %%Creator: gnuplot 5.2 patchlevel 2
4 %%CreationDate: Fri May 18 19:34:59 2018
5 %%DocumentFonts: (atend)
6 %%BoundingBox: 50 50 626 482
7 %%EndComments
8 %%BeginProlog
9 /gnudict 256 dict def
10 gnudict begin
11 %
12 % The following true/false flags may be edited by hand if desired.
13 % The unit line width and grayscale image gamma correction may also be changed.
14 %
15 /Color true def
16 /Blacktext false def
17 /Solid false def
18 /Dashlength 2 def
19 /Landscape false def
20 /Level1 true def
21 /Level3 false def
22 /Rounded false def
23 /ClipToBoundingBox false def
24 /SuppressPDFMark false def
25 /TransparentPatterns false def
26 /gnulinewidth 5.000 def
27 /userlinewidth gnulinewidth def
28 /Gamma 1.0 def
29 /BackgroundColor {1.000 1.000 1.000} def
30 %
31 /vshift -66 def
32 /dl1 {
33 10.0 Dashlength userlinewidth gnulinewidth div mul mul mul
34 Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if
35 } def
36 /dl2 {
37 10.0 Dashlength userlinewidth gnulinewidth div mul mul mul
38 Rounded { currentlinewidth 0.75 mul add } if
39 } def
40 /hpt_ 31.5 def
41 /vpt_ 31.5 def
42 /hpt hpt_ def
43 /vpt vpt_ def
44 /doclip {
45 ClipToBoundingBox {
46 newpath 50 50 moveto 626 50 lineto 626 482 lineto 50 482 lineto closepath
47 clip
48 } if
49 } def
50 %
51 % Gnuplot Prolog Version 5.1 (Oct 2015)
52 %
53 %/SuppressPDFMark true def
54 %
55 /M {moveto} bind def
56 /L {lineto} bind def
57 /R {rmoveto} bind def
58 /V {rlineto} bind def
59 /N {newpath moveto} bind def
60 /Z {closepath} bind def
61 /C {setrgbcolor} bind def
62 /f {rlineto fill} bind def
63 /g {setgray} bind def
64 /Gshow {show} def % May be redefined later in the file to support UTF-8
65 /vpt2 vpt 2 mul def
66 /hpt2 hpt 2 mul def
67 /Lshow {currentpoint stroke M 0 vshift R
68 Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def
69 /Rshow {currentpoint stroke M dup stringwidth pop neg vshift R
70 Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def
71 /Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R
72 Blacktext {gsave 0 setgray textshow grestore} {textshow} ifelse} def
73 /UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
74 /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def
75 /DL {Color {setrgbcolor Solid {pop []} if 0 setdash}
76 {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def
77 /BL {stroke userlinewidth 2 mul setlinewidth
78 Rounded {1 setlinejoin 1 setlinecap} if} def
79 /AL {stroke userlinewidth 2 div setlinewidth
80 Rounded {1 setlinejoin 1 setlinecap} if} def
81 /UL {dup gnulinewidth mul /userlinewidth exch def
82 dup 1 lt {pop 1} if 10 mul /udl exch def} def
83 /PL {stroke userlinewidth setlinewidth
84 Rounded {1 setlinejoin 1 setlinecap} if} def
85 3.8 setmiterlimit
86 % Classic Line colors (version 5.0)
87 /LCw {1 1 1} def
88 /LCb {0 0 0} def
89 /LCa {0 0 0} def
90 /LC0 {1 0 0} def
91 /LC1 {0 1 0} def
92 /LC2 {0 0 1} def
93 /LC3 {1 0 1} def
94 /LC4 {0 1 1} def
95 /LC5 {1 1 0} def
96 /LC6 {0 0 0} def
97 /LC7 {1 0.3 0} def
98 /LC8 {0.5 0.5 0.5} def
99 % Default dash patterns (version 5.0)
100 /LTB {BL [] LCb DL} def
101 /LTw {PL [] 1 setgray} def
102 /LTb {PL [] LCb DL} def
103 /LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def
104 /LT0 {PL [] LC0 DL} def
105 /LT1 {PL [2 dl1 3 dl2] LC1 DL} def
106 /LT2 {PL [1 dl1 1.5 dl2] LC2 DL} def
107 /LT3 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC3 DL} def
108 /LT4 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def
109 /LT5 {PL [4 dl1 2 dl2] LC5 DL} def
110 /LT6 {PL [1.5 dl1 1.5 dl2 1.5 dl1 1.5 dl2 1.5 dl1 6 dl2] LC6 DL} def
111 /LT7 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC7 DL} def
112 /LT8 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC8 DL} def
113 /SL {[] 0 setdash} def
114 /Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def
115 /Dia {stroke [] 0 setdash 2 copy vpt add M
116 hpt neg vpt neg V hpt vpt neg V
117 hpt vpt V hpt neg vpt V closepath stroke
118 Pnt} def
119 /Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V
120 currentpoint stroke M
121 hpt neg vpt neg R hpt2 0 V stroke
122 } def
123 /Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
124 0 vpt2 neg V hpt2 0 V 0 vpt2 V
125 hpt2 neg 0 V closepath stroke
126 Pnt} def
127 /Crs {stroke [] 0 setdash exch hpt sub exch vpt add M
128 hpt2 vpt2 neg V currentpoint stroke M
129 hpt2 neg 0 R hpt2 vpt2 V stroke} def
130 /TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M
131 hpt neg vpt -1.62 mul V
132 hpt 2 mul 0 V
133 hpt neg vpt 1.62 mul V closepath stroke
134 Pnt} def
135 /Star {2 copy Pls Crs} def
136 /BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M
137 0 vpt2 neg V hpt2 0 V 0 vpt2 V
138 hpt2 neg 0 V closepath fill} def
139 /TriUF {stroke [] 0 setdash vpt 1.12 mul add M
140 hpt neg vpt -1.62 mul V
141 hpt 2 mul 0 V
142 hpt neg vpt 1.62 mul V closepath fill} def
143 /TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
144 hpt neg vpt 1.62 mul V
145 hpt 2 mul 0 V
146 hpt neg vpt -1.62 mul V closepath stroke
147 Pnt} def
148 /TriDF {stroke [] 0 setdash vpt 1.12 mul sub M
149 hpt neg vpt 1.62 mul V
150 hpt 2 mul 0 V
151 hpt neg vpt -1.62 mul V closepath fill} def
152 /DiaF {stroke [] 0 setdash vpt add M
153 hpt neg vpt neg V hpt vpt neg V
154 hpt vpt V hpt neg vpt V closepath fill} def
155 /Pent {stroke [] 0 setdash 2 copy gsave
156 translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
157 closepath stroke grestore Pnt} def
158 /PentF {stroke [] 0 setdash gsave
159 translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
160 closepath fill grestore} def
161 /Circle {stroke [] 0 setdash 2 copy
162 hpt 0 360 arc stroke Pnt} def
163 /CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def
164 /C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def
165 /C1 {BL [] 0 setdash 2 copy moveto
166 2 copy vpt 0 90 arc closepath fill
167 vpt 0 360 arc closepath} bind def
168 /C2 {BL [] 0 setdash 2 copy moveto
169 2 copy vpt 90 180 arc closepath fill
170 vpt 0 360 arc closepath} bind def
171 /C3 {BL [] 0 setdash 2 copy moveto
172 2 copy vpt 0 180 arc closepath fill
173 vpt 0 360 arc closepath} bind def
174 /C4 {BL [] 0 setdash 2 copy moveto
175 2 copy vpt 180 270 arc closepath fill
176 vpt 0 360 arc closepath} bind def
177 /C5 {BL [] 0 setdash 2 copy moveto
178 2 copy vpt 0 90 arc
179 2 copy moveto
180 2 copy vpt 180 270 arc closepath fill
181 vpt 0 360 arc} bind def
182 /C6 {BL [] 0 setdash 2 copy moveto
183 2 copy vpt 90 270 arc closepath fill
184 vpt 0 360 arc closepath} bind def
185 /C7 {BL [] 0 setdash 2 copy moveto
186 2 copy vpt 0 270 arc closepath fill
187 vpt 0 360 arc closepath} bind def
188 /C8 {BL [] 0 setdash 2 copy moveto
189 2 copy vpt 270 360 arc closepath fill
190 vpt 0 360 arc closepath} bind def
191 /C9 {BL [] 0 setdash 2 copy moveto
192 2 copy vpt 270 450 arc closepath fill
193 vpt 0 360 arc closepath} bind def
194 /C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
195 2 copy moveto
196 2 copy vpt 90 180 arc closepath fill
197 vpt 0 360 arc closepath} bind def
198 /C11 {BL [] 0 setdash 2 copy moveto
199 2 copy vpt 0 180 arc closepath fill
200 2 copy moveto
201 2 copy vpt 270 360 arc closepath fill
202 vpt 0 360 arc closepath} bind def
203 /C12 {BL [] 0 setdash 2 copy moveto
204 2 copy vpt 180 360 arc closepath fill
205 vpt 0 360 arc closepath} bind def
206 /C13 {BL [] 0 setdash 2 copy moveto
207 2 copy vpt 0 90 arc closepath fill
208 2 copy moveto
209 2 copy vpt 180 360 arc closepath fill
210 vpt 0 360 arc closepath} bind def
211 /C14 {BL [] 0 setdash 2 copy moveto
212 2 copy vpt 90 360 arc closepath fill
213 vpt 0 360 arc} bind def
214 /C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
215 vpt 0 360 arc closepath} bind def
216 /Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
217 neg 0 rlineto closepath} bind def
218 /Square {dup Rec} bind def
219 /Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def
220 /S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def
221 /S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def
222 /S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
223 /S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def
224 /S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
225 /S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill
226 exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
227 /S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def
228 /S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
229 2 copy vpt Square fill Bsquare} bind def
230 /S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def
231 /S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def
232 /S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
233 Bsquare} bind def
234 /S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
235 Bsquare} bind def
236 /S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def
237 /S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
238 2 copy vpt Square fill Bsquare} bind def
239 /S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
240 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
241 /S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def
242 /D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def
243 /D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def
244 /D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def
245 /D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def
246 /D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def
247 /D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def
248 /D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def
249 /D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def
250 /D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def
251 /D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def
252 /D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def
253 /D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def
254 /D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def
255 /D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def
256 /D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def
257 /D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def
258 /DiaE {stroke [] 0 setdash vpt add M
259 hpt neg vpt neg V hpt vpt neg V
260 hpt vpt V hpt neg vpt V closepath stroke} def
261 /BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M
262 0 vpt2 neg V hpt2 0 V 0 vpt2 V
263 hpt2 neg 0 V closepath stroke} def
264 /TriUE {stroke [] 0 setdash vpt 1.12 mul add M
265 hpt neg vpt -1.62 mul V
266 hpt 2 mul 0 V
267 hpt neg vpt 1.62 mul V closepath stroke} def
268 /TriDE {stroke [] 0 setdash vpt 1.12 mul sub M
269 hpt neg vpt 1.62 mul V
270 hpt 2 mul 0 V
271 hpt neg vpt -1.62 mul V closepath stroke} def
272 /PentE {stroke [] 0 setdash gsave
273 translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
274 closepath stroke grestore} def
275 /CircE {stroke [] 0 setdash
276 hpt 0 360 arc stroke} def
277 /Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def
278 /DiaW {stroke [] 0 setdash vpt add M
279 hpt neg vpt neg V hpt vpt neg V
280 hpt vpt V hpt neg vpt V Opaque stroke} def
281 /BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M
282 0 vpt2 neg V hpt2 0 V 0 vpt2 V
283 hpt2 neg 0 V Opaque stroke} def
284 /TriUW {stroke [] 0 setdash vpt 1.12 mul add M
285 hpt neg vpt -1.62 mul V
286 hpt 2 mul 0 V
287 hpt neg vpt 1.62 mul V Opaque stroke} def
288 /TriDW {stroke [] 0 setdash vpt 1.12 mul sub M
289 hpt neg vpt 1.62 mul V
290 hpt 2 mul 0 V
291 hpt neg vpt -1.62 mul V Opaque stroke} def
292 /PentW {stroke [] 0 setdash gsave
293 translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
294 Opaque stroke grestore} def
295 /CircW {stroke [] 0 setdash
296 hpt 0 360 arc Opaque stroke} def
297 /BoxFill {gsave Rec 1 setgray fill grestore} def
298 /Density {
299 /Fillden exch def
300 currentrgbcolor
301 /ColB exch def /ColG exch def /ColR exch def
302 /ColR ColR Fillden mul Fillden sub 1 add def
303 /ColG ColG Fillden mul Fillden sub 1 add def
304 /ColB ColB Fillden mul Fillden sub 1 add def
305 ColR ColG ColB setrgbcolor} def
306 /BoxColFill {gsave Rec PolyFill} def
307 /PolyFill {gsave Density fill grestore grestore} def
308 /h {rlineto rlineto rlineto gsave closepath fill grestore} bind def
309 %
310 % PostScript Level 1 Pattern Fill routine for rectangles
311 % Usage: x y w h s a XX PatternFill
312 % x,y = lower left corner of box to be filled
313 % w,h = width and height of box
314 % a = angle in degrees between lines and x-axis
315 % XX = 0/1 for no/yes cross-hatch
316 %
317 /PatternFill {gsave /PFa [ 9 2 roll ] def
318 PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
319 PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
320 TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
321 clip
322 currentlinewidth 0.5 mul setlinewidth
323 /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
324 0 0 M PFa 5 get rotate PFs -2 div dup translate
325 0 1 PFs PFa 4 get div 1 add floor cvi
326 {PFa 4 get mul 0 M 0 PFs V} for
327 0 PFa 6 get ne {
328 0 1 PFs PFa 4 get div 1 add floor cvi
329 {PFa 4 get mul 0 2 1 roll M PFs 0 V} for
330 } if
331 stroke grestore} def
332 %
333 /languagelevel where
334 {pop languagelevel} {1} ifelse
335 dup 2 lt
336 {/InterpretLevel1 true def
337 /InterpretLevel3 false def}
338 {/InterpretLevel1 Level1 def
339 2 gt
340 {/InterpretLevel3 Level3 def}
341 {/InterpretLevel3 false def}
342 ifelse }
343 ifelse
344 %
345 % PostScript level 2 pattern fill definitions
346 %
347 /Level2PatternFill {
348 /Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8}
349 bind def
350 /KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def
351 << Tile8x8
352 /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke}
353 >> matrix makepattern
354 /Pat1 exch def
355 << Tile8x8
356 /PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke
357 0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke}
358 >> matrix makepattern
359 /Pat2 exch def
360 << Tile8x8
361 /PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L
362 8 8 L 8 0 L 0 0 L fill}
363 >> matrix makepattern
364 /Pat3 exch def
365 << Tile8x8
366 /PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L
367 0 12 M 12 0 L stroke}
368 >> matrix makepattern
369 /Pat4 exch def
370 << Tile8x8
371 /PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L
372 0 -4 M 12 8 L stroke}
373 >> matrix makepattern
374 /Pat5 exch def
375 << Tile8x8
376 /PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L
377 0 12 M 8 -4 L 4 12 M 10 0 L stroke}
378 >> matrix makepattern
379 /Pat6 exch def
380 << Tile8x8
381 /PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L
382 0 -4 M 8 12 L 4 -4 M 10 8 L stroke}
383 >> matrix makepattern
384 /Pat7 exch def
385 << Tile8x8
386 /PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L
387 12 0 M -4 8 L 12 4 M 0 10 L stroke}
388 >> matrix makepattern
389 /Pat8 exch def
390 << Tile8x8
391 /PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L
392 -4 0 M 12 8 L -4 4 M 8 10 L stroke}
393 >> matrix makepattern
394 /Pat9 exch def
395 /Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def
396 /Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def
397 /Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def
398 /Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def
399 /Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def
400 /Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def
401 /Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def
402 } def
403 %
404 %
405 %End of PostScript Level 2 code
406 %
407 /PatternBgnd {
408 TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
409 } def
410 %
411 % Substitute for Level 2 pattern fill codes with
412 % grayscale if Level 2 support is not selected.
413 %
414 /Level1PatternFill {
415 /Pattern1 {0.250 Density} bind def
416 /Pattern2 {0.500 Density} bind def
417 /Pattern3 {0.750 Density} bind def
418 /Pattern4 {0.125 Density} bind def
419 /Pattern5 {0.375 Density} bind def
420 /Pattern6 {0.625 Density} bind def
421 /Pattern7 {0.875 Density} bind def
422 } def
423 %
424 % Now test for support of Level 2 code
425 %
426 Level1 {Level1PatternFill} {Level2PatternFill} ifelse
427 %
428 /Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
429 dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
430 currentdict end definefont pop
431 %
432 /Metrics {ExtendTextBox Gswidth} def
433 /Lwidth {currentpoint stroke M 0 vshift R Metrics} def
434 /Rwidth {currentpoint stroke M dup stringwidth pop neg vshift R Metrics} def
435 /Cwidth {currentpoint stroke M dup stringwidth pop -2 div vshift R Metrics} def
436 /GLwidth {currentpoint stroke M 0 vshift R {ExtendTextBox} forall} def
437 /GRwidth {currentpoint stroke M dup Gwidth vshift R {ExtendTextBox} forall} def
438 /GCwidth {currentpoint stroke M dup Gwidth 2 div vshift R {ExtendTextBox} forall} def
439 /GLwidth2 {0 Gwidth AddGlyphWidth} def
440 /GRwidth2 {Gwidth -1 mul 0 AddGlyphWidth} def
441 /GCwidth2 {Gwidth 2 div dup -1 mul AddGlyphWidth} def
442 /AddGlyphWidth { dup TBx2 gt {userdict /TBx2 3 -1 roll put} {pop} ifelse
443 dup TBx1 lt {userdict /TBx1 3 -1 roll put} {pop} ifelse } def
444 /MFshow {
445 { dup 5 get 3 ge
446 { 5 get 3 eq {gsave} {grestore} ifelse }
447 {dup dup 0 get findfont exch 1 get scalefont setfont
448 [ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6
449 get exch 4 get {textshow} {Metrics pop 0 R} ifelse }if dup 5 get 0 eq
450 {dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5
451 get 1 eq {dup 2 get exch dup 3 get exch 6 get Gswidth pop -2 div
452 dup 0 R} {dup 6 get Gswidth pop -2 div 0 R 6 get
453 textshow 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop
454 pop aload pop M} ifelse }ifelse }ifelse }
455 ifelse }
456 forall} def
457 /Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} def
458 /MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse }
459 {dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont
460 6 get Gswidth pop add} {pop} ifelse} ifelse} forall} def
461 /MLshow { currentpoint stroke M
462 0 exch R
463 Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
464 /MRshow { currentpoint stroke M
465 exch dup MFwidth neg 3 -1 roll R
466 Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
467 /MCshow { currentpoint stroke M
468 exch dup MFwidth -2 div 3 -1 roll R
469 Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
470 /XYsave { [( ) 1 2 true false 3 ()] } bind def
471 /XYrestore { [( ) 1 2 true false 4 ()] } bind def
472 Level1 SuppressPDFMark or
473 {} {
474 /SDict 10 dict def
475 systemdict /pdfmark known not {
476 userdict /pdfmark systemdict /cleartomark get put
477 } if
478 SDict begin [
479 /Title (demo_filtre.eps)
480 /Subject (gnuplot plot)
481 /Creator (gnuplot 5.2 patchlevel 2)
482 % /Producer (gnuplot)
483 % /Keywords ()
484 /CreationDate (Fri May 18 19:34:59 2018)
485 /DOCINFO pdfmark
486 end
487 } ifelse
488 %
489 % Support for boxed text - Ethan A Merritt Sep 2016
490 %
491 /InitTextBox { userdict /TBy2 3 -1 roll put userdict /TBx2 3 -1 roll put
492 userdict /TBy1 3 -1 roll put userdict /TBx1 3 -1 roll put
493 /Boxing true def } def
494 /ExtendTextBox { dup type /stringtype eq
495 { Boxing { gsave dup false charpath pathbbox
496 dup TBy2 gt {userdict /TBy2 3 -1 roll put} {pop} ifelse
497 dup TBx2 gt {userdict /TBx2 3 -1 roll put} {pop} ifelse
498 dup TBy1 lt {userdict /TBy1 3 -1 roll put} {pop} ifelse
499 dup TBx1 lt {userdict /TBx1 3 -1 roll put} {pop} ifelse
500 grestore } if }
501 {} ifelse} def
502 /PopTextBox { newpath TBx1 TBxmargin sub TBy1 TBymargin sub M
503 TBx1 TBxmargin sub TBy2 TBymargin add L
504 TBx2 TBxmargin add TBy2 TBymargin add L
505 TBx2 TBxmargin add TBy1 TBymargin sub L closepath } def
506 /DrawTextBox { PopTextBox stroke /Boxing false def} def
507 /FillTextBox { gsave PopTextBox fill grestore /Boxing false def} def
508 0 0 0 0 InitTextBox
509 /TBxmargin 20 def
510 /TBymargin 20 def
511 /Boxing false def
512 /textshow { ExtendTextBox Gshow } def
513 %
514 end
515 %%EndProlog
516 %%Page: 1 1
517 gnudict begin
518 gsave
519 doclip
520 50 50 translate
521 0.050 0.050 scale
522 0 setgray
523 newpath
524 (Helvetica) findfont 200 scalefont setfont
525 BackgroundColor 0 lt 3 1 roll 0 lt exch 0 lt or or not {BackgroundColor C 1.000 0 0 11520.00 8640.00 BoxColFill} if
526 gsave % colour palette begin
527 /maxcolors 64 def
528 /HSV2RGB { exch dup 0.0 eq {pop exch pop dup dup} % achromatic gray
529 { /HSVs exch def /HSVv exch def 6.0 mul dup floor dup 3 1 roll sub
530 /HSVf exch def /HSVi exch cvi def /HSVp HSVv 1.0 HSVs sub mul def
531 /HSVq HSVv 1.0 HSVs HSVf mul sub mul def
532 /HSVt HSVv 1.0 HSVs 1.0 HSVf sub mul sub mul def
533 /HSVi HSVi 6 mod def 0 HSVi eq {HSVv HSVt HSVp}
534 {1 HSVi eq {HSVq HSVv HSVp}{2 HSVi eq {HSVp HSVv HSVt}
535 {3 HSVi eq {HSVp HSVq HSVv}{4 HSVi eq {HSVt HSVp HSVv}
536 {HSVv HSVp HSVq} ifelse} ifelse} ifelse} ifelse} ifelse
537 } ifelse} def
538 /Constrain {
539 dup 0 lt {0 exch pop}{dup 1 gt {1 exch pop} if} ifelse} def
540 /YIQ2RGB {
541 3 copy -1.702 mul exch -1.105 mul add add Constrain 4 1 roll
542 3 copy -0.647 mul exch -0.272 mul add add Constrain 5 1 roll
543 0.621 mul exch -0.956 mul add add Constrain 3 1 roll } def
544 /CMY2RGB { 1 exch sub exch 1 exch sub 3 2 roll 1 exch sub 3 1 roll exch } def
545 /XYZ2RGB { 3 copy -0.9017 mul exch -0.1187 mul add exch 0.0585 mul exch add
546 Constrain 4 1 roll 3 copy -0.0279 mul exch 1.999 mul add exch
547 -0.9844 mul add Constrain 5 1 roll -0.2891 mul exch -0.5338 mul add
548 exch 1.91 mul exch add Constrain 3 1 roll} def
549 /SelectSpace {ColorSpace (HSV) eq {HSV2RGB}{ColorSpace (XYZ) eq {
550 XYZ2RGB}{ColorSpace (CMY) eq {CMY2RGB}{ColorSpace (YIQ) eq {YIQ2RGB}
551 if} ifelse} ifelse} ifelse} def
552 /InterpolatedColor true def
553 /grayindex {/gidx 0 def
554 {GrayA gidx get grayv ge {exit} if /gidx gidx 1 add def} loop} def
555 /dgdx {grayv GrayA gidx get sub GrayA gidx 1 sub get
556 GrayA gidx get sub div} def
557 /redvalue {RedA gidx get RedA gidx 1 sub get
558 RedA gidx get sub dgdxval mul add} def
559 /greenvalue {GreenA gidx get GreenA gidx 1 sub get
560 GreenA gidx get sub dgdxval mul add} def
561 /bluevalue {BlueA gidx get BlueA gidx 1 sub get
562 BlueA gidx get sub dgdxval mul add} def
563 /interpolate {
564 grayindex grayv GrayA gidx get sub abs 1e-5 le
565 {RedA gidx get GreenA gidx get BlueA gidx get}
566 {/dgdxval dgdx def redvalue greenvalue bluevalue} ifelse} def
567 /GrayA [0 .0159 .0317 .0476 .0635 .0794 .0952 .1111 .127 .1429 .1587 .1746
568 .1905 .2063 .2222 .2381 .254 .2698 .2857 .3016 .3175 .3333 .3492 .3651
569 .381 .3968 .4127 .4286 .4444 .4603 .4762 .4921 .5079 .5238 .5397 .5556
570 .5714 .5873 .6032 .619 .6349 .6508 .6667 .6825 .6984 .7143 .7302 .746
571 .7619 .7778 .7937 .8095 .8254 .8413 .8571 .873 .8889 .9048 .9206 .9365
572 .9524 .9683 .9841 1 ] def
573 /RedA [.267 .2727 .2771 .2804 .2824 .2832 .2828 .2812 .2785 .2747 .27 .2644
574 .258 .2511 .2437 .2361 .2283 .2204 .2127 .2051 .1977 .1906 .1838 .1773
575 .171 .1648 .1588 .153 .1471 .1414 .1358 .1306 .1259 .1222 .1199 .1196 .122
576 .1277 .1368 .1496 .166 .1855 .208 .2331 .2605 .29 .3213 .3544 .3889 .4249
577 .4622 .5008 .5403 .5809 .6222 .6641 .7064 .7489 .7913 .8333 .8747 .9153
578 .9548 .9932 ] def
579 /GreenA [.0049 .0258 .0509 .0742 .096 .1169 .1374 .1575 .1773 .197 .2163
580 .2354 .2542 .2726 .2906 .3083 .3256 .3425 .3591 .3754 .3913 .4071 .4226
581 .4379 .4531 .4681 .4831 .4981 .513 .5279 .5428 .5577 .5726 .5875 .6024
582 .6173 .6321 .6469 .6616 .6761 .6905 .7047 .7187 .7324 .7458 .7588 .7715
583 .7837 .7955 .8067 .8173 .8274 .8369 .8457 .8538 .8613 .8682 .8745 .8803
584 .8858 .8909 .896 .901 .9062 ] def
585 /BlueA [.3294 .3534 .3762 .3979 .4183 .4372 .4546 .4704 .4847 .4973 .5083
586 .5177 .5258 .5325 .5381 .5427 .5463 .5493 .5516 .5535 .555 .5561 .557
587 .5576 .558 .5581 .5581 .5577 .557 .5559 .5543 .5522 .5494 .546 .5418 .5368
588 .5308 .5239 .516 .5069 .4968 .4854 .4729 .4591 .4441 .4278 .4103 .3915
589 .3714 .3501 .3275 .3038 .2789 .253 .2262 .1989 .1715 .145 .1213 .1033
590 .0954 .1005 .1179 .1439 ] def
591 /pm3dround {maxcolors 0 gt {dup 1 ge
592 {pop 1} {maxcolors mul floor maxcolors 1 sub div} ifelse} if} def
593 /pm3dGamma 1.0 1.5 Gamma mul div def
594 /ColorSpace (RGB) def
595 Color InterpolatedColor or { % COLOUR vs. GRAY map
596 InterpolatedColor { %% Interpolation vs. RGB-Formula
597 /g {stroke pm3dround /grayv exch def interpolate
598 SelectSpace setrgbcolor} bind def
599 }{
600 /g {stroke pm3dround dup cF7 Constrain exch dup cF5 Constrain exch cF15 Constrain
601 SelectSpace setrgbcolor} bind def
602 } ifelse
603 }{
604 /g {stroke pm3dround pm3dGamma exp setgray} bind def
605 } ifelse
606 1.000 UL
607 LTb
608 1.00 1.00 1.00 C 1.000 980 640 10178 7798 BoxColFill
609 1.000 UL
610 LTb
611 0.00 0.00 0.00 C 980 640 M
612 88 0 V
613 10091 0 R
614 -88 0 V
615 stroke
616 0.15 0.15 0.15 C 860 640 M
617 [ [(Helvetica) 200.0 0.0 true true 0 (-1)]
618 ] -66.7 MRshow
619 1.000 UL
620 LTb
621 0.00 0.00 0.00 C 980 2590 M
622 88 0 V
623 10091 0 R
624 -88 0 V
625 stroke
626 0.15 0.15 0.15 C 860 2590 M
627 [ [(Helvetica) 200.0 0.0 true true 0 (-0.5)]
628 ] -66.7 MRshow
629 1.000 UL
630 LTb
631 0.00 0.00 0.00 C 980 4540 M
632 88 0 V
633 10091 0 R
634 -88 0 V
635 stroke
636 0.15 0.15 0.15 C 860 4540 M
637 [ [(Helvetica) 200.0 0.0 true true 0 (0)]
638 ] -66.7 MRshow
639 1.000 UL
640 LTb
641 0.00 0.00 0.00 C 980 6489 M
642 88 0 V
643 10091 0 R
644 -88 0 V
645 stroke
646 0.15 0.15 0.15 C 860 6489 M
647 [ [(Helvetica) 200.0 0.0 true true 0 (0.5)]
648 ] -66.7 MRshow
649 1.000 UL
650 LTb
651 0.00 0.00 0.00 C 980 8439 M
652 88 0 V
653 10091 0 R
654 -88 0 V
655 stroke
656 0.15 0.15 0.15 C 860 8439 M
657 [ [(Helvetica) 200.0 0.0 true true 0 (1)]
658 ] -66.7 MRshow
659 1.000 UL
660 LTb
661 0.00 0.00 0.00 C 980 640 M
662 0 88 V
663 0 7711 R
664 0 -88 V
665 stroke
666 0.15 0.15 0.15 C 980 440 M
667 [ [(Helvetica) 200.0 0.0 true true 0 (0)]
668 ] -66.7 MCshow
669 1.000 UL
670 LTb
671 0.00 0.00 0.00 C 2434 640 M
672 0 88 V
673 0 7711 R
674 0 -88 V
675 stroke
676 0.15 0.15 0.15 C 2434 440 M
677 [ [(Helvetica) 200.0 0.0 true true 0 (20)]
678 ] -66.7 MCshow
679 1.000 UL
680 LTb
681 0.00 0.00 0.00 C 3888 640 M
682 0 88 V
683 0 7711 R
684 0 -88 V
685 stroke
686 0.15 0.15 0.15 C 3888 440 M
687 [ [(Helvetica) 200.0 0.0 true true 0 (40)]
688 ] -66.7 MCshow
689 1.000 UL
690 LTb
691 0.00 0.00 0.00 C 5342 640 M
692 0 88 V
693 0 7711 R
694 0 -88 V
695 stroke
696 0.15 0.15 0.15 C 5342 440 M
697 [ [(Helvetica) 200.0 0.0 true true 0 (60)]
698 ] -66.7 MCshow
699 1.000 UL
700 LTb
701 0.00 0.00 0.00 C 6797 640 M
702 0 88 V
703 0 7711 R
704 0 -88 V
705 stroke
706 0.15 0.15 0.15 C 6797 440 M
707 [ [(Helvetica) 200.0 0.0 true true 0 (80)]
708 ] -66.7 MCshow
709 1.000 UL
710 LTb
711 0.00 0.00 0.00 C 8251 640 M
712 0 88 V
713 0 7711 R
714 0 -88 V
715 stroke
716 0.15 0.15 0.15 C 8251 440 M
717 [ [(Helvetica) 200.0 0.0 true true 0 (100)]
718 ] -66.7 MCshow
719 1.000 UL
720 LTb
721 0.00 0.00 0.00 C 9705 640 M
722 0 88 V
723 0 7711 R
724 0 -88 V
725 stroke
726 0.15 0.15 0.15 C 9705 440 M
727 [ [(Helvetica) 200.0 0.0 true true 0 (120)]
728 ] -66.7 MCshow
729 1.000 UL
730 LTb
731 0.00 0.00 0.00 C 11159 640 M
732 0 88 V
733 0 7711 R
734 0 -88 V
735 stroke
736 0.15 0.15 0.15 C 11159 440 M
737 [ [(Helvetica) 200.0 0.0 true true 0 (140)]
738 ] -66.7 MCshow
739 1.000 UL
740 LTb
741 0.00 0.00 0.00 C 1.000 UP
742 1.000 UL
743 LTb
744 0.00 0.00 0.00 C 0.15 0.15 0.15 C 180 4539 M
745 currentpoint gsave translate 90 rotate 0 0 moveto
746 [ [(Helvetica) 290.0 0.0 true true 0 (normalized coef. value)]
747 ] -73.3 MCshow
748 grestore
749 LTb
750 0.15 0.15 0.15 C 6069 140 M
751 [ [(Helvetica) 290.0 0.0 true true 0 (cofficient num)]
752 ] -73.3 MCshow
753 LTb
754 1.000 UL
755 LTb
756 LCb setrgbcolor
757 7976 7376 N
758 0 1000 V
759 3063 0 V
760 0 -1000 V
761 -3063 0 V
762 Z stroke
763 % Begin plot #1
764 2.000 UP
765 0.500 UL
766 LTb
767 0.00 0.45 0.74 C 0.00 0.00 0.00 C 8759 8126 M
768 [ [(Helvetica) 200.0 0.0 true true 0 (filter coefficients)]
769 ] -66.7 MLshow
770 2.000 UP
771 0.500 UL
772 LTb
773 0.00 0.45 0.74 C 8096 8126 M
774 543 0 V
775 1053 4539 M
776 72 0 V
777 73 0 V
778 73 1 V
779 73 0 V
780 72 0 V
781 73 -1 V
782 73 -1 V
783 72 1 V
784 73 2 V
785 73 1 V
786 72 -2 V
787 73 -1 V
788 73 1 V
789 73 0 V
790 72 -6 V
791 73 -3 V
792 73 11 V
793 72 13 V
794 73 -2 V
795 73 -19 V
796 73 -10 V
797 72 10 V
798 73 6 V
799 73 -12 V
800 72 0 V
801 73 36 V
802 73 32 V
803 73 -35 V
804 72 -76 V
805 73 -19 V
806 73 63 V
807 72 49 V
808 73 -25 V
809 73 -14 V
810 72 67 V
811 73 36 V
812 73 -130 V
813 73 -176 V
814 72 35 V
815 73 242 V
816 73 137 V
817 72 -119 V
818 73 -123 V
819 73 77 V
820 73 36 V
821 72 -270 V
822 73 -263 V
823 73 275 V
824 72 633 V
825 73 175 V
826 73 -536 V
827 72 -480 V
828 73 161 V
829 73 224 V
830 73 -405 V
831 72 -334 V
832 73 960 V
833 73 1624 V
834 72 -110 V
835 73 -2640 V
836 73 -2385 V
837 73 1150 V
838 72 3880 V
839 73 2159 V
840 73 -2159 V
841 72 -3880 V
842 73 -1150 V
843 73 2385 V
844 73 2640 V
845 72 110 V
846 73 -1624 V
847 73 -960 V
848 72 334 V
849 73 405 V
850 73 -224 V
851 72 -161 V
852 73 480 V
853 73 536 V
854 73 -175 V
855 72 -633 V
856 73 -275 V
857 73 263 V
858 72 270 V
859 73 -36 V
860 73 -77 V
861 73 123 V
862 72 119 V
863 73 -137 V
864 73 -242 V
865 72 -35 V
866 73 176 V
867 73 130 V
868 72 -36 V
869 73 -67 V
870 73 14 V
871 73 25 V
872 72 -49 V
873 73 -63 V
874 73 19 V
875 72 76 V
876 73 35 V
877 73 -32 V
878 73 -36 V
879 72 0 V
880 73 12 V
881 73 -6 V
882 72 -10 V
883 73 10 V
884 73 19 V
885 72 2 V
886 73 -13 V
887 73 -11 V
888 73 3 V
889 72 6 V
890 73 0 V
891 73 -1 V
892 72 1 V
893 73 2 V
894 73 -1 V
895 73 -2 V
896 72 -1 V
897 73 1 V
898 73 1 V
899 72 0 V
900 73 0 V
901 73 -1 V
902 73 0 V
903 72 0 V
904 8368 8126 Pnt
905 % End plot #1
906 % Begin plot #2
907 0.667 UP
908 0.500 UL
909 LTb
910 1.00 0.00 0.00 C 0.00 0.00 0.00 C 8759 7626 M
911 [ [(Helvetica) 200.0 0.0 true true 0 (6 bit quantization)]
912 ] -66.7 MLshow
913 0.667 UP
914 0.500 UL
915 LTb
916 1.00 0.00 0.00 C 1053 4540 CircleF
917 8368 7626 CircleF
918 % End plot #2
919 % Begin plot #3
920 0.667 UP
921 0.500 UL
922 LTb
923 1.00 0.00 0.00 C 1125 4540 CircleF
924 % End plot #3
925 % Begin plot #4
926 0.667 UP
927 0.500 UL
928 LTb
929 1.00 0.00 0.00 C 1198 4540 CircleF
930 % End plot #4
931 % Begin plot #5
932 0.667 UP
933 0.500 UL
934 LTb
935 1.00 0.00 0.00 C 1271 4540 CircleF
936 % End plot #5
937 % Begin plot #6
938 0.667 UP
939 0.500 UL
940 LTb
941 1.00 0.00 0.00 C 1344 4540 CircleF
942 % End plot #6
943 % Begin plot #7
944 0.667 UP
945 0.500 UL
946 LTb
947 1.00 0.00 0.00 C 1416 4540 CircleF
948 % End plot #7
949 % Begin plot #8
950 0.667 UP
951 0.500 UL
952 LTb
953 1.00 0.00 0.00 C 1489 4540 CircleF
954 % End plot #8
955 % Begin plot #9
956 0.667 UP
957 0.500 UL
958 LTb
959 1.00 0.00 0.00 C 1562 4540 CircleF
960 % End plot #9
961 % Begin plot #10
962 0.667 UP
963 0.500 UL
964 LTb
965 1.00 0.00 0.00 C 1634 4540 CircleF
966 % End plot #10
967 % Begin plot #11
968 0.667 UP
969 0.500 UL
970 LTb
971 1.00 0.00 0.00 C 1707 4540 CircleF
972 % End plot #11
973 % Begin plot #12
974 0.667 UP
975 0.500 UL
976 LTb
977 1.00 0.00 0.00 C 1780 4540 CircleF
978 % End plot #12
979 % Begin plot #13
980 0.667 UP
981 0.500 UL
982 LTb
983 1.00 0.00 0.00 C 1852 4540 CircleF
984 % End plot #13
985 % Begin plot #14
986 0.667 UP
987 0.500 UL
988 LTb
989 1.00 0.00 0.00 C 1925 4540 CircleF
990 % End plot #14
991 % Begin plot #15
992 0.667 UP
993 0.500 UL
994 LTb
995 1.00 0.00 0.00 C 1998 4540 CircleF
996 % End plot #15
997 % Begin plot #16
998 0.667 UP
999 0.500 UL
1000 LTb
1001 1.00 0.00 0.00 C 2071 4540 CircleF
1002 % End plot #16
1003 % Begin plot #17
1004 0.667 UP
1005 0.500 UL
1006 LTb
1007 1.00 0.00 0.00 C 2143 4540 CircleF
1008 % End plot #17
1009 % Begin plot #18
1010 0.667 UP
1011 0.500 UL
1012 LTb
1013 1.00 0.00 0.00 C 2216 4540 CircleF
1014 % End plot #18
1015 % Begin plot #19
1016 0.667 UP
1017 0.500 UL
1018 LTb
1019 1.00 0.00 0.00 C 2289 4540 CircleF
1020 % End plot #19
1021 % Begin plot #20
1022 0.667 UP
1023 0.500 UL
1024 LTb
1025 1.00 0.00 0.00 C 2361 4540 CircleF
1026 % End plot #20
1027 % Begin plot #21
1028 0.667 UP
1029 0.500 UL
1030 LTb
1031 1.00 0.00 0.00 C 2434 4540 CircleF
1032 % End plot #21
1033 % Begin plot #22
1034 0.667 UP
1035 0.500 UL
1036 LTb
1037 1.00 0.00 0.00 C 2507 4540 CircleF
1038 % End plot #22
1039 % Begin plot #23
1040 0.667 UP
1041 0.500 UL
1042 LTb
1043 1.00 0.00 0.00 C 2580 4540 CircleF
1044 % End plot #23
1045 % Begin plot #24
1046 0.667 UP
1047 0.500 UL
1048 LTb
1049 1.00 0.00 0.00 C 2652 4540 CircleF
1050 % End plot #24
1051 % Begin plot #25
1052 0.667 UP
1053 0.500 UL
1054 LTb
1055 1.00 0.00 0.00 C 2725 4540 CircleF
1056 % End plot #25
1057 % Begin plot #26
1058 0.667 UP
1059 0.500 UL
1060 LTb
1061 1.00 0.00 0.00 C 2798 4540 CircleF
1062 % End plot #26
1063 % Begin plot #27
1064 0.667 UP
1065 0.500 UL
1066 LTb
1067 1.00 0.00 0.00 C 2870 4540 CircleF
1068 % End plot #27
1069 % Begin plot #28
1070 0.667 UP
1071 0.500 UL
1072 LTb
1073 1.00 0.00 0.00 C 2943 4540 CircleF
1074 % End plot #28
1075 % Begin plot #29
1076 0.667 UP
1077 0.500 UL
1078 LTb
1079 1.00 0.00 0.00 C 3016 4540 CircleF
1080 % End plot #29
1081 % Begin plot #30
1082 0.667 UP
1083 0.500 UL
1084 LTb
1085 1.00 0.00 0.00 C 3089 4540 CircleF
1086 % End plot #30
1087 % Begin plot #31
1088 0.667 UP
1089 0.500 UL
1090 LTb
1091 1.00 0.00 0.00 C 3161 4540 CircleF
1092 % End plot #31
1093 % Begin plot #32
1094 0.667 UP
1095 0.500 UL
1096 LTb
1097 1.00 0.00 0.00 C 3307 4540 CircleF
1098 % End plot #32
1099 % Begin plot #33
1100 0.667 UP
1101 0.500 UL
1102 LTb
1103 1.00 0.00 0.00 C 3379 4540 CircleF
1104 % End plot #33
1105 % Begin plot #34
1106 0.667 UP
1107 0.500 UL
1108 LTb
1109 1.00 0.00 0.00 C 3452 4540 CircleF
1110 % End plot #34
1111 % Begin plot #35
1112 0.667 UP
1113 0.500 UL
1114 LTb
1115 1.00 0.00 0.00 C 3525 4540 CircleF
1116 % End plot #35
1117 % Begin plot #36
1118 0.667 UP
1119 0.500 UL
1120 LTb
1121 1.00 0.00 0.00 C 3743 4540 CircleF
1122 % End plot #36
1123 % Begin plot #37
1124 0.667 UP
1125 0.500 UL
1126 LTb
1127 1.00 0.00 0.00 C 4179 4540 CircleF
1128 % End plot #37
1129 % Begin plot #38
1130 0.667 UP
1131 0.500 UL
1132 LTb
1133 1.00 0.00 0.00 C 4252 4540 CircleF
1134 % End plot #38
1135 % Begin plot #39
1136 0.667 UP
1137 0.500 UL
1138 LTb
1139 1.00 0.00 0.00 C 4979 4540 CircleF
1140 % End plot #39
1141 % Begin plot #40
1142 0.667 UP
1143 0.500 UL
1144 LTb
1145 1.00 0.00 0.00 C 6433 4540 CircleF
1146 % End plot #40
1147 % Begin plot #41
1148 0.667 UP
1149 0.500 UL
1150 LTb
1151 1.00 0.00 0.00 C 7160 4540 CircleF
1152 % End plot #41
1153 % Begin plot #42
1154 0.667 UP
1155 0.500 UL
1156 LTb
1157 1.00 0.00 0.00 C 7233 4540 CircleF
1158 % End plot #42
1159 % Begin plot #43
1160 0.667 UP
1161 0.500 UL
1162 LTb
1163 1.00 0.00 0.00 C 7669 4540 CircleF
1164 % End plot #43
1165 % Begin plot #44
1166 0.667 UP
1167 0.500 UL
1168 LTb
1169 1.00 0.00 0.00 C 7887 4540 CircleF
1170 % End plot #44
1171 % Begin plot #45
1172 0.667 UP
1173 0.500 UL
1174 LTb
1175 1.00 0.00 0.00 C 7960 4540 CircleF
1176 % End plot #45
1177 % Begin plot #46
1178 0.667 UP
1179 0.500 UL
1180 LTb
1181 1.00 0.00 0.00 C 8033 4540 CircleF
1182 % End plot #46
1183 % Begin plot #47
1184 0.667 UP
1185 0.500 UL
1186 LTb
1187 1.00 0.00 0.00 C 8105 4540 CircleF
1188 % End plot #47
1189 % Begin plot #48
1190 0.667 UP
1191 0.500 UL
1192 LTb
1193 1.00 0.00 0.00 C 8251 4540 CircleF
1194 % End plot #48
1195 % Begin plot #49
1196 0.667 UP
1197 0.500 UL
1198 LTb
1199 1.00 0.00 0.00 C 8323 4540 CircleF
1200 % End plot #49
1201 % Begin plot #50
1202 0.667 UP
1203 0.500 UL
1204 LTb
1205 1.00 0.00 0.00 C 8396 4540 CircleF
1206 % End plot #50
1207 % Begin plot #51
1208 0.667 UP
1209 0.500 UL
1210 LTb
1211 1.00 0.00 0.00 C 8469 4540 CircleF
1212 % End plot #51
1213 % Begin plot #52
1214 0.667 UP
1215 0.500 UL
1216 LTb
1217 1.00 0.00 0.00 C 8542 4540 CircleF
1218 % End plot #52
1219 % Begin plot #53
1220 0.667 UP
1221 0.500 UL
1222 LTb
1223 1.00 0.00 0.00 C 8614 4540 CircleF
1224 % End plot #53
1225 % Begin plot #54
1226 0.667 UP
1227 0.500 UL
1228 LTb
1229 1.00 0.00 0.00 C 8687 4540 CircleF
1230 % End plot #54
1231 % Begin plot #55
1232 0.667 UP
1233 0.500 UL
1234 LTb
1235 1.00 0.00 0.00 C 8760 4540 CircleF
1236 % End plot #55
1237 % Begin plot #56
1238 0.667 UP
1239 0.500 UL
1240 LTb
1241 1.00 0.00 0.00 C 8832 4540 CircleF
1242 % End plot #56
1243 % Begin plot #57
1244 0.667 UP
1245 0.500 UL
1246 LTb
1247 1.00 0.00 0.00 C 8905 4540 CircleF
1248 % End plot #57
1249 % Begin plot #58
1250 0.667 UP
1251 0.500 UL
1252 LTb
1253 1.00 0.00 0.00 C 8978 4540 CircleF
1254 % End plot #58
1255 % Begin plot #59
1256 0.667 UP
1257 0.500 UL
1258 LTb
1259 1.00 0.00 0.00 C 9050 4540 CircleF
1260 % End plot #59
1261 % Begin plot #60
1262 0.667 UP
1263 0.500 UL
1264 LTb
1265 1.00 0.00 0.00 C 9123 4540 CircleF
1266 % End plot #60
1267 % Begin plot #61
1268 0.667 UP
1269 0.500 UL
1270 LTb
1271 1.00 0.00 0.00 C 9196 4540 CircleF
1272 % End plot #61
1273 % Begin plot #62
1274 0.667 UP
1275 0.500 UL
1276 LTb
1277 1.00 0.00 0.00 C 9269 4540 CircleF
1278 % End plot #62
1279 % Begin plot #63
1280 0.667 UP
1281 0.500 UL
1282 LTb
1283 1.00 0.00 0.00 C 9341 4540 CircleF
1284 % End plot #63
1285 % Begin plot #64
1286 0.667 UP
1287 0.500 UL
1288 LTb
1289 1.00 0.00 0.00 C 9414 4540 CircleF
1290 % End plot #64
1291 % Begin plot #65
1292 0.667 UP
1293 0.500 UL
1294 LTb
1295 1.00 0.00 0.00 C 9487 4540 CircleF
1296 % End plot #65
1297 % Begin plot #66
1298 0.667 UP
1299 0.500 UL
1300 LTb
1301 1.00 0.00 0.00 C 9559 4540 CircleF
1302 % End plot #66
1303 % Begin plot #67
1304 0.667 UP
1305 0.500 UL
1306 LTb
1307 1.00 0.00 0.00 C 9632 4540 CircleF
1308 % End plot #67
1309 % Begin plot #68
1310 0.667 UP
1311 0.500 UL
1312 LTb
1313 1.00 0.00 0.00 C 9705 4540 CircleF
1314 % End plot #68
1315 % Begin plot #69
1316 0.667 UP
1317 0.500 UL
1318 LTb
1319 1.00 0.00 0.00 C 9778 4540 CircleF
1320 % End plot #69
1321 % Begin plot #70
1322 0.667 UP
1323 0.500 UL
1324 LTb
1325 1.00 0.00 0.00 C 9850 4540 CircleF
1326 % End plot #70
1327 % Begin plot #71
1328 0.667 UP
1329 0.500 UL
1330 LTb
1331 1.00 0.00 0.00 C 9923 4540 CircleF
1332 % End plot #71
1333 % Begin plot #72
1334 0.667 UP
1335 0.500 UL
1336 LTb
1337 1.00 0.00 0.00 C 9996 4540 CircleF
1338 % End plot #72
1339 % Begin plot #73
1340 0.667 UP
1341 0.500 UL
1342 LTb
1343 1.00 0.00 0.00 C 10068 4540 CircleF
1344 % End plot #73
1345 % Begin plot #74
1346 0.667 UP
1347 0.500 UL
1348 LTb
1349 1.00 0.00 0.00 C 10141 4540 CircleF
1350 % End plot #74
1351 % Begin plot #75
1352 0.667 UP
1353 0.500 UL
1354 LTb
1355 1.00 0.00 0.00 C 10214 4540 CircleF
1356 % End plot #75
1357 % Begin plot #76
1358 0.667 UP
1359 0.500 UL
1360 LTb
1361 1.00 0.00 0.00 C 10287 4540 CircleF
1362 % End plot #76
1363 % Begin plot #77
1364 0.667 UP
1365 0.500 UL
1366 LTb
1367 1.00 0.00 0.00 C 10359 4540 CircleF
1368 % End plot #77
1369 % Begin plot #78
1370 2.000 UP
1371 0.500 UL
1372 LTb
1373 0.00 0.00 0.00 C 1053 4600 M
1374 9234 0 V
1375 % End plot #78
1376 % Begin plot #79
1377 2.000 UP
1378 stroke
1379 LTb
1380 0.00 0.00 0.00 C 1053 4479 M
1381 9234 0 V
1382 % End plot #79
1383 % Begin plot #80
1384 2.000 UP
1385 stroke
1386 LTb
1387 0.00 0.00 0.00 C 980 4929 M
1388 2181 0 V
1389 % End plot #80
1390 % Begin plot #81
1391 2.000 UP
1392 stroke
1393 LTb
1394 0.00 0.00 0.00 C 8105 4929 M
1395 2182 0 V
1396 % End plot #81
1397 stroke
1398 2.000 UL
1399 LTb
1400 LCb setrgbcolor
1401 1.000 UP
1402 0.00 0.00 0.00 C 1707 5124 M
1403 [ [(Helvetica) 200.0 0.0 true true 0 (30 coefs at 0)]
1404 ] -66.7 MLshow
1405 0.00 0.00 0.00 C 8978 5124 M
1406 [ [(Helvetica) 200.0 0.0 true true 0 (30 coefs at 0)]
1407 ] -66.7 MLshow
1408 0.500 UL
1409 [] 0 setdash
1410 PL 0.15 0.15 0.15 C 980 640 M
1411 10179 0 V
1412 stroke
1413 [] 0 setdash
1414 0.15 0.15 0.15 C 980 8439 M
1415 10179 0 V
1416 stroke
1417 [] 0 setdash
1418 0.15 0.15 0.15 C 980 640 M
1419 0 7799 V
1420 stroke
1421 [] 0 setdash
1422 0.15 0.15 0.15 C 11159 640 M
1423 0 7799 V
1424 stroke
1425 1.000 UL
1426 LTb
1427 0.00 0.00 0.00 C grestore % colour palette end
1428 stroke
1429 grestore
1430 end
1431 showpage
1432 %%Trailer
1433 %%DocumentFonts: Helvetica
images/demo_filtre.m
File was created 1 pkg load signal
2 close all
3 clear all
4
5 d=firls(128,[0 .2 .3 .4 .5 1],[0 0 1 1 0 0]);
6 d=d/max(d);
7 plot(d)
8 N=6;
9 k=find(abs(d)<2^(-N))
10 hold on
11 plot(k,0,'r.')
12 line([1 128],[2^(-N) 2^(-N)])
13 line([1 128],[-2^(-N) -2^(-N)])
14 legend('filter coefficients',[num2str(N),' bit quantization'])
15 kk=find(diff(k)>1);
16 k(kk(1))
17 k(kk(end))
18 xlabel('cofficient num');ylabel('normalized coef. value')
19 line([0 k(kk(1))],[0.1 0.1])
20 line([k(kk(end)) 128],[0.1 0.1])
21 text(10,0.15,'30 coefs at 0')
images/demo_filtre.pdf
No preview for this file type