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

Pitch detection

 

voice
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 29.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.06.2010, 14:33     Titel: Pitch detection
  Antworten mit Zitat      
Hallo Zusammen,

ich habe vor, anhand der Pitch Detection an die Grundfrequenz eines Audiosignals zu gelangen.

Das Audiosignal habe ich in Frames der Länge 25 ms aufgeteilt und diese um 10 ms verschoben. Parallel habe ich die Energie der Frames ermittelt.

1)
Nun möchte ich erst einmal an das reine Signal, ohne vorherige Aufnahmepause, geschweigedenn Pause nach dem Signal haben. Es muss also automatisch erkannt werden, wann das 'Rauschen', also das Sprachlose Signal vorbei ist, geschweigedenn wieder anfängt.


2)
Dann möchte ich in den Ernergiehaltigen Segmenten den Abstand zwischen den relativen Maxima ermitteln um somit gemittelt an die Pitchfrequenz ~ Grundfrequenz zu gelangen.


Momentan sieht der Code folgendermaßen aus: Es kann ein belibiges .wav Signal mit der Abtastfrequenz 8000 Hz verwendet werden.

Code:

[x,fs] = wavread('polize');
leng = length(x);
time_length = length(x)/fs;
win_length = 200;           % 200 Werte (25 ms)
time_shift = 80;            % 80 Werte (10 ms)
no_frame = floor(1+((leng-win_length)/time_shift));
t1 = (0:length(x)-1)./time_shift;
t2 = 0:no_frame-1;
x_seg = zeros(1,200);
E = zeros(1,no_frame);

subplot(2,1,1)
plot(t1,x);



for i=1:no_frame
   s=0;
    if i ==1
        x_seg = x(1:win_length);
        for k=1:win_length
            q = x_seg(k)^2;
            s = s+q;
        end
        E(i)=20*log(s);
    else
        x_seg = x((i-1)*time_shift:win_length+((i-1)*time_shift));
        for k=1:win_length
            q = x_seg(k)^2;
            s = s+q;
        end
        E(i)=20*log(s);
    end
end

subplot(2,1,2);
plot(t2,E);
xlabel('Number of Frame');
ylabel('Energy');


 




Kann mir jmd. ein paar Tips oder Lösungsansätze zu Punkt 1) und 2) geben. Dafür wäre ich sehr dankbar !!!


Lieben Gruß und Dank

voice
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.