Separation of overlapping frequencies I have a signal with multiple frequencies, and two of them, one of which is my main frequency, overlap. 

Are there any techniques that could separate two frequencies that almost overlap?
I can increase my sampling rate but not my window size

I have already tried SVD,PCA,ICA but none of the methods managed to decompose those two frequencies.

N=200
x = np.zeros(N)
y = np.zeros(N)
z = np.zeros(N)
k = np.zeros(N)
x[0] = np.cos(2*np.pi)*np.cos(2*np.pi*0.1)
y[0] = np.cos(2*np.pi)*np.sin(2*np.pi*0.1)
z[0] = np.sin(2*np.pi)*np.cos(2*np.pi*0.1)
k[0] = np.sin(2*np.pi)*np.sin(2*np.pi*0.1)
for i in range(1,N):
  x0=x[i-1]
  y0=y[i-1]
  z0=z[i-1]
  k0=k[i-1]
  x[i] = x0*np.cos(2*np.pi*0.31) - y0*np.sin(2*np.pi*0.31)
  y[i] = x0* np.sin(2*np.pi*0.31)+ y0*np.cos(2*np.pi*0.31)
  z[i] = z0* np.cos(2*np.pi*0.32)- k0*np.sin(2*np.pi*0.32)
  k[i] = z0* np.sin(2*np.pi*0.32)+ k0*np.cos(2*np.pi*0.32)
  y[i]+=0.3*(x[i]**2-z[i]**2)
  k[i]+=0.3*(x[i]*z[i])
jet= plt.get_cmap('jet')
colors = iter(jet(np.linspace(0,1,30)))
plt.figure(0) 
w=30
for i in range(1,30):
  fourier = np.fft.rfft(x[i:i+w])
  freqs =np.fft.rfftfreq(len(x[i:i+w]))
  color=next(colors)
  plt.plot(freqs,abs(fourier), c=color)  
plt.figure(1) 
fourier = np.fft.rfft(x)
freqs =np.fft.rfftfreq(len(x))
plt.plot(freqs,abs(fourier), c='k')  
plt.show()
In case your signal is fully stationary, just go ahead and use a "sinusoidal fitting" and take out the frequency that is not off your interest.
Then you have a disturbance free signal. Although since these signals are, I guess, not multiple integers of each other, your main frequency will also be low pass filtered. You can also use a notch filter, which will have similar behavior.

Please update us if you found a good answer.