summaryrefslogtreecommitdiff
path: root/opcodes/pvstencil.xml
blob: 4077f21c1993c9db9df6ee3bae4e9e620f501dea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<refentry id="pvstencil">
<indexterm id="IndexPvstencil"><primary>pvstencil</primary></indexterm>
  <refentryinfo><title>Spectral Processing:Streaming</title></refentryinfo>
  <refmeta>
    <refentrytitle>pvstencil</refentrytitle>
  </refmeta>



  <refnamediv>
    <refname>pvstencil</refname>
    <refpurpose>
      Transforms a pvoc stream according to a masking function table.
          </refpurpose>
  </refnamediv>
  
  <refsect1>
    <title>Description</title>
    <para>
      Transforms a pvoc stream according to a masking function table;
    if the pvoc stream amplitude falls below the value of the function
    for a specific pvoc channel, it applies a gain to that channel.
    </para>
    <para>
      The pvoc stream amplitudes are compared to a masking table, if
    the fall below the table values, they are scaled by kgain. Prior
    to the operation, table values are scaled by klevel, which can be
    used as masking depth control.
    </para>
    <para>
    Tables have to be at least fftsize/2 in size; for most GENS it is
    important to use an extended-guard point (size power-of-two plus
    one), however this is not necessary with GEN43.
    </para>
    <para>
    One of the typical uses of pvstencil would be in noise
    reduction. A noise print can be analysed with pvanal into a PVOCEX
    file and loaded in a table with GEN43. This then can be used as
    the masking table for pvstencil and the amount of reduction would
    be controlled by kgain. Skipping post-normalisation will keep the
    original noise print average amplitudes. This would provide a good
    starting point for a successful noise reduction (so that klevel
    can be generally set to close to 1).
    </para>
    <para>
    Other possible transformation effects are possible, such as
    filtering and `inverse-masking'.
    </para>
  </refsect1>

  <refsect1>
    <title>Syntax</title>
    <synopsis>fsig <command>pvstencil</command> fsigin, kgain, klevel, iftable</synopsis>
  </refsect1>

  <refsect1>
    <title>Performance</title>
    <para>
      <emphasis>fsig</emphasis> -- output pv stream
    </para>

    <para>
      <emphasis>fsigin</emphasis> -- input pv stream.
    </para>

    <para>
      <emphasis>kgain</emphasis> -- `stencil' gain.
    </para>

    <para>
      <emphasis>klevel</emphasis> -- masking function level (scales
    the ftable prior to `stenciling') .
    </para>

    <para>
      <emphasis>iftable</emphasis> -- masking function table.
    </para>

    <warning>
      <para>
        It is unsafe to use the same f-variable for both input and output of pvs opcodes. Using the same one might lead to undefined behavior on some opcodes. Use a different one on the left and right sides of the opcode.
      </para>
    </warning>

  </refsect1>

  <refsect1>
    <title>Examples</title>
    <para>
      <example>
        <title>Example</title>
        <programlisting>
fsig    pvsanal   asig, 1024, 256, 1024, 1
fclean  pvstencil fsig, 0, 1, 1
aclean  pvsynth  fclean
        </programlisting>
      </example>

    </para>
  </refsect1>

  <refsect1>
    <title>Credits</title>
    <para>
      <simplelist>
        <member>Author: &namevictor;</member>
        <member>November 2004 </member>
      </simplelist>
    </para>

    <para>New plugin in version 5</para>
    <para>Nivember 2004.</para>
  </refsect1>
</refentry>