Wie zeichne ich das Spektrogramm einer WAV-Datei?

  • Ich bin ein bisschen mit der Signalverarbeitung auf MATLAB beschäftigt. Und ich habe die folgende Frage, auf die ich gerne die Antwort wissen möchte:

    • Was muss getan werden: Zeichnen Sie das Spektrogramm einer Audiodatei auf. < / li>
    • Was ich weiß: Da es sich um eine Audiodatei handelt, verwende ich wavread, um sie zu lesen, und verwende das zurückgegebene Array, um die Diagramme zu zeichnen, die ich möchte. Erst kürzlich habe ich festgestellt, dass Wav-Dateien Daten auf mehreren Kanälen speichern. Alle Dateien, die ich habe, haben zwei Kanäle. Ich weiß, dass das Spektrogramm Ihnen einen Eindruck von den Grundfrequenzen in Ihrer Audiodatei vermitteln soll.
    • Was ich gerne wissen würde: Was macht das Spektrogramm genau? Was bedeuten die Parameter? Dies ist die Struktur des Spectrogram-Funktionsaufrufs: S=spectrogram(x,window,noverlap,nfft,fs). Was bedeuten die Parameter window und noverlap? Wie stelle ich diese Parameter ein? Sind sie von der Eingabedatei abhängig? Wie zeichne ich nach all dem das Spektrogramm der Audiodatei, da es zwei Kanäle enthält? Die Funktion gibt einen Fehler zurück, wenn ich versuche, das zweidimensionale Array (da zwei Kanäle vorhanden sind) zu übergeben, das von wavread zurückgegeben wird. Es besagt, dass ich jeweils nur eine Zeile oder eine Spalte übergeben kann. Wie kann ich das Spektrogramm meiner WAV-Datei zeichnen?

    Vielen Dank im Voraus! :)

    11 January 2016
    GilleshRob
4 answers
  • Das ist keine großartige Frage, aber ich versuche zu antworten:

    Alle Dateien, die ich habe, haben zwei Kanäle.

    Ein Spektrogramm kann jeweils nur einen Kanal anzeigen. Erstellen Sie entweder für jeden Kanal ein Spektrogramm oder berechnen Sie einen Mittelwert für Ihre Kanäle. Hier ist ein Beispiel für die Syntax, die ich bei einer schnellen Google-Suche gefunden habe:

     [y, fs]=wavread(fileName); % Read wave file
    left=y(:,1); % Left channel 
    right=y(:,2); % Right channel
     

    Dann können Sie spectrogram(left)

    Ich weiß, dass das Spektrogramm Ihnen eine Vorstellung von den in Ihrer Audiodatei vorhandenen Grundfrequenzen vermitteln soll.

    blockquote>

    Nicht ganz. Der Begriff "Grundfrequenz" bedeutet etwas anderes.

    Was macht das Spektrogramm genau?

    Zeigt das Frequenzspektrum des Signals und wie es sich im Laufe der Zeit verändert. Wenn der Anfang des Signals weißes Rauschen ist (flaches Spektrum) und das Ende des Signals ein Ton (Spikey-Spektrum) ist, zeigt das Spektrogramm, wie es sich im Laufe der Zeit von einem Spektrum zum anderen verändert hat. Dazu wird das Signal in kleine Blöcke aufgeteilt und das Spektrum jedes Blocks berechnet.

    Was bedeuten die Parameter? Dies ist die Struktur des Spectrogram-Funktionsaufrufs: S = Spektrogramm (x, Fenster, noverlap, nfft, fs). Was bedeuten die Fenster- und Noverlap-Parameter?

    Haben Sie die Dokumentation ?

    window ist eine Fensterfunktion , das vor der Frequenzumwandlung auf jeden Block der Datei angewendet wird. Wenn Sie keine Fensterfunktion verwenden, treten am Anfang und am Ende jedes Chunks abrupte Änderungen auf, die breite Frequenzkomponenten erzeugen, die Sie nicht benötigen. Die Fensterfunktion ist wie eine Hüllkurve "Einblenden, Ausblenden", so dass Sie nur das Spektrum der Mitte sehen

    23 June 2012
    Michael Haren
  • Ich beantworte gerne Ihre Frage mit 2 Cent. Zuerst wollen wir zu den Grundlagen kommen. Ein Sprachsignal ist technisch gesehen quasi ein stationäres Signal. Dies bedeutet, dass die Merkmale des Signals für eine sehr kurze Zeitdauer (beispielsweise für etwa 20–25 ms) konstant sind. Ein Sprachsignal besteht aus Quelleninformationen (man denke nur an Luftimpulse, die mit einer bestimmten Frequenz schwingen, die als Pitchfrequenz bezeichnet wird) und der Systeminformation (wenn die Luftimpulse durch Ihren Stimmtrakt gehen, bekommen sie eine Art von Signal moduliert durch die Resonanzfrequenzen des Vokaltrakts). Es sind diese Merkmale, die sich alle 20-25 ms ändern. Im Allgemeinen wird bei der Sprachsignalverarbeitung jede Operation an einer Teilmenge des Signals durchgeführt, die 20-25 ms beträgt, da sich die Merkmale über diesem Fenster / Frame befinden.

    Um Ihre Frage zu Spectrogram zu beantworten, müssen Sie wissen, was ein Spektrum ist. Ein Spektrum wie ich zuvor sagte, wird für ein kleines Fenster / Frame berechnet, das die in diesem Fenster vorhandenen Resonanzfrequenzen zeigt. Ein Spektrogramm ist eine grafische Darstellung, die die Spektrumsdarstellung über alle Frames zeigt. Dies macht es zu einer 3-D-Figur und die Spektrogrammfunktion erzeugt eine 2-D-Projektion dieser Figur. Die x-Achse steht für die Zeitskala (oder das entsprechende Fenster), die y-Achse für die Frequenz und die grauen Streifen für die Frequenz des jeweiligen Fensters. Je dunkler der Streifen, desto größer ist die Stärke der Frequenzkomponente in diesem bestimmten Fenster des Signals.

    Ich denke, der vorherige Beitrag erklärt die Spektrogrammfunktion im Detail. Wenn Sie Fragen haben, können Sie sich jederzeit an uns wenden.

    04 January 2013
    Rob
  • Ich weiß, dass das Spektrogramm Ihnen eine Vorstellung von den in Ihrer Audiodatei vorhandenen Grundfrequenzen geben soll

    Für jedes Klangbeispiel gibt es immer nur eine Grundfrequenz und (mögliche) Harmonische (ganzzahlige Vielfache der Grundfrequenz).

    Was genau macht das Spektrogramm genau? tun?

    Auf der einfachsten Ebene wird das Sound-Sample in mehrere "Blöcke" (im Zeitbereich) unterteilt und die fft jedes Blocks dargestellt und angezeigt Ihnen alle in derselben Grafik. Die x-Achse ist Zeit und die y-Achse ist Frequenz (vergleiche mit einem fft-Amplitudendiagramm, wobei x-Achse Frequenz und y-Achse Amplitude sind. In diesem Fall wird die Analyse nur an einem der "Blöcke" des Zeitbereichs durchgeführt in einem Spektrogramm wird uns gleichzeitig die fft-Amplitudenkurve jedes solchen "Blocks" gezeigt). Die Amplitude der FFT für jeden Zeitbereichsblock wird durch Farbe und Intensität dargestellt.

    PS: Bitte hinterlassen Sie Korrekturen oder bessere Referenzen für diese Erklärung in den Kommentaren

    06 November 2012
    user13267
  • Ich denke, es sollte folgendes sein (im Frequenzbereich, nicht im Zeitbereich):

     [y, fs]=wavread(input);             % read wave file
    
    left=y(:,1);                        % Left channel 
    right=y(:,2); % Right channel
    
    fy = fft(left);                     % transform waveform to frequency domain
    
    figure;
    spectrogram(fy);
     
    14 June 2013
    auraham