在 tikz 中绘制随机信号形状?

在 tikz 中绘制随机信号形状?

是否有可能在 tikz 中以简单的方式绘制信号......

我有兴趣画这样的东西在此处输入图片描述

信号的形状并不重要...我只必须要能够在其间画出箭头和文字。

关于元帖子:

我写这篇文章的目的绝不是让别人给我完整的解决方案。我只对可能产生随机信号的方式感兴趣,这是由正弦解给出的...我现在明白标题/问题可能具有误导性。很抱歉它可能给你带来了麻烦。

答案1

纯 TikZ 解决方案:

在此处输入图片描述

\documentclass[tikz,
               border=3mm,
               ]{standalone}
\usetikzlibrary{arrows.meta,
                quotes
                }
\begin{document}
    \begin{tikzpicture}[x=16mm,
       every edge/.style = {draw, Straight Barb-Straight Barb},
every edge quotes/.style = {fill=white,font=\footnotesize}
                    ]
\draw[very thick,red, smooth,domain=9:101] plot (\x/10,rand);

\foreach \x in {1, 3, 4, 5, 7, 6, 8, 9, 10}
    \draw[dashed]  (\x,-1.1) -- ++ (0,2.2);

\draw   (3.0,-1.3) edge ["Frame step"] ++ (2,0)
        (5.0,-1.3) edge ["Overlap"] ++ (1,0)
        (1.0,-1.6) edge ["Frame 1"] ++ (3,0)
        (5.0,-1.6) edge ["Frame 3"] ++ (3,0)
        (3.0,-1.9) edge ["Frame 2"] ++ (3,0)
        (7.0,-1.9) edge ["Frame 4"] ++ (3,0);
    \end{tikzpicture}
\end{document}

答案2

我很无聊,所以这里有一个建议,并得到了一些帮助pgfplots

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14} 

\begin{document}
\begin{tikzpicture}[
  doublearrow/.style={
    <->, 
    >=latex,
   every node/.style={fill=white,font=\scriptsize}}]
\begin{axis}[
  axis lines=none,
  clip=false,
  width=12cm,
  height=3cm
]
\pgfmathsetseed{1} % to get same output every time
\addplot[black,smooth,domain=0:10] {rnd};
\pgfplotsinvokeforeach{1,3,3.5,5,7,7.5,9}{% draw vertical dotted line at these x-positions
  \draw [densely dotted] (#1,0) -- (#1,1.5);
}

% draw arrows with text
\draw [doublearrow] (1,-0.2) -- node{Frame 1} (3.5,-0.2);
\draw [doublearrow] (3,-0.4) -- node{Frame 2} (5,-0.4);
\end{axis}
\end{tikzpicture}
\end{document} 

而且因为我正在研究这个问题,而其他答案已经发布,所以只使用 TikZ。我制作了一些宏来保存框架宽度、步长等,以便您可以根据需要轻松修改。更改一个宏,所有箭头也会移动。(我假设这里的框架宽度和步长是恒定的。)

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
  doublearrow/.style={
    <->, 
    >=latex,
   every node/.style={fill=white,font=\scriptsize}}]

\pgfmathsetseed{42}
\draw plot[smooth,domain=0:12,samples=25] (\x,rnd);

\pgfmathsetmacro\FrameStart{1}
\pgfmathsetmacro\FrameW{3}
\pgfmathsetmacro\FrameOverlap{0.5}
\pgfmathsetmacro\FrameStep{\FrameW-\FrameOverlap}

\foreach[
  evaluate=\i as \y using {ifthenelse(mod(\i,2)==0,-0.4,-0.8)},
  evaluate=\i as \X using \i*\FrameStep+\FrameStart,
  count=\j
] \i in {0,...,3} {
  \draw [densely dotted] (\X,0) -- (\X,1.5);
  \draw [densely dotted] (\X+\FrameW,0) -- (\X+\FrameW,1.5);
  \draw [doublearrow] (\X,\y) -- node{Frame \j} (\X+\FrameW,\y);
}
\draw [doublearrow] (\FrameStart+\FrameStep,1.3) -- node{Frame step} +(\FrameStep,0);
\draw [doublearrow] (\FrameStart+3*\FrameStep,1) -- node[above=2pt,font=\tiny]{Overlap} +(\FrameOverlap,0);

\end{tikzpicture}
\end{document} 

答案3

我根据@Dr.ManuelKuehner 的建议制定了此解决方案:

\begin{figure}[H]
    \centering
    \begin{tikzpicture}
        % Frame length: 3
        % Overlap length:0.6
        % Frame start sections: 0 - 1.4 - 2.8 - 4.2
        % Frame end sections: 2 - 3.4 - 4.8 - 4.2

        \draw[->]   (-1,0) -- ++ (12,0) node[right] {Time}; %X-axis line
        \draw[thick, blue] plot[domain=0:11.7*pi, samples=60]  (\x/pi,{sin(0.9*\x r) + sin(0.42*\x r)}); %sine wave

        \draw[densely dashed]   (0,-1.5) -- + (0,3.0)      (3,-1.5) -- + (0,3.6);% frame 1 
        \draw[<->]      (0,-1.3) -- node[below] {Frame 1} + (3,0);

        \draw[densely dashed]   (2.4,-1.1) -- + (0,3.3)      (5.4,-1.1) -- + (0,4.1);
        \draw[<->]      (2.4,2.1) -- node[above] {Overlap} + (0.6,0);
        \draw[<->]      (2.4,-2.1) -- node[below] {Frame 2} + (3,0);


        \draw[densely dashed]   (4.8,-1.5) -- + (0,4.4)      (7.8,-1.5) -- + (0,3.6);
        \draw[<->]      (4.8,2.9) -- node[above] {Overlap} + (0.6,0);
        \draw[<->]      (4.8,-1.3) -- node[below] {Frame 3} + (3,0);


        \draw[densely dashed]   (7.2,-1.1) -- + (0,3.3)      (10.2,-1.1) -- + (0,3.3);
        \draw[<->]      (7.2,2.1) -- node[above] {Overlap} + (0.6,0);
        \draw[<->]      (7.2,-2.1) -- node[below] {Frame 4} + (3,0);

    \end{tikzpicture}  
\end{figure}

相关内容