Some problems of your calculations are obvious.
Code:
plot(f,2*abs(signal_dB(1:NFFT/2+1)))
This results in an inverted plot as shown in Fig. 3a, cause signal_db is negative. I don't understand what you try to achieve here. I also don't see the purpose of the factor 2. If you invert the plot and remove the extra gain, it fit's much better the oscilloscope FFT display.
Generally, I suggest to validate the FFT operation with simple periodical signals rather than empirical signals that are similar to coloured noise. A squarewave e.g. has a well-known fourier series and the spectral results can be easily checked.