From 46c8778bc076680ab10ec6319fe08e3b082bec51 Mon Sep 17 00:00:00 2001 From: Sergio Aguirre Date: Sat, 31 Oct 2026 19:35:47 +0100 Subject: [PATCH] [FEATURE] add the enhanced spectrogram Add enhanced_spectrogram, a spectrogram with no window to choose: nine Blackman-Harris windows from 8 to 512 ms are reassigned, the energy of each frame is held over its frame step, each map is smoothed ('readable' or 'sharp') and the maps are combined by geometric mean. The output is on a logarithmic frequency grid in dB re the channel dBRef. plot_spectrogram and SignalObj.plot_spectrogram take enhanced='readable' or 'sharp' to draw it on a logarithmic frequency axis. The computation lives in pytta/utils/spectrogram.py on arrays, so that _plot uses it without a circular import. The same method is in SQAT (GPL-3.0) as gui/SQAT_GUI_enhanced_stft.m; its author releases it here under the MIT license. Tests compare both smoothings with the SQAT output stored in tests/golden/enhanced_spectrogram_sqat.mat, which tests/golden/make_enhanced_spectrogram_sqat.m regenerates with MATLAB, and pin the level of a steady tone, where a tone and a click land, the floor of silence, independent channels and the plot. Co-Authored-By: Claude Fable 5.1 --- pytta/__init__.py | 3 +- pytta/_plot.py | 42 +++-- pytta/classes/signal.py | 9 +- pytta/functions.py | 67 +++++++- pytta/utils/__init__.py | 1 + pytta/utils/spectrogram.py | 144 ++++++++++++++++++ tests/golden/enhanced_spectrogram_sqat.mat | Bin 0 -> 134891 bytes tests/golden/make_enhanced_spectrogram_sqat.m | 45 ++++++ tests/test_enhanced_spectrogram.py | 133 ++++++++++++++++ 9 files changed, 429 insertions(+), 15 deletions(-) create mode 100644 pytta/utils/spectrogram.py create mode 100644 tests/golden/enhanced_spectrogram_sqat.mat create mode 100644 tests/golden/make_enhanced_spectrogram_sqat.m create mode 100644 tests/test_enhanced_spectrogram.py diff --git a/pytta/__init__.py b/pytta/__init__.py index d8740aa..fdd8c9f 100644 --- a/pytta/__init__.py +++ b/pytta/__init__.py @@ -113,7 +113,7 @@ list_devices, print_devices, get_device_from_user,\ fft_convolve, find_delay, corr_coef, resample,\ peak_time, save, load, plot_time, plot_time_dB, plot_freq,\ - plot_bars, plot_spectrogram, plot_waterfall, SPL + plot_bars, plot_spectrogram, plot_waterfall, SPL, enhanced_spectrogram # Must go on v0.1.0 (DEPRECATED) from .functions import fft_degree @@ -146,6 +146,7 @@ 'resample', 'corr_coef', 'peak_time', + 'enhanced_spectrogram', 'save', 'load', 'weighting', diff --git a/pytta/_plot.py b/pytta/_plot.py index c0a0970..1c9dc6a 100644 --- a/pytta/_plot.py +++ b/pytta/_plot.py @@ -26,6 +26,7 @@ import scipy.signal as ss import copy as cp from plotly import io +from pytta.utils.spectrogram import enhanced_map io.renderers.default = 'browser' @@ -804,7 +805,7 @@ def _curve_data_extractor_bars(analyses): def spectrogram(sigObjs, winType, winSize, overlap, xLabel, yLabel, xLim, yLim, - title, decimalSep): + title, decimalSep, enhanced=None): """ Plots a signal spectrogram in frequency domain. @@ -846,6 +847,10 @@ def spectrogram(sigObjs, winType, winSize, may be dot or comma. >>> decimalSep = ',' # in Brazil + * enhanced (None), (str): + 'readable' or 'sharp' plots the enhanced spectrogram + (pytta.enhanced_spectrogram) on a logarithmic frequency axis; + winType, winSize and overlap are then not used. Return: -------- @@ -867,13 +872,23 @@ def spectrogram(sigObjs, winType, winSize, projection='rectilinear') ax.set_snap(False) - _spectrogram, _specTime, _specFreq = \ - _calc_spectrogram(data['timeSignal'], data['timeVector'], - data['samplingRate'], overlap, winType, - winSize, data['dBRef']) - - pcmesh = ax.pcolormesh(_specTime, _specFreq, _spectrogram, - cmap=plt.jet(), vmin=-120) + if enhanced: + _specTime, _specFreq, meanSquare = \ + enhanced_map(data['timeSignal'], data['samplingRate'], + enhanced) + _spectrogram = 10 * np.log10(meanSquare / data['dBRef'] ** 2 + + 1e-12) + pcmesh = ax.pcolormesh(_specTime, _specFreq, _spectrogram, + cmap=plt.jet(), shading='nearest', + vmin=_spectrogram.max() - 80) + ax.set_yscale('log') + else: + _spectrogram, _specTime, _specFreq = \ + _calc_spectrogram(data['timeSignal'], data['timeVector'], + data['samplingRate'], overlap, winType, + winSize, data['dBRef']) + pcmesh = ax.pcolormesh(_specTime, _specFreq, _spectrogram, + cmap=plt.jet(), vmin=-120) if xLim is None: xLim = (data['timeVector'][0], data['timeVector'][-1]) @@ -883,8 +898,15 @@ def spectrogram(sigObjs, winType, winSize, yLim = (data['minFreq'], data['maxFreq']) ax.set_ylim(yLim) - ax.yaxis.set_major_locator(ticker.MaxNLocator(min_n_ticks=8)) - ax.yaxis.set_major_formatter(ticker.ScalarFormatter(useOffset=True)) + if enhanced: + octaves = [f for f in (31.5, 63, 125, 250, 500, 1000, 2000, 4000, + 8000, 16000) if yLim[0] <= f <= yLim[1]] + ax.set_yticks(octaves) + ax.set_yticklabels([str(f) for f in octaves]) + ax.yaxis.set_minor_formatter(ticker.NullFormatter()) + else: + ax.yaxis.set_major_locator(ticker.MaxNLocator(min_n_ticks=8)) + ax.yaxis.set_major_formatter(ticker.ScalarFormatter(useOffset=True)) ax.xaxis.set_major_locator(ticker.MaxNLocator(min_n_ticks=10)) ax.xaxis.set_major_formatter(ticker.ScalarFormatter(useOffset=True)) for item in (ax.get_xticklabels() + ax.get_yticklabels()): diff --git a/pytta/classes/signal.py b/pytta/classes/signal.py index 79151c3..d358fbd 100644 --- a/pytta/classes/signal.py +++ b/pytta/classes/signal.py @@ -738,7 +738,8 @@ def plot_freq(self, smooth:bool=False, xLabel:str=None, yLabel:str=None, def plot_spectrogram(self, winType:str='hann', winSize:int=1024, overlap:float=0.5, xLabel:str=None, yLabel:str=None, yLim:list=None, xLim:list=None, title:str=None, - decimalSep:str=','): + decimalSep:str=',', + enhanced:str=None): """Plots a signal spectrogram. xLabel, yLabel, and title are saved for the next plots when provided. @@ -778,6 +779,10 @@ def plot_spectrogram(self, winType:str='hann', winSize:int=1024, may be dot or comma. >>> decimalSep = ',' # in Brazil + * enhanced (None), (str): + 'readable' or 'sharp' plots the enhanced spectrogram + (pytta.enhanced_spectrogram) on a logarithmic frequency + axis; winType, winSize and overlap are then not used. Return: -------- @@ -807,7 +812,7 @@ def plot_spectrogram(self, winType:str='hann', winSize:int=1024, figs = plot.spectrogram((self,), winType, winSize, overlap, xLabel, yLabel, xLim, yLim, - title, decimalSep) + title, decimalSep, enhanced) return figs def calib_voltage(self, chIndex, refSignalObj, refVrms=1, refFreq=1000): diff --git a/pytta/functions.py b/pytta/functions.py index 9b39239..e214f03 100644 --- a/pytta/functions.py +++ b/pytta/functions.py @@ -17,6 +17,7 @@ >>> pytta.corr_coef(signalObj1, signalObj2) >>> pytta.resample(signalObj, newSamplingRate) >>> pytta.peak_time(signalObj1, signalObj2, ..., signalObjN) + >>> pytta.enhanced_spectrogram(signalObj) >>> pytta.plot_time(signalObj1, signalObj2, ..., signalObjN) >>> pytta.plot_time_dB(signalObj1, signalObj2, ..., signalObjN) >>> pytta.plot_freq(signalObj1, signalObj2, ..., signalObjN) @@ -49,6 +50,7 @@ import copy as cp from warnings import warn from pytta import _plot as plot +from pytta.utils.spectrogram import enhanced_map # For backwards compatibility purposes. Planned to get out of here from pytta.utils.maths import fft_degree as new_fft_degree @@ -274,6 +276,62 @@ def peak_time(signal): else: return peaks_time[0] +def enhanced_spectrogram(signalObj, smoothing='readable', n_frames=2000, + f_min=20, bins_per_octave=192): + """ + Enhanced spectrogram: a spectrogram with no window to choose. + + Nine Blackman-Harris windows from 8 to 512 ms (geometric spacing) are + reassigned (Auger and Flandrin, 1995), the energy of each frame is held + over the frame step of its window, each map is smoothed, and the maps are + combined by geometric mean, so that only the energy that all the windows + place at the same point of the time-frequency plane remains (the idea of + Cheung and Lim, 1991, applied to reassigned maps). + + Parameters (default), (type): + ----------------------------- + * signalObj (), (SignalObj): + signal to analyse. It is not modified; + * smoothing ('readable'), (str): + 'readable': Gaussian smoothing of 4 ms in time and 1.45 % of the + frequency, for continuous lines; 'sharp': 1 ms and 1 Hz, for the + thinnest lines; + * n_frames (2000), (int): + largest number of time columns. The time step is 1 ms or more; + * f_min (20), (float): + lowest frequency of the output, in Hz; + * bins_per_octave (192), (int): + frequency resolution of the logarithmic output grid. + + Return: + ------- + * t: time of each column, in s, shape (M,); + * f: frequency of each row, in Hz, shape (F,); + * L: level of each cell in dB re the channel's dBRef (dB SPL for a + channel in Pa), shape (F, M, numChannels). A cell holds the mean + square value of its share of the signal, so the cells of a column + add up to the level of that instant; a steady tone spread by the + smoothing over several cells reads lower in each of them (about + 10 dB with 'readable'). Silence sits at -120 dB. + + Author: Sergio Aguirre, 2026. Released in PyTTa under the MIT license. + The same method is in the SQAT toolbox (GPL-3.0) as + gui/SQAT_GUI_enhanced_stft.m (https://github.com/ggrecow/SQAT). + + >>> t, f, L = pytta.enhanced_spectrogram(signalObj, smoothing='sharp') + """ + if not isinstance(signalObj, SignalObj): + raise TypeError('signalObj must be a SignalObj.') + L = [] + for chIndex, chNum in enumerate(signalObj.channels.mapping): + t, f, meanSquare = enhanced_map(signalObj.timeSignal[:, chIndex], + signalObj.samplingRate, smoothing, + n_frames, f_min, bins_per_octave) + dBRef = signalObj.channels[chNum].dBRef + L.append(10 * np.log10(meanSquare / dBRef ** 2 + 1e-12)) + return t, f, np.stack(L, axis=2) + + def fft_degree(*args,**kwargs): """ DEPRECATED @@ -533,7 +591,8 @@ def plot_bars(*analyses, xLabel:str=None, yLabel:str=None, def plot_spectrogram(*sigObjs, winType:str='hann', winSize:int=1024, overlap:float=0.5, xLabel:str=None, yLabel:str=None, yLim:list=None, xLim:list=None, title:str=None, - decimalSep:str=','): + decimalSep:str=',', + enhanced:str=None): """ Plots provided SignalObjs spectrogram. @@ -575,6 +634,10 @@ def plot_spectrogram(*sigObjs, winType:str='hann', winSize:int=1024, may be dot or comma. >>> decimalSep = ',' # in Brazil + * enhanced (None), (str): + 'readable' or 'sharp' plots the enhanced spectrogram + (pytta.enhanced_spectrogram) on a logarithmic frequency axis; + winType, winSize and overlap are then not used. Return: -------- @@ -586,7 +649,7 @@ def plot_spectrogram(*sigObjs, winType:str='hann', winSize:int=1024, if len(realSigObjs) > 0: figs = plot.spectrogram(realSigObjs, winType, winSize, overlap, xLabel, yLabel, xLim, yLim, - title, decimalSep) + title, decimalSep, enhanced) return figs else: return diff --git a/pytta/utils/__init__.py b/pytta/utils/__init__.py index ff5c7c8..f7a4a87 100755 --- a/pytta/utils/__init__.py +++ b/pytta/utils/__init__.py @@ -15,6 +15,7 @@ * colore * freq * maths + * spectrogram Created on Tue May 5 00:31:42 2020 diff --git a/pytta/utils/spectrogram.py b/pytta/utils/spectrogram.py new file mode 100644 index 0000000..7c6f7a7 --- /dev/null +++ b/pytta/utils/spectrogram.py @@ -0,0 +1,144 @@ +""" +Enhanced spectrogram on NumPy arrays. + +Author: Sergio Aguirre, 2026. Released in PyTTa under the MIT license. +The same method is in the SQAT toolbox (GPL-3.0) as +gui/SQAT_GUI_enhanced_stft.m (https://github.com/ggrecow/SQAT). +The SignalObj interface is pytta.enhanced_spectrogram. +""" +import numpy as np +from scipy.ndimage import convolve1d + +__all__ = ['enhanced_map'] + + +def enhanced_map(x, fs, smoothing='readable', n_frames=2000, f_min=20, + bins_per_octave=192): + """ + Enhanced spectrogram of one channel, as a map of mean square values. + + Nine Blackman-Harris windows from 8 to 512 ms (geometric spacing) are + reassigned (Auger and Flandrin, 1995), the energy of each frame is held + over the frame step of its window, each map is smoothed, and the maps are + combined by geometric mean, so that only the energy that all the windows + place at the same point of the time-frequency plane remains (the idea of + Cheung and Lim, 1991, applied to reassigned maps). + + Returns t (M,) in s, f (F,) in Hz on a logarithmic grid, and the map + (F, M) of mean square values in the unit of x squared: the cells of a + column add up to the mean square value of that instant. See + pytta.enhanced_spectrogram for the parameters. + """ + if f_min >= fs / 2: + raise ValueError(f'f_min ({f_min} Hz) must be below fs/2 ' + f'({fs / 2} Hz).') + if smoothing not in ('readable', 'sharp'): + raise ValueError("smoothing must be 'readable' or 'sharp'.") + x = np.asarray(x, dtype=float).ravel() + numSamples = x.size + durations = 8e-3 * 64 ** (np.arange(9) / 8) + windows = 2 * _round_half_away(durations * fs / 2).astype(int) + hop = max(1, int(_round_half_away(0.001 * fs)), + int(np.ceil(numSamples / n_frames))) + steps = np.maximum(1, _round_half_away(windows / 8).astype(int)) + numColumns = len(range(0, numSamples, hop)) + numRows = int(np.ceil(np.log2((fs / 2) / f_min) * bins_per_octave)) + 1 + f = f_min * 2 ** (np.arange(numRows) / bins_per_octave) + cellWidth = f * (2 ** (1 / bins_per_octave) - 1) + if smoothing == 'readable': + sigmaTime = 0.004 * fs / hop + sigmaFreq = 2 * (2 ** (1 / 96) - 1) * f / cellWidth + else: + sigmaTime = 0.001 * fs / hop + sigmaFreq = 1 / cellWidth + timeKernel = _gaussian_kernel(max(sigmaTime, 0.3)) + sigmaFreq = np.maximum(sigmaFreq, 0.3) + logSum = np.zeros((numColumns, numRows)) + for N, step in zip(windows, steps): + energy = np.concatenate(([0.], np.cumsum(np.concatenate( + (np.zeros(N), x ** 2, np.zeros(N)))))) + frameMax = np.max(energy[N:] - energy[:-N]) + R = _reassigned_map(x, fs, N, step, hop, numColumns, numRows, + f_min, bins_per_octave, frameMax) / hop + numHold = 2 * int(np.floor(step / hop / 2)) + 1 + if numHold > 1: + R = convolve1d(R, np.ones(numHold) / numHold, axis=0, + mode='constant') + R = convolve1d(R, timeKernel, axis=0, mode='constant') + R = _smooth_frequency_rows(R, sigmaFreq) + with np.errstate(divide='ignore'): + logSum += np.log(R + 1e-6 * R.max()) + t = np.arange(numColumns) * hop / fs + return t, f, np.exp(logSum / windows.size).T + + +def _round_half_away(x): + """Round halves away from zero, as MATLAB does.""" + x = np.asarray(x, dtype=float) + return np.sign(x) * np.floor(np.abs(x) + 0.5) + + +def _gaussian_kernel(sigma): + half = int(np.ceil(3 * sigma)) + kernel = np.exp(-np.arange(-half, half + 1) ** 2 / (2 * sigma ** 2)) + return kernel / kernel.sum() + + +def _smooth_frequency_rows(R, sigma): + """Gaussian smoothing along the frequency axis (columns of R) with a + width that changes with frequency: one kernel per geometric level.""" + level = _round_half_away(np.log(sigma) / np.log(1.25)).astype(int) + out = R.copy() + numFreqs = R.shape[1] + for lev in np.unique(level): + cols = np.flatnonzero(level == lev) + kernel = _gaussian_kernel(1.25 ** lev) + half = kernel.size // 2 + c1 = max(0, cols[0] - half) + c2 = min(numFreqs, cols[-1] + half + 1) + smoothed = convolve1d(R[:, c1:c2], kernel, axis=1, mode='constant') + out[:, cols] = smoothed[:, cols - c1] + return out + + +def _reassigned_map(x, fs, N, step, hop, numColumns, numRows, f_min, + bins_per_octave, frameMax): + """Reassigned spectrogram of one unit-energy Blackman-Harris window of N + samples and frame step `step`, accumulated on the output grid.""" + half = N // 2 + padded = np.concatenate((np.zeros(half), x, np.zeros(half + N))) + n = np.arange(-half, half) + phase = 2 * np.pi * (n + half) / N + a = (0.35875, 0.48829, 0.14128, 0.01168) + w = a[0] - a[1] * np.cos(phase) + a[2] * np.cos(2 * phase) \ + - a[3] * np.cos(3 * phase) + wd = a[1] * (2 * np.pi / N) * np.sin(phase) \ + - a[2] * (4 * np.pi / N) * np.sin(2 * phase) \ + + a[3] * (6 * np.pi / N) * np.sin(3 * phase) + norm = 1 / np.linalg.norm(w) + w, wd = w * norm, wd * norm + wt = n * w + freqBins = np.arange(half + 1) * fs / N + starts = np.arange(0, x.size, step) + R = np.zeros(numColumns * numRows) + chunk = max(1, int(2e6 // N)) + for b in range(0, starts.size, chunk): + s = starts[b:b + chunk] + frames = padded[s[:, None] + np.arange(N)[None, :]] + Xh = np.fft.rfft(frames * w, axis=1) + Xt = np.fft.rfft(frames * wt, axis=1) + Xd = np.fft.rfft(frames * wd, axis=1) + power = np.abs(Xh) ** 2 + r = np.conj(Xh) / np.maximum(power, np.finfo(float).eps) + tHat = s[:, None] + np.real(Xt * r) + fHat = freqBins[None, :] - fs / (2 * np.pi) * np.imag(Xd * r) + col = _round_half_away(tHat / hop) + with np.errstate(divide='ignore'): + row = _round_half_away(bins_per_octave * np.log2( + np.maximum(fHat, np.finfo(float).eps) / f_min)) + ok = (power > 1e-10 * frameMax) & (col >= 0) & (col < numColumns) \ + & (row >= 0) & (row < numRows) & (fHat > 0) + cells = (col[ok] + row[ok] * numColumns).astype(int) + R += np.bincount(cells, weights=power[ok] * (2 * step / N), + minlength=R.size) + return R.reshape(numRows, numColumns).T diff --git a/tests/golden/enhanced_spectrogram_sqat.mat b/tests/golden/enhanced_spectrogram_sqat.mat new file mode 100644 index 0000000000000000000000000000000000000000..deaa08bfb2cea6079a3f49d4fa45e6656ccf1301 GIT binary patch literal 134891 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Á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 SE)$#oVsQDyF~WaB3NIo7^i{6_ literal 0 HcmV?d00001 diff --git a/tests/golden/make_enhanced_spectrogram_sqat.m b/tests/golden/make_enhanced_spectrogram_sqat.m new file mode 100644 index 0000000..c794135 --- /dev/null +++ b/tests/golden/make_enhanced_spectrogram_sqat.m @@ -0,0 +1,45 @@ +function make_enhanced_spectrogram_sqat(sqatRoot) +% MAKE_ENHANCED_SPECTROGRAM_SQAT Golden data for tests/test_enhanced_spectrogram.py. +% +% make_enhanced_spectrogram_sqat(sqatRoot) runs SQAT_GUI_enhanced_stft +% from SQAT (https://github.com/ggrecow/SQAT, gui/) on a fixed test signal +% with both smoothings and the default grid, and writes +% enhanced_spectrogram_sqat.mat next to this file. +% +% The signal (0.6 s at 16 kHz, in Pa) holds a 1 kHz tone at 80 dB SPL, a +% 250 Hz tone modulated at 4 Hz, a click at 0.3 s and white noise at +% 40 dB SPL. It is rounded to single precision, as PyTTa stores it, so +% both sides read the same numbers. The maps are stored on every 16th +% frequency and every 10th column, enough to pin the method without +% storing the whole grid; t and f are stored whole. +% +% Usage: matlab -batch "make_enhanced_spectrogram_sqat('/path/to/SQAT')" + +addpath(fullfile(sqatRoot, 'gui')); + +fs = 16000; +n = round(0.6 * fs); +tt = (0:n-1)' / fs; +rng(0, 'twister'); +x = 0.2 * sqrt(2) * sin(2*pi*1000*tt) ... + + 0.05 * (1 + 0.8*sin(2*pi*4*tt)) .* sin(2*pi*250*tt) ... + + 2e-3 * randn(n, 1); +x(round(0.3 * fs) + 1) = x(round(0.3 * fs) + 1) + 1; +x = double(single(x)); + +modes = {'readable', 'sharp'}; +L = cell(1, 2); +for k = 1:2 + [t, f, Lk] = SQAT_GUI_enhanced_stft(x, fs, modes{k}); + rows = 1:16:numel(f); + cols = 1:10:numel(t); + L{k} = Lk(rows, cols); +end +L_readable = L{1}; +L_sharp = L{2}; + +out = fullfile(fileparts(mfilename('fullpath')), 'enhanced_spectrogram_sqat.mat'); +x = single(x); +save(out, 'x', 'fs', 't', 'f', 'rows', 'cols', 'L_readable', 'L_sharp', '-v7'); +fprintf('wrote %s (%d x %d per map)\n', out, numel(rows), numel(cols)); +end diff --git a/tests/test_enhanced_spectrogram.py b/tests/test_enhanced_spectrogram.py new file mode 100644 index 0000000..2060d90 --- /dev/null +++ b/tests/test_enhanced_spectrogram.py @@ -0,0 +1,133 @@ +""" +Tests for pytta.enhanced_spectrogram. + +The enhanced spectrogram is the geometric mean of nine reassigned +spectrograms with Blackman-Harris windows of 8 to 512 ms, smoothed +('readable' or 'sharp'), on a logarithmic frequency grid, in dB re the +channel's dBRef (20 uPa for a channel in Pa). Each test pins one rule. The +first compares the whole method with SQAT_GUI_enhanced_stft of SQAT on data +generated by golden/make_enhanced_spectrogram_sqat.m. +""" +import os +import unittest + +os.environ.setdefault("MPLBACKEND", "Agg") + +import numpy as np +import scipy.io as sio + +import pytta + +GOLDEN = os.path.join(os.path.dirname(__file__), 'golden', + 'enhanced_spectrogram_sqat.mat') +FS = 16000 + + +def in_pascal(signalObj): + for ch in signalObj.channels.mapping: + signalObj.channels[ch].unit = 'Pa' + return signalObj + + +def tone(freq, rms, seconds): + tt = np.arange(int(seconds * FS)) / FS + return rms * np.sqrt(2) * np.sin(2 * np.pi * freq * tt) + + +class TestEnhancedSpectrogram(unittest.TestCase): + + def test_matches_sqat(self): + # Against SQAT on the stored signal, both smoothings, default grid: + # t and f whole, the maps on every 16th row and 10th column. Both + # sides compute in double from the same float32 samples, so the + # tolerance is far below any visible change and far above the + # differences of FFT summation order (measured: ~4e-10 dB). + self.assertTrue(os.path.exists(GOLDEN), + 'run golden/make_enhanced_spectrogram_sqat.m') + g = sio.loadmat(GOLDEN, squeeze_me=True) + sig = in_pascal(pytta.SignalObj(g['x'], 'time', int(g['fs']))) + rows = np.atleast_1d(g['rows']) - 1 + cols = np.atleast_1d(g['cols']) - 1 + for smoothing in ('readable', 'sharp'): + t, f, L = pytta.enhanced_spectrogram(sig, smoothing=smoothing) + self.assertLess(np.max(np.abs(t - g['t'])), 1e-12) + self.assertLess(np.max(np.abs(f / g['f'] - 1)), 1e-12) + ref = g['L_' + smoothing] + got = L[np.ix_(rows, cols)][:, :, 0] + diff = np.max(np.abs(got - ref)) + print(f'\n {smoothing:8s} max |dL| vs SQAT = {diff:.2e} dB ' + f'on {ref.size} cells (tol 1e-6)') + self.assertLess(diff, 1e-6) + + def test_steady_tone_column_adds_up_to_its_level(self): + # The cells of a column hold mean square pressure, so a column in the + # middle of a 94 dB SPL tone (1 Pa rms) adds up to 94 dB. Predicted + # before running: every window reassigns a steady tone to its true + # frequency, so the nine maps agree and the geometric mean keeps the + # energy; within 0.2 dB with either smoothing (measured: 93.94 dB + # readable, 94.06 dB sharp). + sig = in_pascal(pytta.SignalObj(tone(1000, 1.0, 1.0), 'time', FS)) + for smoothing in ('readable', 'sharp'): + t, f, L = pytta.enhanced_spectrogram(sig, smoothing=smoothing) + column = L[:, len(t) // 2, 0] + level = 10 * np.log10(np.sum(10 ** (column / 10))) + print(f'\n {smoothing:8s} column level = {level:.2f} dB SPL') + self.assertLess(abs(level - 94), 0.2) + + def test_tone_and_click_land_where_they_are(self): + # A 1 kHz tone peaks on the frequency row nearest 1 kHz, and a click + # at 0.5 s peaks within one column (1 ms) of 0.5 s on a row at 4 kHz. + sig = in_pascal(pytta.SignalObj(tone(1000, 0.1, 1.0), 'time', FS)) + t, f, L = pytta.enhanced_spectrogram(sig, smoothing='sharp') + peak = f[np.argmax(L[:, len(t) // 2, 0])] + self.assertEqual(peak, f[np.argmin(np.abs(np.log2(f / 1000)))]) + click = np.zeros(FS) + click[FS // 2] = 1 + sig = in_pascal(pytta.SignalObj(click, 'time', FS)) + t, f, L = pytta.enhanced_spectrogram(sig, smoothing='sharp') + row = np.argmin(np.abs(np.log2(f / 4000))) + self.assertLessEqual(abs(t[np.argmax(L[row, :, 0])] - 0.5), 1e-3) + + def test_silence_sits_at_the_floor(self): + # log of an empty map: every cell at -120 dB, no NaN or -inf. + sig = pytta.SignalObj(np.zeros(FS // 4), 'time', FS) + t, f, L = pytta.enhanced_spectrogram(sig) + self.assertTrue(np.all(L == -120)) + + def test_channels_are_independent_and_input_is_kept(self): + rng = np.random.default_rng(0) + data = np.column_stack([tone(500, 0.1, 0.5), + 0.05 * rng.standard_normal(FS // 2)]) + sig = in_pascal(pytta.SignalObj(data, 'time', FS)) + before = sig.timeSignal.copy() + t, f, L = pytta.enhanced_spectrogram(sig) + self.assertTrue(np.array_equal(sig.timeSignal, before)) + self.assertEqual(L.shape, (f.size, t.size, 2)) + single = in_pascal(pytta.SignalObj(sig.timeSignal[:, 1], 'time', FS)) + _, _, L1 = pytta.enhanced_spectrogram(single) + self.assertTrue(np.array_equal(L[:, :, 1], L1[:, :, 0])) + + def test_plot_shows_the_enhanced_map(self): + # plot_spectrogram(enhanced=...) draws exactly the map of + # enhanced_spectrogram, on a logarithmic frequency axis. + sig = in_pascal(pytta.SignalObj(tone(1000, 0.1, 0.5), 'time', FS)) + figs = pytta.plot_spectrogram(sig, enhanced='sharp', decimalSep='.') + ax = figs[0].axes[0] + _, _, L = pytta.enhanced_spectrogram(sig, smoothing='sharp') + drawn = np.asarray(ax.collections[0].get_array()).reshape(L.shape[:2]) + self.assertTrue(np.array_equal(drawn, L[:, :, 0])) + self.assertEqual(ax.get_yscale(), 'log') + figs[0].clf() + + def test_rejects_invalid_arguments(self): + sig = pytta.SignalObj(np.zeros(FS // 4), 'time', FS) + with self.assertRaises(ValueError): + pytta.enhanced_spectrogram(sig, f_min=FS / 2) + with self.assertRaises(ValueError): + pytta.enhanced_spectrogram(sig, smoothing='blurry') + with self.assertRaises(TypeError): + pytta.enhanced_spectrogram(np.zeros(FS), smoothing='sharp') + + +if __name__ == '__main__': + unittest.main()