docs: def get_PSD(self, NPerSegment=1000000, window="hann", timeStart=None, timeEnd=None, override=False):
          """
          Extracts the power spectral density (PSD) from the data.
  
          Parameters
          ----------
          NPerSegment : int, optional
              Length of each segment used in scipy.welch
              default = 1000000
  
          window : str or tuple or array_like, optional
              Desired window to use. See get_window for a list of windows
              and required parameters. If window is array_like it will be
              used directly as the window and its length will be used for
              nperseg.
              default = "hann"
  
          Returns
          -------
          freqs : ndarray
                  Array containing the frequencies at which the PSD has been
                  calculated
          PSD : ndarray
                  Array containing the value of the PSD at the corresponding
                  frequency value in V**2/Hz
          """
          if timeStart == None and timeEnd == None:
              freqs, PSD = calc_PSD(self.voltage, self.SampleFreq, NPerSegment=NPerSegment)
              self.PSD = PSD
              self.freqs = freqs
          else:
              if timeStart == None:
                  timeStart = self.timeStart
              if timeEnd == None:
                  timeEnd = self.timeEnd
  
              time = self.time.get_array()
                  
              StartIndex = _np.where(time == take_closest(time, timeStart))[0][0]
              EndIndex = _np.where(time == take_closest(time, timeEnd))[0][0]
  
              if EndIndex == len(time) - 1:
                  EndIndex = EndIndex + 1 # so that it does not remove the last element
              freqs, PSD = calc_PSD(self.voltage[StartIndex:EndIndex], self.SampleFreq, NPerSegment=NPerSegment)
              if override == True:
                  self.freqs = freqs
                  self.PSD = PSD
  
          return freqs, PSD