以 dB 为单位给出 y 轴数据?

以 dB 为单位给出 y 轴数据?

我最近学习了如何在 pgfplots 中绘图,并且非常喜欢它的输出。我在 matlab 中生成数据,然后将其写入文件。文件的一行将包含两个条目,首先是 x 轴数据,然后是相应的 y 轴数据。现在我意识到,我实际上希望 y 轴数据以 dB 为单位,即无论该文件中的当前值是什么,我都希望“x”对应“10*log(y)”,其中对数以 10 为底。但是,现在我无法返回 matlab 并再次生成所有这些数据。所以我必须在 pgfplots 中执行此操作。这可能吗?

对于 MWE,这是我在名为 fig1-line1.dat 的文件中拥有的数据

0   0.095529
1   0.12026
2   0.1514
3   0.19061
4   0.23996
5   0.30209
6   0.38031
7   0.47878
8   0.60275
9   0.75882
10  0.95529

这是我当前绘制它的代码。

\documentclass[a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds,shapes,shadows,fit,calc}
\usetikzlibrary[arrows,decorations.pathmorphing,backgrounds,positioning,fit,petri]
\usepackage{pgfplots}
\pgfplotsset{compat=1.3}% <-- moves axis labels near ticklabels (respects tick label widths)
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}



\pgfplotsset{every axis legend/.append style={legend pos = north west},legend cell align = {left}}

\pgfplotsset{%
tick label style={font=\normalsize},
title style={font=\normalsize,align=center},
label style={font=\normalsize,align=center},
legend style={font=\normalsize}
            }

\begin{axis}[%
xlabel = {Iterations},
ylabel = {Relative Error in Convergence $\epsilon_i$},
title  = {Convergence Rate v/s Iterations},
enlargelimits = true,
cycle list name = {color},
grid = major,
smooth,
scale = 1]

\addlegendentry{$K=2$, $M=3$}

\addplot [ color = {blue}, 
           mark  = {o},
           style = {solid},
           line width = 2pt] table {fig1-line1.dat};



\end{axis}
\end{tikzpicture}
\caption{A larger example}
\end{figure}
\end{document}

因此,当前的图是“x”对“y”。现在我想将其改为“x”对“10*log(y)”?我该怎么做?

答案1

您可以使用以下方式转换数据y filter/.code={\pgfmathparse{10*log10(\pgfmathresult))}

\documentclass[a4paper]{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}

\begin{axis}[
y filter/.code={\pgfmathparse{10*log10(\pgfmathresult)}}
]
\addplot table {
0   0.095529
1   0.12026
2   0.1514
3   0.19061
4   0.23996
5   0.30209
6   0.38031
7   0.47878
8   0.60275
9   0.75882
10  0.95529           
};
\end{axis}
\end{tikzpicture}
\end{document}

答案2

我不知道为什么你有 10 但是分贝有 20 作为因子但你可以根据你的意愿修改它。

\documentclass[border=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{every axis legend/.append style={legend pos = north west},legend cell align = {left}}

\begin{document}
\begin{tikzpicture}
\begin{semilogyaxis}[
log basis y=10,
yticklabel={\pgfmathparse{20*(\tick)}\pgfmathprintnumber[fixed]{\pgfmathresult}},
xlabel = {Iterations},
ylabel = {Relative Error in Convergence $\epsilon_i$ [dB]},
title  = {Convergence Rate v/s Iterations},
enlargelimits = true,
cycle list name = {color},
grid = major,
smooth,
scale = 1]
\addlegendentry{$K=2$, $M=3$}

\addplot [ color = {blue}, 
           mark  = {o},
           style = {solid},
           line width = 2pt] table {
0   0.095529
1   0.12026
2   0.1514
3   0.19061
4   0.23996
5   0.30209
6   0.38031
7   0.47878
8   0.60275
9   0.75882
10  0.95529
};
\end{semilogyaxis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容