Spectrogram, time vs frequency localization, and length of signal So I'm having some trouble conceptually and am hoping somebody can clear something up for me. This is long and I apologize for that but I want to provide as much information as possible so that the source of my confusion might be exposed.

I have a signal with a sampling rate of $74767 { samples \over sec}$. I want to take the spectrogram in matlab of this signal but I'm really only interested in the content in the first $1\over2$ second. Now, if I throw out everything after 0.5 seconds and attempt to compute the spectrogram using the time-frequency tool box I've posted the link to below. (it's required I use this one) I run out of memory. To solve this I decided to keep only every $X$ samples so that I'm working with less data. This will effectively, I assume, lower my sampling frequency by a factor of $X$. That is to say then that I first throw away everything after 0.5 seconds, and then keep only ever $X^{th}$ sample. My total signal length is then equal to: $$N = {74767 \times 0.5 \over X}$$ 

My new sampling frequency should therefore be twice this value as that would be, hypothetically, the number of samples I would have collected in one second.

$$ f_s = 2 \times ({74767 \times 0.5 \over X}) $$

I'm having two issues however with this. 



The first is that I'm slightly confused about the frequency resolution and number of bins for my spectrogram. 

I have to pass to the spectrogram calculation the number of frequency bins I want to calculate. I always pass it the length of the signal, which as discussed above is $N = {74767 \times 0.5 \over X}$. Now, I know that to plot this with the proper scale I need to know what my frequency resolution is per frequency bin. This is going to always be 2 because the frequency resolution is: $$ freq_{res} = {f_s \over N} = {1 \over T}  $$

As I've shown above, I reasoned this out, but it seems that if I increased $N$ and thereby sampled at a higher rate, then I would have more samples per second in a half-second time frame and my frequency resolution should be higher! I mean after all, if I'm looking from 0 to 0.5 seconds, and didn't have to divide by $X$ because of the memory limit, then why wouldn't I have a higher frequency resolution? I would have more samples!



The second issue I'm having trouble with is understanding the resolution of the spectrogram with respect to the number of frequency bins given by $N$. Clearly I can choose $X$ to vary $N$. As a test I included $N=3000$ and $N=8000$ below. As $N$ gets larger I start to lose precision in the frequency domain. This makes sense as I know the uncertainty principle tells us that there is a balance between precision in the frequency vs time domain. However, how do I know what a good value of $N$ is? My highest frequency content I really care about is the 25th harmonic ($60 Hz \times 25 = 1500 Hz$). Does that mean that I should perhaps choose a value of $X$ that makes my sampling frequency twice the Nyquist (in my case that would be $3000 Hz$). Doing that I get: 

$$ 3000 Hz = 2 \times ({74767 \times 0.5 \over X}) $$

$$ \therefore X = {{74767 \times 0.5} \over 1500 } \approx 25$$

However, when I plot that my localization in the frequency domain is great, but my localization in the time domain is pretty terrible, I've included a plain-text link screenshot of it below as well. 



What then, is a good metric to decide on my localization in the time domain? And how do I reconcile the seeming contradiction above? Thank you for any help and/or advice.

N = 3000



N = 8000



N = 1495. X = 25

Plain-text Link for image found here: i.stack.imgur.com/1HLTL.png

(I don't have enough Karma to post more than 2 links).

TFT Toolbox: tftb.nongnu.org/
The frequency resolution stays the same because increasing the sampling rate increases the maximum frequency that can be resolved. For example, doubling the sampling rate would double the maximum frequency.
Adjust the size of the spectrogram window, and set the number of FFT points based on that. The command is


[S,F,T] = spectrogram(X,WINDOW,NOVERLAP,NFFT,Fs)


X is the signal
WINDOW is the size of the window, try 1000 for starters
NOVERLAP is the amount of overlap as the window is slid along. signal length / (WINDOW-NOVERLAP) is approximately how many time points you will have.
NFFT is the number of FFT points. The maximum I would use is half the WINDOW value, say 500.
Fs is the sampling frequency. Input this and F will come out as the frequency points and T as the time points with no need for your own calculations.


You should not be running out of memory - I routinely calculate spectrograms on data with millions of points, you just have to tweak the input parameters. For example, putting WINDOW = 1000 and NOVERLAP = 999 will give you one time point for every sample and the output spectrogram will be, in your case, 74767 wide! Try the above settings and see how it goes.

If you make WINDOW large your frequency resolution will increase but you time resolution will decrease.