The FFT of a sine wave with varying frequency and constant amplitude does not show a plateau, why?
Your Python code has two weak spots, rather typos, but these are not the source of your failure to &quot;show a plateau&quot; in PSD graph. First we review these &quot;typos&quot;.
The line
f, check = welch(Const_wave,samplerate,nperseg=len(Wave))

must read
f, check = welch(Const_wave,samplerate,nperseg=len(Const_wave))

or else, the variable Const_wave must be Wave. Without correcting this &quot;typo&quot;, which might appear when you copied the code to the post, your code does not compile.
Then,
time = np.linspace(0,duration,samplerate*duration, endpoint= False)
frequency = np.linspace(21,19700,len(time),endpoint= False)
Const_wave = np.sin(np.pi*2*frequency*time)

results in a frequency sweep up to 19700*2, not to 19700, but maybe you did it intentionally. If not, notice that the instantaneous frequency is the derivative of the phase. To reach a frequency of $f_{max}$ in the frequency sweep, the formulas are
$$
phase(t) = f_{min}·t + (f_{max} - f_{min})/duration·t^2/2 \\
sweep\_wave(t) = \sin(2π·phase(t)) \\
instantaneous\_freq(t) = f_{min} + ((f_{max} - f_{min})/duration)·t
$$
and you should write the code
from scipy import signal 
...
fmin = 21
fmax = 19700
time = np.linspace(0,duration,samplerate*duration, endpoint= False)
Const_wave = np.sin(np.pi*2*(fmin*time + (fmax-fmin)/duration*time*time/2.0))


Back to your question why &quot;a sine wave with varying frequency and constant amplitude does not show a plateau&quot;: the answer can be found in your choice of the Welch method's parameters. You apply the Welch method to the signal in the entire range processed with a Hann window (see the scipy.signal.welch reference), and your Hann window &quot;leaks&quot; into the PSD. You have two options to reach the desired &quot;plateau&quot;.
1st: Specify the named parameter window with the array-like value, like this
f, check = signal.welch(Const_wave,samplerate,window=np.ones(len(Const_wave)))


2nd: Retaining the default (Hann) window (omitting the named parameter window), decrease the value of the named parameter nperseg to a lower value commensurate with a maximum wave period (minimum frequency) in the sweep, like this
f, check = signal.welch(Const_wave,samplerate,nperseg=samplerate/frequency[0])

you can also try to adjust the noverlap parameter value (defaulted to half the nperseg value).

In both cases, the graphs would not yet become ideal &quot;plateaus&quot;, and to understand discrepancies--quite substantial in the second case--you should delve deeper into the Welch's method working in particular and into the study of signal processing algorithms in general.
Any way, you have to, since the audio engineering requires a quite solid background in signal processing. In the future, your involvement with more advanced AE projects may (and often will) require a subscription to the Journal of the Audio Engineering Society.
In the meantime, let me recommend you references related to the issues you raised in your question (including Harman target curves):
Transfer-Function Measurement with Sweeps by Swen Müller and Paulo Massarani
Simultaneous measurement of impulse response and distortion with a swept-sine technique by Angelo Farina
Github's project AutoEQ