Verfasst am: 25.10.2010, 20:03
Titel: Zeitfenster eines Audiosignals
Hallo zusammen!
Ich möchte ein Audiosignal einlesen und dann eine fft durchführen.(das einlesen ist mir schon gelungen)
Jedoch möchte ich immer nur ein Zeitfenster dieses Signals von etwa 5ms einlesen, dieses verarbeiten und dann das Fenster um 1ms weiter verschieben usw.
Könnte mir dabei jemand behilflich sein?
PS:sollte meine Fragestellung nicht ganz einleuchten (kann gut möglich sein)
bitte einfach nachfragen.
kann sein, daß es inzwischen dafür bei MatLab einen eigenen Befehl gibt. Vielleicht auch innerhalb einer speziellen Toolbox ?
Für die Wandlung des Zeitsignals (ein Vektor) in sich überlappende Bereiche habe ich (früher) eine Funktion overlapp.m geschrieben:
Code:
function y=overlapp(x,N,ovl);
% OVERLAPP Aufsplitten eines Vektors in sich überlappende Bereiche
%
% Y=OVERLAPP(X,N,OVL)
%
% Eine Funktion X wird in mehrere, sich um OVL Werte % überlappende Abschnitte der Länge N+2*ovl unterteilt % und als Matrix Y - eine Zeile pro Abschnitt - % ausgegeben.
lx=length(x); % Länge der Originalfunktion ifnargin==1,
N=2 .^(nextpow2(lx)-2); % Sequenzabschnitts-Grundlänge
ovl=N/2;
end
ntimes=floor(lx/N); % Anzahl der resultierenden Zeitpunkte
xcut=x(1:N*ntimes); % Cropping der letzten Restwerte
xcut=reshape(xcut,N,ntimes); % Wandlung in Matrix
xupper=[xcut(1:ovl,2:ntimes),zeros(ovl,1)];
xlower=[zeros(ovl,1),xcut(N-ovl+1:N,1:ntimes-1)];
y=[xlower;xcut;xupper].'; % Durchführung des Overlapping % Prozedurende
Das Ergebnis ist dann eine Matrix, so daß dann mit FFT direkt weitergearbeitet werden kann.
Als Beispiel füge ich Dir eine Welch-Spektralberechnung an, die auf der FFT- und Mittelwertbildung solcher überlappender Abschnitte beruht.
Code:
function[H,W]=welch(xf,N,wdw);
% WELCH Spektralschätzung nach Welch !
%
% [H,W]=WELCH(XF,N,WINDOW)
%
% XF : Zeitreihe in Form eines Vektors % N : Größe der einzelnen Segmente % Die einzelnen Segmente überlappen sich % jeweils um N/2 Werte. Es ist darauf zu % achten, daß N eine Zweierpotenz ist. % Voreinstellung für N=1024; % WINDOW : String mit dem Namen einer Fensterfunktion % Voreinstellung ist WINDOW='hamming'
%
% Aufrufkonventionen: Zulässig sind Aufrufe der % folgenden Formen % 1): [H,W]=welch(xf); => N=1024, Window='hamming' % 2): [H,W]=welch(xf,N); => Window='hamming' % 3): [H,W]=welch(xf,'bartlett'); => N=1024; % 4): [H,W]=welch(xf,N,WDW)
%
% Literatur: % Kammeyer, Karl Dirk % "DIGITALE SIGNALVERARBEITUNG : Filterung und Spektralanalyse" % Teubner-Verlag 1989, % Teubner-Studienbücher: Elektrotechnik % ISBN 3-519-06122-8
ifnargin==1, % Argumentüberprüfung und
N=1024; % Argumentkontrolle
wdw='hamming';
end ifnargin==2,
if isstr(N),
wdw=N;
N=1024;
else
wdw='hamming';
end end
if2^nextpow2(N)~=N, % Argumentanpassung
N=2^(nextpow2(N)-1);
end
ovl=N/4; % Anzahl der sich überlappenden Werte
N=N/2;
xf=overlapp(xf,N,ovl);
[K,L]=size(xf); % K: Anzahl der Teilfolgen % L: Länge einer Teilfolge
endfunction
function y=mtxwind(x,fenster);
% MTXWIND % Y=MTXWIND(X,FENSTER)
%
% Jede Zeile der Matrix X wird mit der Fensterfunktion, % deren Namen im String "FENSTER" angegeben ist, % gefenstert.
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
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.