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

findpeaks funktioniert nicht

 

Medizintechnik85
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 18.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2015, 11:41     Titel: findpeaks funktioniert nicht
  Antworten mit Zitat      
Hallo ihr Lieben,

das ist mein Code:

Code:
clear all
close all
clc

% set sample rate and time window
fsamp = 44100 ;      % sampling rate = samples per second
tsamp = 1.4861 / 16 ;   % sampling time in s bei 2^16

t = 0:1/fsamp:tsamp;   % time steps in s for each sample point


recObj = audiorecorder(fsamp,16,1);
recordblocking(recObj, tsamp+1/fsamp);
y = getaudiodata(recObj)';

subplot(2,1,1);      % 1. plot
plot(t,y)      % plot the signal

% compute FFT as DFT
l = size(y)   ;   % size of amplitude vector
n =  2^nextpow2(l(2));   % next power of 2 > size of y
z = fft(y,n) / l(2) ; % compute coplex FFT as DFT
zz = 2* abs(z) ;   % get absolute normelised values
f = fsamp  * 1/2 * linspace(0,1,n/2+1); % frequency steps

subplot(2,1,2);      % 2. plot
A = zz(1:n/2+1);
plot(f,A)
% find max peak in spectrum, annotaion
[pks,locs,ww,p] = findpeaks(A,'MinPeakHeight',0.35,'Annotate','extents');
% compuet maximum frequency
f(locs(1));
 


Mein Problem ist, dass er mir die Peaks nicht anzeigt, so wie auf diesem Bild.
Wäre euch dankbar, wenn ihr mir helfen könntet.
edit winkow: bitte die code umgebung benutzen

findpeaks.jpg
 Beschreibung:

Download
 Dateiname:  findpeaks.jpg
 Dateigröße:  39.93 KB
 Heruntergeladen:  531 mal
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 25.09.2015, 11:44     Titel:
  Antworten mit Zitat      
Meine Fehlermeldung mit dem Code:

Code:

Warning: Invalid MinPeakHeight. There are no data points greater
than MinPeakHeight.
> In findpeaks>removePeaksBelowMinPeakHeight (line 373)
  In findpeaks (line 139)
  In test_forum_2265 (line 30)
Index exceeds matrix dimensions.

Error in *** (line 32)
f(locs(1));
 


Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Medizintechnik85
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 18.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2015, 11:49     Titel:
  Antworten mit Zitat      
doofe Frage, aber was soll ich machen? Mein Code ist defintiv richtig, da ich die max. Frequenz angezeigt und berechnet bekomme. Ich möchte aber gerne die Darstellung, wie sie aud dem Bild ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 25.09.2015, 11:50     Titel:
  Antworten mit Zitat      
Gut, wahrscheinlich für diese Fragestellung ist das mit der letzten Zeile unwichtig.

Ich sehe also ein Signal oben und eine FFT unten, die allerdings ungünstig dargestellt wird. Ist es das?

FINDPEAKS läuft ja erst danach und das Ergebnis erzeugt ja keinen visuellen Output der Peaks anzeigen würde, somit kann ich da kein Problem im Vergleich zum Referenzbild analysieren.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Medizintechnik85
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 18.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2015, 11:56     Titel:
  Antworten mit Zitat      
Richtig und wenn ich den den Befehl

findpeaks(A,'MinPeakHeight',0.35,'Annotate','extents')

ergänze, dann habe ich zwar die Darstellung, wie auf dem Bild, aber ich erhalte die falsche Frequenz.
Private Nachricht senden Benutzer-Profile anzeigen
 
Medizintechnik85
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 18.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2015, 12:00     Titel:
  Antworten mit Zitat      
Ok, wie kann ich denn ein visuelles Output der Peaks erzeugen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 25.09.2015, 12:06     Titel:
  Antworten mit Zitat      
Zitat:

[pks,locs,ww,p] = findpeaks(A,'MinPeakHeight',0.35,'Annotate','extents');


Gibt ja erstmal nur Daten zurück. Welche man davon anzeigen möchte und wie (plot, scatter, etc), ist ja die SAche des Anwenders.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Medizintechnik85
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 18.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2015, 12:06     Titel:
  Antworten mit Zitat      
Könnte mir bitte jemand helfen.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 25.09.2015, 13:49     Titel:
  Antworten mit Zitat      
Also für mich stimmt das Ergebnis für das 1. Maximum von ca. 16Hz

Code:

clear all
close all
clc

% set sample rate and time window
fsamp = 44100 ;      % sampling rate = samples per second
tsamp = 1.4861 / 16 ;   % sampling time in s bei 2^16

t = 0:1/fsamp:tsamp;   % time steps in s for each sample point


recObj = audiorecorder(fsamp,16,1);
recordblocking(recObj, tsamp+1/fsamp);
y = getaudiodata(recObj)';

subplot(2,1,1);      % 1. plot
plot(t,y)      % plot the signal

% compute FFT as DFT
l = size(y)   ;   % size of amplitude vector
n =  2^nextpow2(l(2));   % next power of 2 > size of y
z = fft(y,n) / l(2) ; % compute coplex FFT as DFT
zz = 2* abs(z) ;   % get absolute normelised values
f = fsamp  * 1/2 * linspace(0,1,n/2+1); % frequency steps

subplot(2,1,2);      % 2. plot
A = zz(1:n/2+1);
plot(f,A)
% find max peak in spectrum, annotaion
findpeaks(A,f,'Annotate','extents','WidthReference','halfheight');
 
[pks,locs,ww,p] = findpeaks(A,f,'Annotate','extents','WidthReference','halfheight');
% compuet maximum frequency
locs(1)
 


Allerdings stimmt die Skalierung deiner Amplitude nicht (siehe folgendes Skript: FFT: Umfassendes Beispiel) und eine Darstellung in dB der y-Achse wäre wohl auch sinnvoller.
Private Nachricht senden Benutzer-Profile anzeigen
 
Medizintechnik85
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 18.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2015, 13:59     Titel:
  Antworten mit Zitat      
Lieber DSP,

vielen, vielen lieben Dank !!! DAS nenne ich wirklich eine tolle Hilfe.
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.