<p>The keyword that you are looking for is a spectrogram, this is the plot of a frequency time analysis. If you search for that term for can find many examples of what you are after e.g. <a href="https://fairyonice.github.io/implement-the-spectrogram-from-scratch-in-python.html" rel="nofollow noreferrer">https://fairyonice.github.io/implement-the-spectrogram-from-scratch-in-python.html</a>.</p>
<p>On a related note if you are interested in ambient noise tomography you might want to look at the MSnoise package <a href="https://github.com/ROBelgium/MSNoise" rel="nofollow noreferrer">https://github.com/ROBelgium/MSNoise</a></p>

CC BY-SA 4.0
2021-06-30T15:58:42.490Z
2021-06-30T15:58:42.490Z
Steve
<p>If you are flexible with your choice in software, I would strongly recommend using Bob Herrmann's Computer Programs in Seismology for this work. <a href="http://www.eas.slu.edu/eqc/eqccps.html" rel="nofollow noreferrer">http://www.eas.slu.edu/eqc/eqccps.html</a>. This software package has nice workflows for doing ambient noise tomography and will save you a lot of time over python. For example, you can relatively quickly do group/phase velocity dispersion curve picks. It is also fairly easy to QC your data. Look at the documentation for 'Surface Wave Dispersion - Receiver Function Inversion' on <a href="http://www.eas.slu.edu/eqc/eqc_cps/CPS/CPS330.html" rel="nofollow noreferrer">http://www.eas.slu.edu/eqc/eqc_cps/CPS/CPS330.html</a> for more details.</p>

<p>If you must use python, I would suggest writing your own Time-Frequency code as obspy's implementation is not very thoroughly documented, and you still need to get from Obspy's representation to dispersion curves. This will take some time, especially if you want a nice GUI for picking. This is why I recommenced the aforementioned software.</p>

CC BY-SA 4.0
2020-03-12T15:27:45.533Z
2020-03-12T15:27:45.533Z
dvoytan
<p>I am trying to do <a href="https://wiki.seg.org/wiki/Ambient_noise_tomography" rel="noreferrer">ambient noise tomography</a> and I am quite confused on how to perform time-frequency analysis (FTAN) as shown in <a href="https://oup.silverchair-cdn.com/oup/backfile/Content_public/Journal/gji/169/3/10.1111/j.1365-246X.2007.03374.x/3/169-3-1239-fig013.jpeg?Expires=1586760927&amp;Signature=SO0ezeObA7uf0Eiq5cC0BEYXh~p1YePuwnwNXOH9De-HgSe7NesNsxk-rAGHsMOpPJ9cfH9QisyQv47kkQnE0SnEpiR3Ukq3uigpo4BhKpSwAduFX4aLnjDhEeCbpEpjxkMYQu1-dEsJRHWQg~1V8GDNHqadL8rSoGX0zVYUe2K02z-mrw0xTKaSiffs-~1uR21gUjsENiDwFtinLKHIowG84nG3fmeQB5Ys-H01YUAkIx0IJ9dio3mXgfZ9AcG10WYzcrE-TaeB~F4huYhJsLErCLNOHzuPjG-ikXHXRh~xvmGcTS6Dfek0mPIrhRWlJg6kGZ118EbcGFJM4LdXJg__&amp;Key-Pair-Id=APKAIE5G5CRDK6RD3PGA" rel="noreferrer">figure 13b and 13d</a> of <a href="https://academic.oup.com/gji/article/169/3/1239/626431" rel="noreferrer">this paper by Bensen et al.</a>. I am using Python and Obspy to do analysis. The closest I can find is <a href="https://docs.obspy.org/packages/autogen/obspy.signal.tf_misfit.plot_tfr.html#obspy.signal.tf_misfit.plot_tfr" rel="noreferrer">time-frequency representation</a> from Obspy but I'm not sure if they show the same thing. My question is how can I make similars FTAN figures from a signal?</p>

<p>Any help would be appreciated. Thank you.</p>

CC BY-SA 4.0
2020-03-12T08:43:24.493Z
I don't know this technique very well, but my interpretation is that it appears to be more-or-less what ObsPy also gives you. I found this old paper https://pubs.geoscienceworld.org/ssa/bssa/article-pdf/82/6/2464/2707488/BSSA0820062464.pdf that gives some more details. It certainly suggests that you would make the time-frequency plot, but replace your 'time' axis by distance/travel-time (making it a velocity), and replace frequency by 1/frequency, so you'd need to invert both axes carefully. But I may be missing some details here...
Erik
CC BY-SA 4.0
2020-03-12T15:04:23.960Z
See also this paper, https://pdfs.semanticscholar.org/636f/d2930a69eb1b5ba0aacdde2633663effa355.pdf , which states the same as what I suggest above.
Erik
<geophysics><seismology>
Performing time-frequency analysis (FTAN)
Ross Mariano
# Performing time-frequency analysis (FTAN)

(Asked by: username_0 on 2020-03-09)

I am trying to do [ambient noise tomography](https://wiki.seg.org/wiki/Ambient_noise_tomography) and I am quite confused on how to perform time-frequency analysis (FTAN) as shown in [figure 13b and 13d](https://oup.silverchair-cdn.com/oup/backfile/Content_public/Journal/gji/169/3/10.1111/j.1365-246X.2007.03374.x/3/169-3-1239-fig013.jpeg?Expires=1586760927&Signature=SO0ezeObA7uf0Eiq5cC0BEYXh~p1YePuwnwNXOH9De-HgSe7NesNsxk-rAGHsMOpPJ9cfH9QisyQv47kkQnE0SnEpiR3Ukq3uigpo4BhKpSwAduFX4aLnjDhEeCbpEpjxkMYQu1-dEsJRHWQg~1V8GDNHqadL8rSoGX0zVYUe2K02z-mrw0xTKaSiffs-~1uR21gUjsENiDwFtinLKHIowG84nG3fmeQB5Ys-H01YUAkIx0IJ9dio3mXgfZ9AcG10WYzcrE-TaeB~F4huYhJsLErCLNOHzuPjG-ikXHXRh~xvmGcTS6Dfek0mPIrhRWlJg6kGZ118EbcGFJM4LdXJg__&Key-Pair-Id=APKAIE5G5CRDK6RD3PGA) of [this paper by Bensen et al.](https://academic.oup.com/gji/article/169/3/1239/626431). I am using Python and Obspy to do analysis. The closest I can find is [time-frequency representation](https://docs.obspy.org/packages/autogen/obspy.signal.tf_misfit.plot_tfr.html#obspy.signal.tf_misfit.plot_tfr) from Obspy but I'm not sure if they show the same thing. My question is how can I make similars FTAN figures from a signal?

Any help would be appreciated. Thank you.

**Tags:** geophysics, seismology

> **Comments:**
> **username_1**: I don't know this technique very well, but my interpretation is that it appears to be more-or-less what ObsPy also gives you. I found this old paper https://pubs.geoscienceworld.org/ssa/bssa/article-pdf/82/6/2464/2707488/BSSA0820062464.pdf that gives some more details. It certainly suggests that you would make the time-frequency plot, but replace your 'time' axis by distance/travel-time (making it a velocity), and replace frequency by 1/frequency, so you'd need to invert both axes carefully. But I may be missing some details here...  
> **username_1**: See also this paper, https://pdfs.semanticscholar.org/636f/d2930a69eb1b5ba0aacdde2633663effa355.pdf , which states the same as what I suggest above.  

---

## 2 answers

### Answer by username_3 on 2020-03-12. Score: 1

If you are flexible with your choice in software, I would strongly recommend using Bob Herrmann's Computer Programs in Seismology for this work. <http://www.eas.slu.edu/eqc/eqccps.html>. This software package has nice workflows for doing ambient noise tomography and will save you a lot of time over python. For example, you can relatively quickly do group/phase velocity dispersion curve picks. It is also fairly easy to QC your data. Look at the documentation for 'Surface Wave Dispersion - Receiver Function Inversion' on <http://www.eas.slu.edu/eqc/eqc_cps/CPS/CPS330.html> for more details.

If you must use python, I would suggest writing your own Time-Frequency code as obspy's implementation is not very thoroughly documented, and you still need to get from Obspy's representation to dispersion curves. This will take some time, especially if you want a nice GUI for picking. This is why I recommenced the aforementioned software.


---

### Answer by username_2 on 2021-06-30. Score: 0

The keyword that you are looking for is a spectrogram, this is the plot of a frequency time analysis. If you search for that term for can find many examples of what you are after e.g. <https://fairyonice.github.io/implement-the-spectrogram-from-scratch-in-python.html>.

On a related note if you are interested in ambient noise tomography you might want to look at the MSnoise package <https://github.com/ROBelgium/MSNoise>


---

