Friday, 27 September 2013

Python - spectragram how to

Python - spectragram how to

How do I generate a spectrogram of a 1D signal in python?
I'm not sure how to do this and I was given an example, spectrogram e.g.
but this is in 2D.
I code here that generates a mix of frequencies and I can pick these out
in the fft, how may I see these in a spectrogram - I appreciate that the
frequencies in my example don't change over time; so does this mean I'll
see a straight line across the spectrogram?
my code and the output image:
# create a wave with 1Mhz and 0.5Mhz frequencies
dt = 2e-9
t = np.arange(0, 10e-6, dt)
y = np.cos(2*pi*1e6*t) + (np.cos(2*pi*2e6*t) * np.cos(2*pi*2e6*t))
y = y*np.hanning(len(y))
yy = np.concatenate((y,([0]*10*len(y))))
# FFT of this
Fs= 1/dt # sampling rate, Fs = 500MHz = 1/2ns
n = len(yy) # length of the signal
k = np.arange(n)
T = n/Fs
frq = k/T # two sides frequency range
frq = frq[range(n/2)] # one side frequency range
Y = fft(yy)/n # fft computing and normalization
Y = Y[range(n/2)] / max(Y[range(n/2)])
# plotting the data
subplot(3,1,1)
plot(t*1e3,y,'r')
xlabel('Time (micro seconds)')
ylabel('Amplitude')
grid()
# plotting the spectrum
subplot(3,1,2)
plot(frq[0:600],abs(Y[0:600]),'k')
xlabel('Freq (Hz)')
ylabel('|Y(freq)|')
grid()
# plotting the specgram
subplot(3,1,3)
Pxx, freqs, bins, im = specgram(y, NFFT=512, Fs=Fs, noverlap=10)
show()

No comments:

Post a Comment