WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Audiosignal -> FFT -> mitteln

 

pullmoll89

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.05.2012, 18:32     Titel: Audiosignal -> FFT -> mitteln
  Antworten mit Zitat      
Hallo zusammen,

ich bin ein absoluter Einsteiger was MATLAB angeht, aber habe mich jetzt ein bisschen eingearbeitet.

Ich möchte nun das Frequenzspektrum eines Audiosignals, sowie das gemittelte Spektrum darstellen, wie auf dem Bild hier:


Der Code, den ich bisher habe, sieht so aus:
Code:
[x fs] = wavread('Audiosignal.wav');
N = 1024;
freq = linspace(0,fs/2,N/2+1);
x_fft = fft(x,N);
x_amp = abs(x_fft(1:length(freq)));
x_log = 20*log10(x_amp);

plot(freq,x_log);
xlabel('Frequency [Hz]');
ylabel('Amplitude [dB]');


Das führt dann zu einem Ergbenis wie auf dem Bild hier:


Sieht für das Frequenzspektrum schon mal nicht verkehrt aus, finde ich.
Ich weiß aber leider nicht, wie ich nun das gemittelte Spektrum erstellen kann.

Wenn ihr mir dazu Hinweise oder Hilfen geben könntet, wäre das echt gut! Smile

Viele Grüße,
pullmoll89


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 24.05.2012, 21:19     Titel:
  Antworten mit Zitat      
Da gibt es mehrere Möglichkeiten:

- wenn du mehrere solcher Signale hast, kannst du sie einfach mitteln
- einen Mittelwertfilter verwenden, Bsp. in der Funktion filter() zu finden
- oder z.B. die smooth() Funktion

Du solltest dir auch mal noch in der Skriopt Ecke das umfassende FFT Bsp. ansehen. Die Skalierung deiner Ampl. ist nämlich nicht korrekt.
Private Nachricht senden Benutzer-Profile anzeigen
 
pullmoll89

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2012, 00:00     Titel:
  Antworten mit Zitat      
Hey, danke für deine Antwort.

Also das mit der Filterfunktion habe ich jetzt mal probiert und klappt soweit auch sehr gut; liegt halt daran, wie man den Filter macht.
Ich habe erst mal einen einfachen gewählt:
Code:
filt1 = 1/10 * ones(10,1);
x_filt1 = filter(filt1,1,x_log);


Was die Skalierung betrifft habe ich gesehen, dass ich vergessen hab, durch N zu teilen. War das das, was du meintest?

Außerdem hab ich N mal von 1024 auf 512 gesetzt, und jetzt ist das Spektrum deutlich unordentlicher.
Ich wundere mich nur, dass meine Amplituden alle im negativen dB-Bereich liegen, und die auf der Vorlage deutlich im positiven...
So sieht mein Ergebnis nun aus:
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 25.05.2012, 10:34     Titel:
  Antworten mit Zitat      
Die Skalierung ist so noch nicht ganz richtig. Wenn man nur das positive Freq.-spektrum darstellt, dürfen nur der Gleichsignalanteil (f=0 Hz) und die Nyquistfreq. durch N geteilt werden. Der Rest nur durch N/2...

Code:

x_fft = fft(x,N);
x_amp = abs(x_fft(1:length(freq)));
amplitudengang = [x_amp(1)/N; x_amp(2:N/2)/(N/2); x_amp((N/2)+1)/N];
 


Du kannst sonst auch mal das sptool verwenden, dort dein Signal importieren und dir dann mittels FFT das Freq.spektrum darstellen lassen.

Wenn du N verkleinerst, wird die Auflösung des Spektrums schlechter, d.h. der Abstand zwischen 2 Frequenzlinien wird größer.
Private Nachricht senden Benutzer-Profile anzeigen
 
tobsenmh
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 27.10.13
Wohnort: NRW
Version: R2013b
     Beitrag Verfasst am: 29.10.2013, 18:12     Titel:
  Antworten mit Zitat      
Hallo,

DSP hat Folgendes geschrieben:


Du kannst sonst auch mal das sptool verwenden, dort dein Signal importieren und dir dann mittels FFT das Freq.spektrum darstellen lassen.



Habe ich eigentlich auch die Möglichkeit, die mit dem sptool durchgeführten Analysen (z.B. FFT) auf einfachem Wege (habe leider nicht so die Kenntnisse in MatLab, als das ich die hinter der sptool-Box verborgenen Funktionen eigenhändig programmieren könnte Crying or Very sad ) in meinen Programmcode zu übernehmen?

Viele Grüße
tobsenmh
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.