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

Zeitfenster eines Audiosignals

 

michim
Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 18.12.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.10.2010, 20:03     Titel: Zeitfenster eines Audiosignals
  Antworten mit Zitat      
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.

Danke schon mal im Voraus

michael
Private Nachricht senden Benutzer-Profile anzeigen


aj.geissler
Forum-Guru

Forum-Guru



Beiträge: 251
Anmeldedatum: 26.11.07
Wohnort: Seeheim-Jugenheim
Version: ---
     Beitrag Verfasst am: 26.10.2010, 08:36     Titel:
  Antworten mit Zitat      
Hi,

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
if nargin==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

if nargin==1,            % Argumentüberprüfung und
   N=1024;            % Argumentkontrolle
   wdw='hamming';
end
if nargin==2,
   if isstr(N),
      wdw=N;
      N=1024;
   else
      wdw='hamming';
   end
end

if 2^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.
   
[zx,sx]=size(x);       % Größe der Matrix X
befmul=[abs('w='),abs(fenster),abs('('),...
   abs(num2str(sx)),abs(')'),39,abs(';')];
eval(setstr(befmul));   % Befehlsausführung: Fensterfunktion
w=meshgrid(w,1:1:zx);   % Fensterfunktion: Vektor -> Matrix
y=x .*w;              % Elementweise Multiplikation
                        % Prozedurende
endfunction
 


Viel Erfolg !

Andreas
_________________

Andreas Geißler
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.