Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Enhanced spectrogram visualization tools for time-frequency analysis. Use when creating spectrograms, spectral analysis, or time-frequency plots for signals...
Enhanced spectrogram visualization tools for time-frequency analysis. Use when creating spectrograms, spectral analysis, or time-frequency plots for signals...
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
Enhanced spectrogram visualization tools for professional time-frequency analysis.
import matplotlib.pyplot as plt from pywayne.plot import regist_projection, parula_map import numpy as np # Register custom projection regist_projection() # Create spectrogram fig, ax = plt.subplots(subplot_kw={'projection': 'z_norm'}) spec, freqs, t, im = ax.specgram( x=signal_data, Fs=100, NFFT=128, noverlap=96, cmap=parula_map, scale='dB' ) ax.set_ylabel('Frequency (Hz)') plt.colorbar(im, label='Magnitude (dB)') plt.show()
Register the custom SpecgramAxes projection. Must be called before using the enhanced specgram functionality. from pywayne.plot import regist_projection regist_projection()
Enhanced spectrogram with advanced features. Key Parameters: ParameterDescriptionDefaultNFFTFFT window length (points)256FsSampling frequency (Hz)2noverlapOverlap points between windows128cmapColormap (use parula_map)-mode'psd', 'magnitude', 'angle', 'phase''psd'scale'dB' or 'linear''dB'normalize'global', 'local', 'none''global'freq_scaleFrequency scaling factor1.0FcCenter frequency offset (Hz)0 Returns: spec - 2D spectrogram array (n_freqs, n_times) freqs - Frequency axis array t - Time axis array im - matplotlib image object (for colorbar)
Auto-recommend STFT parameters based on signal characteristics. from pywayne.plot import get_specgram_params params = get_specgram_params( signal_length=10000, sampling_rate=100, time_resolution=0.1 # or freq_resolution=0.5 ) # Returns: NFFT, noverlap, actual_freq_res, actual_time_res, n_segments
MATLAB-style perceptually uniform colormap for scientific visualization. from pywayne.plot import parula_map plt.imshow(data, cmap=parula_map)
fs = 100 # Sampling rate win_time, step_time = 1, 0.1 fig, ax = plt.subplots(subplot_kw={'projection': 'z_norm'}) spec, freqs, t, im = ax.specgram( x=acc_data, Fs=fs, NFFT=int(win_time * fs), noverlap=int((win_time - step_time) * fs), scale='dB', cmap=parula_map ) ax.set_ylabel('Frequency (Hz)') ax.set_ylim(0, 30)
# Convert Hz to bpm for heart rate visualization fig, ax = plt.subplots(subplot_kw={'projection': 'z_norm'}) spec, freqs, t, im = ax.specgram( x=ppg_signal, Fs=100, NFFT=400, noverlap=300, freq_scale=60, # Hz -> bpm scale='dB' ) ax.set_ylabel('Heart Rate (bpm)') ax.set_ylim(40, 180)
fig, ax = plt.subplots(subplot_kw={'projection': 'z_norm'}) spec, freqs, t, im = ax.specgram( x=vibration_data, Fs=1000, NFFT=1024, noverlap=512, scale='linear', normalize='global' ) plt.colorbar(im, label='Normalized Magnitude')
fig, ax = plt.subplots(subplot_kw={'projection': 'z_norm'}) spec, freqs, t, im = ax.specgram( x=signal, Fs=100, NFFT=100, pad_to=512, # Zero-pad for smoother spectrum noverlap=80, scale='dB' )
ModeDescriptionUse CasedBLogarithmic (10log10 for PSD, 20log10 for magnitude)Large dynamic range signalslinearLinear amplitudeDirect amplitude comparison
ModeDescriptionUse CaseglobalZ/max(Z), preserves relative intensityCompare intensity across timelocalPer-column normalization to [0,1]Focus on frequency content over timenoneNo normalizationRaw spectrogram values
freq_scaleUnitUse Case1.0HzDefault, most signals60bpmHeart rate, respiration rate0.001kHzAudio signals Example: freq_scale=60 converts 2 Hz β 120 bpm
Frequency resolution: Ξf = Fs / NFFT Time resolution: Ξt = (NFFT - noverlap) / Fs Trade-off: Cannot simultaneously achieve high frequency and time resolution Use get_specgram_params() to auto-calculate optimal parameters.
spec, freqs, t, im = ax.specgram(...) def on_click(event): if event.xdata and event.inaxes == ax: time_idx = np.argmin(np.abs(t - event.xdata)) plt.figure() plt.plot(freqs, spec[:, time_idx]) plt.title(f'FFT at t={event.xdata:.2f}s') plt.show() fig.canvas.mpl_connect('button_press_event', on_click)
IMU data: Accelerometer and gyroscope analysis Physiological signals: PPG (heart rate), ECG, respiration Vibration analysis: Machinery fault diagnosis Audio processing: Speech and audio spectrum analysis
Always call regist_projection() before using projection='z_norm' parula_map is recommended for best perceptual uniformity dB mode automatically handles log(0) issues For better FFT efficiency, set NFFT to power of 2
Agent frameworks, memory systems, reasoning layers, and model-native orchestration.
Largest current source with strong distribution and engagement signals.