IIRFilterNode: getFrequencyResponse()-Methode

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2021.

Die getFrequencyResponse()-Methode der IIRFilterNode-Schnittstelle verwendet die aktuellen Einstellungen des Filteralgorithmus und berechnet die Frequenzantwort für Frequenzen, die in einem bestimmten Frequenzarray angegeben sind.

Die beiden Ausgabearrays, magResponseOutput und phaseResponseOutput, müssen vor dem Aufruf dieser Methode erstellt werden; sie müssen die gleiche Größe wie das Eingabefrequenzarray (frequencyArray) haben.

Syntax

js
getFrequencyResponse(frequencyArray, magResponseOutput, phaseResponseOutput)

Parameter

frequencyArray

Ein Float32Array, das ein Array von Frequenzen in Hertz enthält, die gefiltert werden sollen.

magResponseOutput

Ein Float32Array, um die berechneten Magnituden der Frequenzantwort für jeden Frequenzwert im frequencyArray zu empfangen.

phaseResponseOutput

Ein Float32Array, um die berechneten Phasenantwortwerte in Radiant für jeden Frequenzwert im Eingabearray frequencyArray zu empfangen.

Rückgabewert

Keiner (undefined).

Ausnahmen

NotSupportedError DOMException

Wird ausgelöst, wenn die drei bereitgestellten Arrays nicht alle die gleiche Länge haben.

Beispiele

Im folgenden Beispiel verwenden wir einen IIR-Filter auf einem Medienstream (für eine vollständige Demo siehe unser stream-source-buffer Demo live oder lesen Sie den Quellcode). Als Teil dieser Demo erhalten wir die Frequenzantworten für diesen IIR-Filter für fünf Beispiel-Frequenzen. Wir erstellen zuerst die benötigten Float32Array-Objekte, eines mit den Eingabefrequenzen und zwei, um die Ausgaben der Magnituden- und Phasenwerte zu empfangen:

js
const myFrequencyArray = new Float32Array(5);
myFrequencyArray[0] = 1000;
myFrequencyArray[1] = 2000;
myFrequencyArray[2] = 3000;
myFrequencyArray[3] = 4000;
myFrequencyArray[4] = 5000;

const magResponseOutput = new Float32Array(5);
const phaseResponseOutput = new Float32Array(5);

Als nächstes erstellen wir ein <ul>-Element in unserem HTML, um unsere Ergebnisse zu enthalten, und holen eine Referenz darauf in unserem JavaScript:

html
<p>IIR filter frequency response for:</p>
<ul class="freq-response-output"></ul>
js
const freqResponseOutput = document.querySelector(".freq-response-output");

Schließlich, nach der Erstellung unseres Filters, verwenden wir getFrequencyResponse(), um die Antwortdaten zu erzeugen und in unsere Arrays zu setzen, durchlaufen dann jedes Datenset und geben sie in einer leicht lesbaren Liste am unteren Rand der Seite aus:

js
const feedforwardCoefficients = [0.1, 0.2, 0.3, 0.4, 0.5];
const feedbackCoefficients = [0.5, 0.4, 0.3, 0.2, 0.1];

const iirFilter = audioCtx.createIIRFilter(
  feedforwardCoefficients,
  feedbackCoefficients,
);

// …

function calcFrequencyResponse() {
  iirFilter.getFrequencyResponse(
    myFrequencyArray,
    magResponseOutput,
    phaseResponseOutput,
  );

  for (let i = 0; i < myFrequencyArray.length; i++) {
    const listItem = document.createElement("li");
    listItem.textContent = `${myFrequencyArray[i]}Hz: Magnitude ${magResponseOutput[i]}, Phase ${phaseResponseOutput[i]} radians.`;
    freqResponseOutput.appendChild(listItem);
  }
}

calcFrequencyResponse();

Spezifikationen

Specification
Web Audio API
# dom-iirfilternode-getfrequencyresponse

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch