Estou tentando recriar este gráfico.
Eu sei que meu método é arcaico e um tanto errado, estou perguntando se existe uma maneira melhor de replicar o representado acima function
sem ter que desenhá-lo quase manualmente, como estou fazendo atualmente curve through points
.
A explicação:
A função não é definida por uma fórmula, mas representa a distância entre a amplitude de um sinal e o que é chamado de piso de ruído (ruído com amplitude constante) da saída de um conversor analógico-digital. À medida que a amplitude do sinal aumenta, ele se distancia linearmente do ruído. Assim, a primeira parte da função. Mas aí seu crescimento deixa de ser linear, atinge seu pico, seguindo com a saturação do conversor analógico-digital e diminuição abrupta da distância entre a amplitude do sinal e o piso de ruído.
Aqui está minha tentativa com este MWE:
\documentclass{memoir}
\usepackage{tikz,pgfplots}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{shapes,snakes}
\usetikzlibrary{patterns,hobby}
\begin{document}
\begin{figure}[htbp]
\centering
\begin{tikzpicture}
\draw[-{Latex[length=2.5mm, width=1.5mm]}] (0,0)--(6,0) node[anchor=north]{};
\draw[-{Latex[length=2.5mm, width=1.5mm]}] (0,0)--(0,6) node[anchor=east]{};
\node[anchor=south, rotate=90] at (-0.5,3) {$SNR,~SNDR~[dB]$};
\node[anchor=north] at (3,-0.5) {$Input~Signal~Amplitude~[dBv]$};
\node[anchor=north east] at (0,0) {0};
\draw (0,0) -- (4,4);
\draw (4,4) to [curve through ={(4.2,4) . . (4.5,3.6)}] (5,2);% curve
\end{tikzpicture}
\caption{Performance metrics.}
\end{figure}
\end{document}
Resultado:
Responder1
Você pode apenas plotar funções. Se você fornecer mais informações de onde vem esse enredo, encontrarei uma função melhor. O que estou fazendo aqui é traçar um arco elíptico. Estou usando funções para isso, mas você poderia igualmente usar a arc
sintaxe fornecida por TikZ. A razão para os arcos elípticos é que suas funções parecem se tornar verticais em x_max/2. E a razão para desenhar funções é que suspeito que você tenha uma teoria por trás desses gráficos e acabará alimentando o gráfico com funções reais. (E presumo que você não tenha dificuldades em desenhar os recursos adicionais.)
\documentclass{memoir}
\usepackage{amsmath,amssymb}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,calc,intersections}
\begin{document}
I guess that has now become more a mathematics problem. Let's assume you really
want a function that starts off at $(x_1,y_1)$ somewhere with slope 1 and then
has slope $-\infty$ at some other place. This defines an elliptical arc, which
can be parametrized by
\[ \gamma(\varphi)~=~\left(\begin{array}{c}
x_0+a\,\cos(\varphi)\\ b\,\sin(\varphi)
\end{array}\right)\;.\]
Here, we have set a possible shift in $y$ direction to 0 since we want the slope
to become infinite when the curve hits the $x$--axis.
What is the angle at which the slope is 1? The slope is given by the ratio of
the derivatives of the coordinates, such that
\[ -\frac{b\,\cos(\varphi_1)}{a\,\sin(\varphi_1)}~\stackrel{!}{=}~1
\quad\curvearrowright\quad \varphi_1~=~-\arctan\left(\frac{b}{a}\right)\;.
\]
Now we want at the same time that
\[ \gamma(\varphi)~=~\left(\begin{array}{c}
x_0+a\,\cos(\varphi_1)\\ b\,\sin(\varphi_1)
\end{array}\right)~=~
\left(\begin{array}{c}
x_0-\frac{1}{\sqrt{1+b^2/a^2}}\\
\frac{b/a}{\sqrt{1+b^2/a^2}}
\end{array}\right)
~\stackrel{!}{=}~
\left(\begin{array}{c}x_1\\ y_1\end{array}\right)\;.\]
This means that we can only adjust one parameter, say $b$, and the other
parameters are then fixed by
\[
a^2~=~\frac{b}{y_1}\,\sqrt{b^2-y_1^2}\quad\text{and}\quad
x_0~=~x_1-y_1+\frac{b^2}{y_1}\;.
\]
\begin{figure}[htbp]
\centering
\begin{tikzpicture}
\draw[-{Latex[length=2.5mm, width=1.5mm]}] (0,0)--(6,0) node[anchor=north]{};
\draw[-{Latex[length=2.5mm, width=1.5mm]}] (0,0)--(0,6) node[anchor=east]{};
\node[anchor=south, rotate=90] at (-0.5,3) {SNR,~SNDR~[dB]};
\node[anchor=north] at (3,-0.5) {Input~Signal~Amplitude~[dBv]};
\node[anchor=north east] at (0,0) {0};
\draw (0,0) -- (4,4);
% in these examples I have set x_1 = y_1 = 4
\def\xOne{4}
\def\b{4.15}
\pgfmathsetmacro{\a}{\b*sqrt((\b^2-\xOne^2))/4}
\draw[name path=upper plot] plot[variable=\x,domain=180-atan(\b/\a):0,samples=50]
({\xOne-(\xOne-\b^2/\xOne)+\a*cos(\x)},{\b*sin(\x)});
\coordinate (max1) at({\xOne-(\xOne-\b^2/\xOne)+\a*cos(90)},{\b*sin(90)});
\def\b{3.9}
\def\xOne{3.7}
\pgfmathsetmacro{\a}{\b*sqrt((\b^2-\xOne^2))/\xOne}
\draw[dashed,name path=lower plot] plot[variable=\x,domain=180-atan(\b/\a):0,samples=50]
({\xOne-(\xOne-\b^2/\xOne)+\a*cos(\x)},{\b*sin(\x)});
\coordinate (max2) at
({\xOne-(\xOne-\b^2/\xOne)+\a*cos(90)},{\b*sin(90)});
\coordinate (O) at (0,0);
\draw[dotted] (O|-max1) -- (max1) node[above,pos=0.7]{SNR$_\mathrm{peak}$} --(O-|max1);
\path [name path=horizontal 2] (max2) -- ++(2cm,0);
\draw [dotted,name intersections={of=upper plot and horizontal 2, by={a0}}]
(a0) -- ++(-2cm,0) node[left]{SNDR$_\mathrm{peak}$};
\end{tikzpicture}
\caption{Performance metrics.}
\end{figure}
\end{document}
Você pode ajustar um parâmetro, \b, para controlar o arco. E é simples ler o máximo e assim por diante, e você pode usar TikZ para fazer todo tipo de coisa com ele, conforme ilustrado.