June 24th, 2011 | No Comments
filledcurves style is only available for 2d plots. But it can be used with some limitations with splot in 3d plots as well. In this entry we want to visualize an effect known from psychoacoustics, called comodulation masking release. The effect describes the possibility of our hearing system to perceive a masked tone (in this case at 700 Hz) easier in the presence of so called comodulated maskers present in other auditory filters. Comodulation describes the fact, that all maskers have the same envelope, as can be seen in Fig. 1.
First we start with the gammatone filters. The values for them are stored in the gfb.dat file as one column per filter. In order to apply different colors to different filters the style function
sty(x) is defined. The
data(x) function is defined to be able to plot the filters in a particular order. This will result in the nice effect of overlapping filters shown in Fig. 2.
sty(x) = x<7 ? 1 : x<10 ? 2 : x<12 ? 1 : x==12 ? 3 : x<15 ? 1 : \ x==15 ? 2 : 1 data(x) = x<12 ? x : 29-x
The filter bank itself is plotted by the
gfb_loop.gnu function. There the data are plotted first as filledcurves and then as a line. This two step mechanism has to be used, because the
filledcurves style is not able to draw an extra line in 3d. Hence it has to be done in the extra
gfb_loop.gnu function, because the simple
for iteration only works for a single plot and is not able to plot the line around the filters.
# gfb_loop.gnu splot 'gfb.dat' u 2:1:(column(data(i))) w filledcurves \ ls sty(data(i)), \ '' u 2:1:(column(data(i))) ls 4 i = i+1 if (i<maxi) reread
Thereafter the modulated noise and its envelope and the signal are plotted in different parts of the graph by explicitly giving the x position.
The result is shown in Fig. 1.
splot 'noise.dat' u (300):1:2 ls 11, \ '' u (300):1:3 ls 14, \ '' u (400):1:2 ls 12, \ '' u (400):1:3 ls 14, \ '' u (700):1:2 ls 13, \ '' u (700):1:3 ls 14, \ '' u (1000):1:2 ls 12, \ '' u (1000):1:3 ls 14, \ '' u (1100):1:2 ls 11, \ '' u (1100):1:3 ls 14 splot 'sig.dat' u (700):1:2 ls 14