Perform time-frequency analysis in MATLAB using CWT, STFT, synchrosqueezing, reassignment, wavelet coherence, cross spectrogram, EMD/VMD, multiresolution analysis, and time-frequency filtering. Triggers on: time-frequency, spectrogram, scalogram, cwt, stft, istft, fsst, wsst, wcoherence, xspectrogram, modwt, modwtmra, modwpt, emd, vmd, hht, tffilt, dgt, gabor, instantaneous frequency, synchrosqueezing, reassignment, ridge extraction, wavelet coherence, cross spectrum, mode decomposition, sign...
Scanned 9/5/2026
Install to Claude Code
npx -y skills add matlab/matlab-agentic-toolkit --skill matlab-analyze-time-frequency-content --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Matlab Analyze Time Frequency Content?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/matlab-matlab-analyze-time-frequency-content)More formats (shields.io, HTML) on the badges page.
---
name: matlab-analyze-time-frequency-content
description: >
Perform time-frequency analysis in MATLAB using CWT, STFT, synchrosqueezing,
reassignment, wavelet coherence, cross spectrogram, EMD/VMD, multiresolution
analysis, and time-frequency filtering. Triggers on: time-frequency, spectrogram,
scalogram, cwt, stft, istft, fsst, wsst, wcoherence, xspectrogram, modwt,
modwtmra, modwpt, emd, vmd, hht, tffilt, dgt, gabor, instantaneous frequency,
synchrosqueezing, reassignment, ridge extraction, wavelet coherence, cross
spectrum, mode decomposition, signal decomposition, time-frequency filtering.
license: https://www.mathworks.com/content/dam/mathworks/license/pmrl/license.md
metadata:
author: MathWorks
version: "2.0"
---
# Time-Frequency Analysis in MATLAB
Analyze how frequency content evolves over time using STFT, CWT, synchrosqueezing,
reassignment, cross-signal methods, and data-adaptive decomposition.
> **Agent directive:** Consult the reference guides in `references/` before answering.
> Each guide covers a specific domain with syntax, gotchas, and common mistakes.
## When To Use
- Analyzing how frequency content evolves over time (spectrogram, scalogram)
- Choosing between STFT, CWT, synchrosqueezing, reassignment, or EMD/VMD
- Extracting and reconstructing individual signal components from a TF representation
- Computing time-varying coherence or cross-spectrum between two signals
- Decomposing signals into additive time-domain components (wavelet MRA, EMD, VMD)
- Estimating instantaneous frequency or Hilbert spectrum
## When Not To Use
- Designing or applying classical FIR/IIR filters — use `matlab-design-digital-filter`
- Extracting scalar features for ML classification — use `matlab-extract-signal-features`
- Signal preprocessing (resampling, detrending, gap filling) — use `matlab-prepare-signal-data`
- Quadratic/bilinear TFDs (Wigner-Ville) — not supported in MATLAB toolboxes
- Audio-specific representations (mel spectrogram, MFCC) — use Audio Toolbox
## Method Selection
Choose the analysis method based on the user's goal and signal characteristics:
| Goal | Method | Guide |
|------|--------|-------|
| Interactive TF exploration (spectrogram + scalogram) | `signalAnalyzer` | — |
| General TF visualization (uniform freq resolution) | `stft`, `spectrogram`, `pspectrum` | `references/stft-guide.md` |
| TF visualization (multi-resolution, constant-Q) | `cwt`, `cwtfilterbank` | `references/cwt-guide.md` |
| Sharpest TF picture (non-invertible) | `spectrogram("reassigned")`, `pspectrum(Reassigned=true)` | `references/reassignment-guide.md` |
| Remove specific TF regions (mask-based filtering) | `tffilt` with binary mask | `references/stft-guide.md` |
| Mode extraction + reconstruction (STFT domain) | `fsst` → `tfridge` → `ifsst` | `references/reassignment-guide.md` |
| Mode extraction + reconstruction (CWT domain) | `wsst` → `wsstridge` → `iwsst` | `references/reassignment-guide.md` |
| Signal reconstruction from CWT | `icwt` (exact or approximate) | `references/cwt-guide.md` |
| Additive decomposition (octave bands) | `modwt` + `modwtmra` | `references/multiresolution-guide.md` |
| Additive decomposition (uniform bands) | `modwptdetails` | `references/multiresolution-guide.md` |
| Adaptive decomposition (unknown components) | `emd` | `references/multiresolution-guide.md` |
| Adaptive decomposition (known mode count) | `vmd` | `references/multiresolution-guide.md` |
| Hilbert spectrum / instantaneous frequency | `hht`, `instfreq` | `references/multiresolution-guide.md` |
| Time-varying coherence between two signals | `wcoherence` | `references/cross-analysis-guide.md` |
| Cross spectrogram between two signals | `xspectrogram` | `references/cross-analysis-guide.md` |
| Global coherence (no time axis) | `mscohere`, `cpsd` | `references/cross-analysis-guide.md` |
For detailed decision logic, see `references/method-selection-guide.md`.
## Quick Decision Tree
```
What is the primary goal?
│
├── Interactive exploration (adjust parameters, compare views)
│ └── signalAnalyzer — supports spectrogram + scalogram (CWT) side by side
│
├── Visualize one signal's TF content
│ ├── Need uniform frequency resolution? → stft / spectrogram / pspectrum
│ ├── Need multi-resolution (better low-freq)? → cwt
│ └── Need sharpest picture (no reconstruction)? → spectrogram("reassigned")
│
├── Remove unwanted content visible in spectrogram
│ └── Define binary mask over TF plane → tffilt (Gabor domain)
│
├── Extract and reconstruct individual components
│ ├── From TF representation (invertible)?
│ │ ├── STFT domain → fsst → tfridge → ifsst
│ │ └── CWT domain → wsst → wsstridge → iwsst
│ ├── Additive time-domain components?
│ │ ├── Octave bands → modwt + modwtmra
│ │ ├── Uniform bands → modwptdetails
│ │ └── Data-adaptive → emd or vmd
│ └── From CWT directly? → icwt (see references/cwt-guide.md)
│
├── Compare two signals
│ ├── Time-varying coherence? → wcoherence
│ ├── Time-varying cross-spectrum? → xspectrogram
│ └── Global relationship? → mscohere / cpsd
│
└── Estimate instantaneous frequency
├── Single monocomponent signal? → instfreq(x, fs)
├── Multicomponent (want per-mode IF)? → emd → instfreq(imf, fs)
└── Multicomponent (want single average)? → instfreq(x, fs, Method="tfmoment")
```
## Critical Rules
1. **`stft` has no reassignment option.** Use `fsst` for invertible synchrosqueezing or `spectrogram("reassigned")` for non-invertible visualization.
2. **`wsstridge` argument order differs from `tfridge`:**
- `wsstridge(sst, penalty, f, ...)` — penalty is 2nd positional arg
- `tfridge(tfm, f, penalty, ...)` — penalty is 3rd positional arg
3. **`wsst` subtracts the signal mean** internally. `iwsst` does NOT restore it. Add `mean(x)` back manually if DC matters.
4. **`ifsst` is machine-precision; `iwsst` is approximate** (Morlet single-integral formula).
5. **`xspectrogram` first output is real** (cross-spectrogram magnitude). For phase, use the 4th output `P`. This differs from `spectrogram` whose first output is complex STFT.
6. **`wcoherence` has no `Parent` option.** For App Designer, compute outputs and plot manually.
7. **`wcoherence` phase arrows** show the phase lag of Y relative to X:
- ↑ = Y lags X by π/2
- ↓ = Y leads X by π/2
- → = in-phase
- ← = anti-phase
`PhaseDisplayThreshold` (default 0.5) is plot-only — it controls which arrows are drawn but has no effect on returned numeric outputs.
8. **`hht` takes IMFs, not raw signal.** Always decompose first: `imf = emd(x); hht(imf, fs)`.
9. **`instfreq` Hilbert method** is meaningless for multicomponent signals. Decompose first, or use `Method="tfmoment"` for a single average curve.
10. **Synchrosqueezing is precision-sensitive.** Use double-precision data with `fsst`/`wsst` for reproducible results across MATLAB, codegen, and GPU.
## Signal Assessment Workflow
When the user provides a signal and asks "what should I use?", run the assessment script then apply agent-side interpretation:
### Step 1: Run MATLAB assessment
```matlab
report = assessSignalForTF(x, fs);
disp(report)
disp(report.recommendations)
```
The script returns: signal length, occupied bandwidth, number of spectral peaks (with frequencies), nonstationarity indicator, DC content, precision, and auto-generated recommendations.
### Step 2: Agent-side interpretation (combine script output with user goals)
| User Goal | Key Report Fields | Recommendation Logic |
|-----------|-------------------|---------------------|
| "Explore / I'm not sure what I need" | — | Suggest `signalAnalyzer` for interactive exploration (spectrogram + scalogram views, adjustable parameters) |
| "Visualize frequency content over time" | `likelyNonstationary`, `fractionalBandwidth` | If wideband (>2 octaves): cwt. If narrowband or uniform resolution needed: stft/spectrogram |
| "Separate/extract components" | `numSpectralPeaks`, `peakFrequenciesHz` | 2–3 peaks: synchrosqueezing (fsst/wsst). Many peaks: emd/vmd. Closely-spaced: modwptdetails or fsst |
| "Reconstruct after filtering" | `hasDC`, precision | fsst/ifsst for exact. wsst/iwsst for CWT-domain (warn about mean). icwt for CWT bandpass |
| "Compare two signals" | (run on both) | wcoherence for coherence. xspectrogram for cross-spectrum |
| "Detect transients/events" | `signalLength`, `occupiedBandHz` | cwt with low TimeBandwidth. Or short-window stft |
### Step 3: Refine with follow-up questions if ambiguous
- "Do you need to reconstruct the signal, or just visualize?"
- "Do you need uniform frequency resolution, or is multi-resolution acceptable?"
- "Are you comparing this signal to another?"
## Reference Guides
| File | Coverage |
|------|----------|
| `references/stft-guide.md` | stft/istft, spectrogram, pspectrum, stftmag2sig, length preservation, COLA |
| `references/cwt-guide.md` | cwt, cwtfilterbank, icwt, dlicwt/icwtLayer, boundary, constant-Q |
| `references/reassignment-guide.md` | fsst/ifsst, wsst/iwsst, spectrogram("reassigned"), pspectrum(Reassigned=true), ridge extraction, penalty |
| `references/cross-analysis-guide.md` | wcoherence, xspectrogram, cpsd, mscohere, phase arrows, unsmoothed cross-spectrum |
| `references/multiresolution-guide.md` | modwt/modwtmra, modwpt/modwptdetails, emd, vmd, hht, instfreq, instbw |
| `references/method-selection-guide.md` | Decision logic for choosing among all methods |
## Toolbox Requirements
| Toolbox | Functions |
|---------|-----------|
| Signal Processing | stft, istft, spectrogram, pspectrum, fsst, ifsst, tfridge, xspectrogram, instfreq, instbw, stftmag2sig, cpsd, mscohere |
| Wavelet | cwt, cwtfilterbank, icwt, wsst, iwsst, wsstridge, wcoherence, modwt, modwtmra, modwpt, modwptdetails, emd, vmd, hht, tffilt, dgt |
| Function | Available From | Note |
|----------|---------------|------|
| `tffilt` | R2025a | TF mask-based filtering; all other functions available in R2024b |
## Documentation References
| Topic | Link |
|-------|------|
| Time-frequency gallery | https://www.mathworks.com/help/signal/time-frequency-analysis.html |
| Wavelet time-frequency | https://www.mathworks.com/help/wavelet/time-frequency-analysis.html |
| CWT reference | https://www.mathworks.com/help/wavelet/ref/cwt.html |
| STFT reference | https://www.mathworks.com/help/signal/ref/stft.html |
| Synchrosqueezing example | https://www.mathworks.com/help/wavelet/ug/time-frequency-reassignment-and-mode-extraction-with-synchrosqueezing.html |
| Wavelet coherence example | https://www.mathworks.com/help/wavelet/ug/compare-time-frequency-content-in-signals-with-wavelet-coherence.html |
----
Copyright 2026 The MathWorks, Inc.
----
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!