Add selectable RTA filter characteristics
This commit is contained in:
@@ -516,6 +516,7 @@ function buildPhoenixMeterPacket(frame) {
|
||||
xyR,
|
||||
rta: rta ? {
|
||||
engine: String(rta?.engine || 'iir'),
|
||||
filterbank: String(rta?.filterbank || 'legacy'),
|
||||
bands_avg: Array.isArray(rta?.bands_avg) ? rta.bands_avg : (Array.isArray(rta?.bands) ? rta.bands : []),
|
||||
bands_peak: Array.isArray(rta?.bands_peak) ? rta.bands_peak : [],
|
||||
bands: Array.isArray(rta?.bands) ? rta.bands : (Array.isArray(rta?.bands_avg) ? rta.bands_avg : []),
|
||||
@@ -871,6 +872,7 @@ export function buildRtaRuntimeConfig(CONFIG = {}) {
|
||||
const runtimeBpoMode = bpoMode;
|
||||
return {
|
||||
engine: rtwProfile ? 'iir' : (CONFIG.RTA_ENGINE || 'iir'),
|
||||
filterbank: CONFIG.RTA_IIR_FILTERBANK === 'butterworth' ? 'butterworth' : 'legacy',
|
||||
fftSize: CONFIG.FFT_SIZE || 4096,
|
||||
monoInput: !!CONFIG.MONO_INPUT,
|
||||
lrFractionalDelayEnabled: !!CONFIG.LR_FRACTIONAL_DELAY_ENABLED,
|
||||
|
||||
@@ -50,6 +50,7 @@ const CONFIG = {
|
||||
REALTIME_BAR_HOLD_MS: 800,
|
||||
REALTIME_BAR_DECAY_DB_PER_S: 20,
|
||||
RTA_ENGINE: 'iir', // 'fft' | 'iir'
|
||||
RTA_IIR_FILTERBANK: 'legacy', // 'legacy' | 'butterworth'
|
||||
RTA_FREQ_RANGE: 'norm', // 'norm' | 'lf'
|
||||
RTA_BPO_MODE: '1_3',
|
||||
RTA_WEIGHTING: 'z', // 'z' | 'a' | 'c'
|
||||
@@ -784,6 +785,9 @@ function loadConfig(opts = {}) {
|
||||
if (typeof saved.PPM_DIN_DECAY_DB_PER_S === 'number') CONFIG.PPM_DIN_DECAY_DB_PER_S = saved.PPM_DIN_DECAY_DB_PER_S;
|
||||
if (typeof saved.PPM_DIN_HOLD_MS === 'number') CONFIG.PPM_DIN_HOLD_MS = saved.PPM_DIN_HOLD_MS;
|
||||
if (CONFIG.RTA_BAR_LAYOUT === 'classic') CONFIG.RTA_BAR_LAYOUT = 'rtw';
|
||||
CONFIG.RTA_IIR_FILTERBANK = CONFIG.RTA_IIR_FILTERBANK === 'butterworth'
|
||||
? 'butterworth'
|
||||
: 'legacy';
|
||||
if (CONFIG.RTA_BAR_LAYOUT === 'rtw') {
|
||||
CONFIG.RTA_ENGINE = 'iir';
|
||||
CONFIG.RTA_IIR_ORDER = 6;
|
||||
|
||||
+9
-1
@@ -303,6 +303,14 @@
|
||||
</select>
|
||||
<small>FFT (fix) oder IIR-Filterbank</small>
|
||||
</div>
|
||||
<div class="opt">
|
||||
<label>IIR-Filtercharakteristik</label>
|
||||
<select id="opt_rtaFilterbank" style="width:230px">
|
||||
<option value="legacy" selected>Legacy (Phoenix/RTW-Vergleich)</option>
|
||||
<option value="butterworth">Butterworth 6. Ordnung</option>
|
||||
</select>
|
||||
<small>Beide Varianten sind IIR. Legacy bildet die bisherige Anzeige nach; Butterworth ist die neue mathematische Konstruktion.</small>
|
||||
</div>
|
||||
<div class="opt">
|
||||
<label>Bänder pro Oktave</label>
|
||||
<select id="opt_rtaBpo" style="width:150px">
|
||||
@@ -1258,7 +1266,7 @@
|
||||
<li><strong>Browserlast:</strong> Single-Slot-Puffer und Sequenzprüfung für Mess-, Spektrogramm- und Visualisierungsdaten ergänzt. Große Rohsamplefelder werden nicht mehr in jedem JSON-Messpaket wiederholt.</li>
|
||||
<li><strong>Spektrogramm:</strong> Langzeitstillstand und stotterndes Nachholen beseitigt. Inkrementelles Spaltenzeichnen, Worker-ACK, Watchdog/Neustart und begrenztes Überspringen veralteter Spalten ergänzt. 0,5×, 1×, 2×, 4× und 6× besitzen nun eine feste, FFT- und DPI-unabhängige Zeitbasis.</li>
|
||||
<li><strong>DIN-/EBU-PPM:</strong> Blockunabhängige Quasi-Peak-Detektoren mit bandbegrenzter Interpolation, korrekter Attack- und Rücklaufballistik sowie automatischen Tonburst-, Frequenzgang- und Polaritätstests implementiert. Eine zweite Browser-Anstiegsballistik wurde entfernt.</li>
|
||||
<li><strong>RTW-RTA:</strong> RTW-Profil verbindlich auf die IIR-Oktavteilband-Filterbank festgelegt. Die Filterbank verwendet vollständige Butterworth-Bandpässe sechster Ordnung aus unterschiedlichen SOS-Sektionen, interne f64-Rechnung sowie exakte IEC-Basis-10-Mitten und -Bandkanten bei vertrauten Nominalbeschriftungen.</li>
|
||||
<li><strong>RTW-RTA:</strong> RTW-Profil verbindlich auf die IIR-Oktavteilband-Filterbank festgelegt. Bis zur Vergleichsmessung am realen RTW-Gerät sind die bisherige Phoenix/RTW-Charakteristik und vollständige Butterworth-Bandpässe sechster Ordnung getrennt auswählbar.</li>
|
||||
<li><strong>RTA-Bewertung und Integration:</strong> A-, C- und Z-Bewertung sampleweise vor der Filterbank ergänzt. Fast, Medium, Slow, Impulse, Average und Peak rechnen im Leistungsbereich und unabhängig von der ALSA-Periodengröße.</li>
|
||||
<li><strong>RTA-Auflösung:</strong> Umschaltung zwischen 1/3, 1/6 und 1/12 repariert. Alle drei Auflösungen bleiben im RTW-Profil aktiv und verwenden dessen IIR-Filterbank, Darstellung und Ballistik.</li>
|
||||
<li><strong>Hardwareparameter:</strong> Tatsächlich von ALSA ausgehandelte Samplerate, Perioden- und Puffergröße werden nun durch DSP, Aufnahme, Status und Browser verwendet; die feste 48-kHz-Annahme wurde entfernt.</li>
|
||||
|
||||
@@ -278,6 +278,7 @@ function syncUI() {
|
||||
['opt_barThin', CONFIG.METER_BAR_THIN, 'val_barThin', (v)=>Number(v).toFixed(2)],
|
||||
['opt_headerTextColor', CONFIG.HEADER_TEXT_COLOR || '#ffe066'],
|
||||
['opt_rtaEngine', CONFIG.RTA_ENGINE || 'iir'],
|
||||
['opt_rtaFilterbank', CONFIG.RTA_IIR_FILTERBANK || 'legacy'],
|
||||
['opt_rtaBpo', CONFIG.RTA_BPO_MODE || '1_6'],
|
||||
['opt_rtaOrder', CONFIG.RTA_IIR_ORDER ?? 4],
|
||||
['opt_rtaDisplayGainFft', CONFIG.RTA_DISPLAY_GAIN_FFT_DB ?? 12, 'val_rtaDisplayGainFft', (v)=>`${v} dB`],
|
||||
@@ -1074,6 +1075,10 @@ function wireHandlers(env) {
|
||||
CONFIG.RTA_ENGINE = CONFIG.RTA_BAR_LAYOUT === 'rtw' ? 'iir' : ((v === 'iir') ? 'iir' : 'fft');
|
||||
return CONFIG.RTA_ENGINE;
|
||||
});
|
||||
h('opt_rtaFilterbank', v => {
|
||||
CONFIG.RTA_IIR_FILTERBANK = v === 'butterworth' ? 'butterworth' : 'legacy';
|
||||
return CONFIG.RTA_IIR_FILTERBANK;
|
||||
});
|
||||
h('opt_rtaBpo', v => {
|
||||
applyRtaBpoSelection(v);
|
||||
const layoutControl = E('opt_rtaLayout');
|
||||
|
||||
Reference in New Issue
Block a user