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

dB-Frequenz-Spektrum

 

Ecem
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 12.11.14
Wohnort: Köln
Version: 2013b
     Beitrag Verfasst am: 13.11.2014, 10:23     Titel: dB-Frequenz-Spektrum
  Antworten mit Zitat      
Hey Leute,

ich schreibe unten die Codes, die ich verwende. Mein Problem ist am Ende bei der Umformung nach dB. dB-Freuquenz-Spektrum sieht nicht so aus wie ich erwartet habe. Könnt ihr bitte gucken, ob man die Umformung so machen kann. Vielen Dank!

Code:

clc
clear all

load('Signal_Kalibrator 94dB 1000Hz 10sec.mat')
figure(1), plot(n_PEF__Y.y_values.values)
xlabel('Zeit')
ylabel('Amplitude (Pa)')
audiowrite('dbsignal.wav',n_PEF__Y.y_values.values(1,:)',44100);
[y,fs]=wavread('dbsignal.wav');
[m,n]=size(y);
 N=m;
ts=1/fs;
tmax=(N-1)*ts;
NFFT=2^nextpow2(N);
yf=fft(y,NFFT)/N;
f=fs/2*linspace(0,1,NFFT/2+1);
figure(2), plot(f,2*abs(yf(1:NFFT/2+1))) %Amplitude (Pa)-Freuquenz Spektrum
xlabel('Frequenz (Hz)')
ylabel('Amplitude(Pa)')
kf=20*log10(yf./(2*10^-5)); %Amplitude in dB
figure(3), plot(f,2*abs(kf(1:NFFT/2+1))) %Amplitude (Pa)-Freuquenz Spektrum
xlabel('Frequenz (Hz)')
ylabel('Amplitude(dB)')
 
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 13.11.2014, 11:02     Titel:
  Antworten mit Zitat      
Hallo,

ich habe dir doch schon in deinem anderen Thread dieses Skript ans Herz gelegt: http://www.gomatlab.de/fft-umfassendes-beispiel-t777.html

Dort findest du alle Lösungen zu deinen Fragen. Deine Amplitude ist nicht richtig skaliert und die Darstellung in dB wird dort ebenfalls erleutert.

Ich empfehle auch zunächst mal die Darstellung eines Testsignals, wo man ganz genau weiß was herauskommen muss. Z.B. einen Sinus einer Frequenz.

Falls eine doppelt-logarithmische Darstellung erwünscht ist, kann man den Befehl

Code:


verwenden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Ecem
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 12.11.14
Wohnort: Köln
Version: 2013b
     Beitrag Verfasst am: 13.11.2014, 11:39     Titel:
  Antworten mit Zitat      
Hey,

ich habe schon die Codes gelesen und probiert damit zu arbeiten. Mit dieser Methode kommt aber eine ganz falsche Frequenzspektrum raus. Weil ich nicht weitergekommen bin, habe ich durch Matlab-Hilfe etwas anderes probiert und das Frequenz-Spektrum sieht so besser aus. Ich bin ganz neu im Bereich auch in Matlab, deshalb kann ich nicht sehen wo mein Fehler ist. Danke trotzdem.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 13.11.2014, 12:27     Titel:
  Antworten mit Zitat      
Ecem hat Folgendes geschrieben:
Mit dieser Methode kommt aber eine ganz falsche Frequenzspektrum raus.


Das wage ich dich sehr stark zu bezweifeln Wink


Du erstellt hier einen Vektor der Amplitude in dB, verwendest ihn beim Plot aber gar nicht

Code:
kf=20*log10(yf./(2*10^-5)); %Amplitude in dB
figure(3), plot(f,2*abs(kf(1:NFFT/2+1))) %Amplitude (Pa)-Freuquenz Spektrum


Es muss so sein

Code:


Was ist denn aber der Faktor ./(2*10^-5) ? Wie gesagt deine Skalierung der Amplitude ist auch nicht korrekt. Siehe Skript

Code:
% Berechnung der FFT
% ------------------
H = fft(y, N);
% Berechnung des Amplitudengangs aus dem komplexen Frequenzvektor H:
amplH = abs(H);
% Darstellung des interessierenden Frequenzbereichs des
% Amplitudengangs (0...fn) und
% daran angepasste Amplitudenskalierung (Normierung auf N/2):
amplitudengang = [amplH(1)/N amplH(2:N/2)/(N/2)]; % DC-Bin auf N normieren!
 


Es sollte doch wohl möglich sein, dies in deinem Skript so umzusetzen ohne ein gleich ein Matlab Profi zu sein.

Code:

NFFT=2^nextpow2(N);
yf=fft(y,NFFT);

% Betrag des positiven Frequenzbereichs bis Fs/2 inkl. Skalierung
amplyf = abs(yf);
amplitudengang = [amplyf(1)/NFFT amplyf(2:NFFT/2)/(NFFT/2) amplyf(NFFT/2 + 1)/NFFT];

% Umrechnung in dB
amplitudengang_dB = 20*log10(amplitudengang + eps); % eps = kleine Konstante zur Vermeidung von log10(0)

f=fs/2*linspace(0,1,NFFT/2+1);
figure(2)
plot(f,amplitudengang) % Amplitude (Pa)-Freuquenz Spektrum
...
figure(3)
plot(f,amplitudengang_dB) %Amplitude (Pa)-Freuquenz Spektrum
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Ecem
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 12.11.14
Wohnort: Köln
Version: 2013b
     Beitrag Verfasst am: 13.11.2014, 12:58     Titel:
  Antworten mit Zitat      
Hey,

ich habe vorher auch so angepasst aber dann kommt error using horzcat Confused

ich habe ohne probiert dann gibts Leckage Effekt im Spektrum (glaube ich) Rolling Eyes
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 13.11.2014, 13:16     Titel:
  Antworten mit Zitat      
Soll das jetzt eine weitere Frage sein oder reichen dir meine Vorschläge um deinen Code richtig anzupassen?

Leakage tritt auf, wenn die Signalfrequenz kein ganzes Vielfaches der Frequenzauflösung df ist.

Code:

df = Fs/NFFT;

% Frequenzvektor
f = 0: df: Fs/2;
 


Die FFT berechnet nur die Signalanteile zu den diskreten Frequenzen n*df, wobei n = 0,1,...NFFT/2+1
Hat man ein reelles Signal, wird es wohl immer zu Leakage kommen. Das lässt sich gar nicht vermeiden. Man kann dann entsprechend ein Fenster wie z.B. Hanning und wenn möglich eine besser Auflösung df (= mehr aufgenommen Messwerte)verwenden, was den Leakage Effekt mindert.
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 - 2024 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.