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

Hamming-Fenster anwenden

 

Mike1221

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2011, 11:16     Titel: Hamming-Fenster anwenden
  Antworten mit Zitat      
Hi,
Ich habe eine Frage was dem Hamming-Fenster betrifft und zwar:
Ich habe eine 24 Stunden Signal , das Ich auf 20s Segmente die FFT berechnen will.
Ich habe eure codehilfe benutzt:
Code:
%
% Zur Fensterung des Frequenzspektrums
% N = Anzahl der Messwerte
  N = 20;
% Signal(N) = das abgetastete Signal mit N Messwerten
%BetragX ist mein Signal
  Signal(N) = betragX(N);

% Fensterung erfolgt im Zeitbereich
window = Fenster(N,'Hann'); % erstellt ein Hann Fenster mit der Länge N
Signal_win = Signal .* window; % Multiplikation von Signal und Fenster
% Frequenzspektrum berechnen
Y = fft(Signal_win,N);


Problem ist dass Ich folgende Fehler bekomme:
Code:

??? Undefined function or method 'Fenster' for input arguments of type 'double'.

Error in ==> AfBerechnung at 10
window = Fenster(N,'Hann'); % erstellt ein Hann Fenster mit der Länge N
 


noch eine Sache:
Ich will die FFT Berechnung für das ganze Signal machen (24 St) wie soll es mit der Schleife aussehen?
Ich werde so probieren :
Code:

for i = 1:nsamples
N=20;
ect....
end
 


stimmt so?
Danke für euere Hilfe

_Peter: Thema geteilt. Frage bezieht sich auf das folgende Script:
http://www.gomatlab.de/fensterfunkt.....nn-u-blackman-t19079.html


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 18.10.2011, 11:49     Titel:
  Antworten mit Zitat      
Die Fehlermeldung deutet darauf hin, dass die Funktion Fenster.m nicht existiert. Hast du den file auch ins matlab-work Verzeichnis geladen und es ist auch als 'current directory' ausgewählt?

Für die andere Frage nutze doch bitte einen eigenen Thread im Bereich Signalverarbeitung oder Programmierung. Sie hat ja mit dem Skript nichts zu tun.
Private Nachricht senden Benutzer-Profile anzeigen
 
Mike1221

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2011, 11:54     Titel:
  Antworten mit Zitat      
Hi DSP

wo kann Ich Fenster.m finden?

Danke
 
Mike1221

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2011, 12:11     Titel:
  Antworten mit Zitat      
also unter mathwork ist sie nicht zu finden.
es gibt nur hamming(N) wobei was ich nicht verstehen kann wie soll ich denn das Fenster für meinen Signal machen.
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 18.10.2011, 12:24     Titel:
  Antworten mit Zitat      
Die musst du dir hier in diesem Thread downloaden und dann in das matlab/work Verzeichnis speichern. Fenster.m ist doch keine matlab eigene Version. Wenn du eh die 'Signal Processing Toolbox' besitzt, brauchst du diese Fensterfunktion doch gar nicht. Dann kannst du sie dir mit der Matlabfkt. erstellen:

Code:
win = hamming(N,'sflag')
Private Nachricht senden Benutzer-Profile anzeigen
 
Mike1221

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2011, 12:32     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Zeit,

aber ich weiss immer noch nicht wie soll ich hamming(N,'sflag') benutzen.

also ich brauche ein hammingfenster mit N=20 für mein Signal: betragX

ist das so dann richtig? : win = hamming(N,betragX)????


danke
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 18.10.2011, 12:44     Titel:
  Antworten mit Zitat      
@ Moderator: Kann mal bitte jemand die Fragen in einen eigenen Thread im Bereich Signalverarbeitung verschieben...Danke!

Code:

N = length(Signal); % Anzahl Messwerte des Signals
win = hamming(N);


Für 'sflag' kann 'periodic' oder 'symmetric' (=default) angegeben werden. Das brauchst du aber hier nicht. Ansonsten verfährst weiter du wie in deinem Code angegeben. Signal mit Fenster multiplizieren...
Private Nachricht senden Benutzer-Profile anzeigen
 
Mike1221

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2011, 13:26     Titel:
  Antworten mit Zitat      
Danke Dir
Gesplittet: 18.10.2011, 13:46 Uhr von _Peter_
Von Beitrag Fensterfunktion - Hamming, Hann u. Blackman aus dem Forum Script-Ecke
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 18.10.2011, 13:47     Titel:
  Antworten mit Zitat      
Danke für's Verschieben Peter!
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 18.10.2011, 13:49     Titel:
  Antworten mit Zitat      
Kein Problem, dafür bin ich ja unter anderem da Wink
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Mike1221

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2011, 14:22     Titel:
  Antworten mit Zitat      
Danke DSP und Peter

So jetzt ist meine Anfrage in dem richtigen Forum.
Ich habe noch das Problem:

Code:

% Zur Fensterung des Frequenzspektrums
% N = Anzahl der Messwerte
  N = length(Signal);
% Signal(N) = das abgetastete Signal mit N Messwerten
  Signal = betragX;

% Fensterung erfolgt im Zeitbereich
window = hamming(N); % erstellt ein Hamming Fenster mit der Länge N
Signal_win = Signal(1:N) .* window; % Multiplikation von Signal und Fenster
% Frequenzspektrum berechnen
Y = fft(Signal_win,N);
plot(Y)
 


und zwar hier N ist die anzahl der messwerte = 4808025 samples
ich will aber ein fenster auf 20 s .
Wie soll Ich das in 20s Segmente segmentieren? und am Ende die FFT für die ganze 4808025 samples bekommen?


Danke euch
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 18.10.2011, 14:47     Titel:
  Antworten mit Zitat      
Dazu musst du erstmal wissen, wie viele Messwerte in 20 sek. enthalten sind...es hängt eben von deiner Abtastrate ab. Außerdem solltest du die Fensterlänge N so wählen, dass sich eine 2er Potenz ergibt, damit mit dem schnellen FFT Algorithmus gerechnet wird. Geht das mit den 20 sek. nicht, kannst entweder das Zeitfenster anpassen oder aber durch Zero-padding auf die nächste 2er Potenz erweitern.

Die Segmentierung könnte dann so ablaufen:

Code:

% Länge des Gesamtsignals
N = length(signal);
% Bsp.: 20 sek sind 2^12 = 4096 Messwerte
nfft = 4096;
% Anzahl der Segmente bestimmen
k = round(N/nfft) % hier muss angepasst werden, was passieren soll, wenn k nicht ganzzahlig ist...was passiert mit den restlichen Werten???
% k Segmente der Länge nfft transformieren
% pre-allocate
H = zeros(nfft,1);
Hpos0 = zeros(nfft,k);
m = 1;
for i=1:k
    % Fensterung mit Hamming window
    signal_win = signal(m:nfft+m-1) .* win;
    H = fft(signal_win, nfft);
    % Betrag bilden und positiven Frequenzbereich speichern
    H_pos0(1:(nfft/2)+1,i) = abs(H(1:(nfft/2)+1));
    % nächstes Segement
    m = m + nfft;
end


Jetzt musst du dir noch überlegen, wie du die Einzelspektren zu einem Gesamtspektrum zusammenführst...z.B. durch Mittelung aller Segmente.
Private Nachricht senden Benutzer-Profile anzeigen
 
Mike1221

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2011, 15:08     Titel:
  Antworten mit Zitat      
Code:
% Bsp.: 20 sek sind 2^12 = 4096 Messwerte
nfft = 4096;


Hi DSP

wie bist auf das gekommen? was wenn es 10s wäre?


Danke für deine wertvolle Hilfe
 
Mike1221

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2011, 15:21     Titel:
  Antworten mit Zitat      
Code:
for i=1:k
    % Fensterung mit Hamming window
    signal_win = signal(m:nfft+m-1) .* win;
    H = fft(signal_win, nfft);
    % Betrag bilden und positiven Frequenzbereich speichern
    H_pos0(1:(nfft/2)+1,i) = abs(H(1:(nfft/2)+1));
    % nächstes Segement
    m = m + nfft;
end


sorry aber win muss auch in die for schleife kompensiert sein win(?)
und was ist genau H_pos0(1:(nfft/2)+1,i))???
können Sie mir bitte das erklären?

vielen Dank
 
Mike1221

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2011, 15:39     Titel:
  Antworten mit Zitat      
also Ich bekomme immer die Fehlermeldung:


??? Error using ==> times
Matrix dimensions must agree.

Error in ==> AfBerechnung at 22
signal_win = signal(m:nfft+m-1) .* win;
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.