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

specgram, komisches Ergebnis, was mach ich falsch

 

matlabopfer
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.06.08
Wohnort: ---
Version: R2008a
     Beitrag Verfasst am: 14.07.2008, 19:22     Titel: specgram, komisches Ergebnis, was mach ich falsch
  Antworten mit Zitat      
Ich möchte meine FFT in einem Spektrogramm darstellen. Leider kommt nicht das raus, was ich erwartet hätte (siehe Bild). Nämlich 3 Frequenzbänder (hier bei f1, f2, f3). Was mich auch wundert ist das ich bis 1,1ms einen fetten roten Balken habe.

Kann mir da jemand was zu sagen. Ich grübel schon den ganzen Tag darüber. Ich versteh das alles noch nicht so richtig, was Schwingungsanalysen angeht bzw. was man aus dem Spektrogramm wirklich alles rauslesen kann.


Hier mein m-File:

Code:
clear all; %resetet Workspace, alle Variablen werden auf null gestetzt
clc %löscht alte Fehlermeldungen im commando window
f3=110;
f2=10; % eine Oberschwingungsfrequenz
f1=50; % Grundschwingungsfrequenz des Testfunktion.
T1=3/f1 % Anzahl der Periodendauer, des Testsignals

fa=2*f1*100; % freie Wahl einer Abtastfrequenz unter berücksichtigung des Abtasttherorems;
%N=100 Stützstellen pro Periode
ta=1/fa; %Abtastdauer
N=T1/ta; %Anzahl der Stützstellen pro periode, je größer N, desto besser die Auflösung (weniger leckeffekt)

%Plotten des Testsignals und deren Abtastung
t=0:ta:T1; %Zeitvektor
x=4.*sin(2*pi*f1.*t)+1.*cos(2*pi*f2.*t)+1.*cos(2*pi*f3.*t+20);
figure(1)
subplot(3,1,1)
plot(t,x)
hold on
stem(t(1:5:length(t)+1),x(1:5:length(x)+1))
grid on;
hold off

%points=350; % muss gerade und in N sein


% FFT
Y=fft(x,N);
Pyy=abs(Y)./(N/2); %.*Betrag von Y bzw. cn Koeffizient,
%durch N/2 weil nur hälfte der Punkte geplottet wird (wegen symetrie) und N weil Periodendauer
%gleich Messdauerperiodendauer der Abtastung ist.

f=fa/N.*(0:(N/2)); %frequenzvektor
subplot(3,1,2)
stem(f,Pyy(1:(N/2+1)));
hold on
plot(f,Pyy(1:(N/2+1)));
axis([0 200 0 max(Pyy)+1]);
grid on;
hold off

%Rücktrafo
R=ifft(Y,N); %Rückwärtstrafo
subplot(3,1,3)
plot(1:N,R);
%axis([0 200 -10 10])
grid on;



% Spectralanalyse
figure(2)

specgram(Pyy,[],120);
colorbar
colormap;


uebungFFTaufstellen.m
 Beschreibung:

Download
 Dateiname:  uebungFFTaufstellen.m
 Dateigröße:  1.38 KB
 Heruntergeladen:  894 mal
spektrogramm.jpg
 Beschreibung:

Download
 Dateiname:  spektrogramm.jpg
 Dateigröße:  21.56 KB
 Heruntergeladen:  1005 mal

_________________

Matlab Version 7.6.0.324 (R2008a) auf Win XP SP3
Private Nachricht senden Benutzer-Profile anzeigen


nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 15.07.2008, 07:54     Titel:
  Antworten mit Zitat      
Hi,

macht es denn Sinn, das Spektrogramm der Fourier-Tansf. (Pyy) darzustellen?
Willst Du vielleicht stattdessen das Spektrogramm des Signals (x)?
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 15.07.2008, 09:14     Titel:
  Antworten mit Zitat      
Also ich habe die Funktion specgram garnicht. Vermutlich ist die Teil einer Toolbox. Aber ich verstehe diesen Teil nicht so ganz:
Code:

Pyy=abs(Y)./(N/2);
 

Warum soll man die Werte durch 2 Teilen wenn das spectrum gespiegelt ist?
Sollte das nicht so sein:
Code:

Pyy=abs(Y(1:fix(N/2)));
 

Also nur die erste Hälfte vom Spectrum übernehmen? Das fix kannst du in deinem Fall weglassen aber wenn die Zahl mal ungerade ist gibts sonst Probleme.

Ein anderes Problem sehe ich darin, dass du die specgram funktion über das spectrogram machst. Wie gesagt ich weiß nicht was das für eine funktion ist. Aber wenn es eine STFT ist erwartet sie eigentlich ein zeitdiskretes Signal.(siehe Nschlange) Ich würde dir sogar empfehlen die STFT auch noch selbst zu bauen. Da kann man noch einiges lernen wenn man das so macht.

Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabopfer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.06.08
Wohnort: ---
Version: R2008a
     Beitrag Verfasst am: 15.07.2008, 11:31     Titel:
  Antworten mit Zitat      
Danke Oli und NSchlange. Hab die Fehler berichtigt. Trotzdem zeigt mir mein Spektrogramm nicht die richtigen Frequenzen an. Immerhin ist schon mal der rote Balken weg.

Den Code habe ich hier nochmal überarbeitet:
Code:
clear all; %resetet Workspace, alle Variablen werden auf null gestetzt
clc %löscht alte Fehlermeldungen im commando window

%--- Variablen und Konstanten
f2=120; % Oberschwingungsfrequenz der Testfunktion
f1=50; % Grundschwingungsfrequenz der Testfunktion.

T1=3/f1         % Anzahl der Periodendauer, des Testsignals
fa=2*f1*100;    % freie Wahl einer Abtastfrequenz unter berücksichtigung des Abtasttherorems;
ta=1/fa;        % Abtastdauer
N=T1/ta;        % Anzahl der Stützstellen pro periode, je größer N, desto besser die Auflösung (weniger leckeffekt)
               

%--- Messreihe der Testfunktion
t=0:ta:T1; %Zeitvektor
y=40.*sin(2*pi*f1.*t)+10.*cos(2*pi*f2.*t);


%--- Plotten des Testsignals und deren Abtastung
figure(1)
subplot(3,1,1)
plot(t,y)
hold on
stem(t(1:5:length(t)+1),y(1:5:length(y)+1))
grid on;
hold off


%--- Aufstellen der FFT
X_n=fft(y,N);
% Entspricht: sum(x(k)*exp(-j*2*pi*n*k/N))
% über die Indizes k=0..N-1, für die Ordnung (n) -inf<n<inf; 1/N=ta/T_m

c_n=abs(X_n)./N;
% Matlab löst die FFT nummerisch. Unter der Voraussetzung, das Mess- und
% Grundschwingungsperiodendauer übereinstimmen (T_m=T_1, sog.
% synchronisierte Messdauer oder kohärente Abtastung), lässt sich die
% Koeffizientenberechnung annähern zu c_n=1/N*sum(x(k)*exp(-j*2*pi*n*k/N))
% über die Indizes k=0..N-1, für die Ordnung (n) -inf<n<inf; 1/N=ta/T_m

Y=c_n.*2;
% Die Amplitude(Y) entspricht für Ordnungen(n)=!0 zwei mal den Koeffizienten 2*c_n;
% (für A_n=0=c_n)          
 


%--- Plotten der FFT, des Testsignals
%Frequenzvektor, es reicht nur die Hälfte des Ergebnisvektors der FFT darzustellen,
% aufgrund von Symetrie
f=(1/T1).*(0:(N/2));
subplot(3,1,2)
stem(f,Y(1:(N/2+1)));
hold on
plot(f,Y(1:(N/2+1)));
axis([0 200 0 max(Y)+1]);
grid on;
hold off


%--- Rücktrafo
yr=ifft(X_n,N); %Rückwärtstrafo
subplot(3,1,3)
plot((1:N).*ta,yr);
%axis([0 200 -10 10])
grid on;



%--- Spectralanalyse
figure(2)
specgram(y,[],240);
colorbar
colormap;


Spektrogramm.jpg
 Beschreibung:

Download
 Dateiname:  Spektrogramm.jpg
 Dateigröße:  22.15 KB
 Heruntergeladen:  980 mal
uebungFFTaufstellen.m
 Beschreibung:

Download
 Dateiname:  uebungFFTaufstellen.m
 Dateigröße:  1.97 KB
 Heruntergeladen:  722 mal

_________________

Matlab Version 7.6.0.324 (R2008a) auf Win XP SP3
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 15.07.2008, 18:37     Titel:
  Antworten mit Zitat      
Ok weiß was los ist, muss jetzt erstmal los, ich sage dir morgen früh was das Problem ist. Tipp: probier mal höhere Frequenzen zu nehmen.

Gruß,

Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 16.07.2008, 09:03     Titel:
  Antworten mit Zitat      
Also es ist so: du hast 3 sehr tiefe Frequenzen, die du analysieren möchtest. Dann machst du deine FFT die sieht ganz gut aus. Allerdings siehst du da auch schon das du erst reinzoomen must um alle 3 Frequenzen zu erkennen. Und das mit der höchstmöglichen Frequenzauflösung, nämlich über die gesamte Zeit. Wenn du die größe des Zeitfensters verringerst, verringerst du auch die Frequenzauflösung. Ich gehe mal davon aus das deine specgram funktion zuerst eine Fensterfunktion benutzt zb. Hamming und auch überlappende Fenster. Aufjedenfall ist das Ergebnis (der rote Balken ganz unten) das zu erwartende Ergebnis. Also wenn du das darfst würde ich höhere Frequenzen nehmen. Wenn nicht könntest du es zb. bei der ersten FFT belassen.

Gruß,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabopfer
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.06.08
Wohnort: ---
Version: R2008a
     Beitrag Verfasst am: 16.07.2008, 12:20     Titel: @deroli
  Antworten mit Zitat      
Hi Oli,

ich hab jetzt nicht viel verstanden.
Confused So sicher sitzt das mit den ganzen Fensterfunktionen, Filtern, FFT nicht bei mir. Überlappende Fenster sagen mir garnichts. Hab aber deshalb nochmal in die Hilfe zu specgram geguckt. Also es ist ein Hanning Fenster. Und wenn ich Fensterbreite, länge der FFT (NFFT) und Noverlap angebe im Befehl, dann gehts. Vorallem wenn ich für Fs=fa/2 einsetze.



Code also wie folgt:
Code:

%--- spectralanalyse
figure(2)
Z=1000;
sepcgram(y,Z,fa/10,Z,Z-8);
colorbar;
colormap;
 


PS: Kann man irgendwie auch einstellen, das das Spektrogramm erst ab 0ms losgeht? Warum ist die Frequenz bei 50Hz so fett bzw. verschmiert trotz Hanningfenster? Was ist Z bzw. NFFT, Window und Noverlap? Was stelle ich damit ein? Durch ein großes Z wird die darstellung feiner, naja ... Question

spektrogramm3.png
 Beschreibung:

Download
 Dateiname:  spektrogramm3.png
 Dateigröße:  4.37 KB
 Heruntergeladen:  977 mal

_________________

Matlab Version 7.6.0.324 (R2008a) auf Win XP SP3
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.