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

Identifizierung von Störgeräusche in Schallmessungen

 

eraros
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 15.10.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.10.2020, 14:37     Titel: Identifizierung von Störgeräusche in Schallmessungen
  Antworten mit Zitat      
Hallo zusammen,

ich beschäftige mich grad mit akustischen Messdaten für meine Abschlussarbeit.
Ein Ziel ist, Umgebungsgeräusche aus Schallmessdaten zu identifizieren und womöglich filtern.

Ich habe ein Audio Signal (Wind+Vogel) und ich möchte ein Code mit dem man identifizieren kann, an welchem Zeitpunkt t Vögel auftreten.
Anhand des Spektrogramms sieht man ja, dass Vögel Frequenzen zwischen ca. 2000 und 6000 Hz bedecken.



Meine Idee wäre: im Frequenzspektrum die Magnitude gleich Null setzen für alle Frequenzen außer dem Bereich 2000-6000 Hz, die IFFT machen und damit das entsprechende Zeitsignal zu haben.
Ich bin ziemlich neu mit der Matlab Umgebung und der Signalverarbeitung, daher meine Frage: wäre sowas sinnvoll? Und wenn ja, hat jemand Tipps, wie ich es im Matlab umsetzen kann?

Vielen Dank für Eure Hilfe.
Erika

Mit dem Code, den ich bis jetzt geschrieben habe, komme ich leider nicht weiter.

Code:
%% Noise identification

clear
close all
clc

% load birds and wind signal
% mix the signals
% identify frequencies and time of birds signal

% load audio signal - birds
[y_birds, Fs] = audioread('Vogel.wav');
y_birds = y_birds(:,1);

Ts = 1/Fs;

% load audio signal - wind
[y_wind, Fs_wind] = audioread('Wind WEA.wav');
y_wind = y_wind(:,1);


% Parameter for the spectrogram

flength=256;
foverlap=flength/2;
fftlength=flength;
wnd=hann(flength,'periodic');
fR = 1000:.5*Fs/flength:15000;


%% Mixing wind and birds signal

MinimumLength = min([length(y_wind), length(y_birds)]);
y_birds = y_birds(1:MinimumLength);
y_wind = y_wind(1:MinimumLength);
y_mix = y_birds+y_wind;
t_mix = (0 : (length(y_mix)-1))*Ts;    % time vector mix

NFFT = 2^nextpow2(MinimumLength);
f = Fs/2*linspace(0,1,NFFT/2+1);
Y_birds = fft(y_birds,NFFT)/MinimumLength;

% time domain

Ts_wind = 1/Fs_wind;                                  % Sampling interval
t_birds = (0 : (length(y_birds)-1))*Ts;      % time vector birds
t_wind = (0 : (length(y_wind)-1))*Ts_wind;       % time vector wind

% plot birds signal

figure;
subplot(3,1,1)
plot(t_birds,y_birds)
grid on
xlabel('time in sec')
ylabel('amplitude')
title('Birds - signal in time domain')

subplot(3,1,2)
plot(f,2*abs(Y_birds(1:NFFT/2+1)))
xlim([0 10000])
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')

[S_birds, f_birds, T_birds] = spectrogram (y_birds, wnd, foverlap, fR, Fs);
subplot(3,1,3)
spectrogram (y_birds, wnd, foverlap, fR, Fs, 'yaxis');

% plot wind signal

Y_wind = fft(y_wind,NFFT)/MinimumLength;
figure;
subplot(3,1,1)
plot(t_wind,y_wind)
grid on
xlabel('time in sec')
ylabel('amplitude')
title('Wind - signal in time domain')

subplot(3,1,2)
plot(f,2*abs(Y_wind(1:NFFT/2+1)))

title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')
xlim([0 10000])

[S_wind, f_wind, T_wind] = spectrogram (y_wind, wnd, foverlap, fR, Fs);
subplot(3,1,3)
spectrogram (y_wind, wnd,foverlap, fR, Fs, 'yaxis');

% plot mixed signal

Y_mix = fft(y_mix,NFFT)/MinimumLength;
figure;
subplot(3,1,1)
plot(t_mix,y_mix)
grid on
xlabel('time in sec')
ylabel('amplitude')
title('mixed signal in time domain')

subplot(3,1,2)
plot(f,2*abs(Y_mix(1:NFFT/2+1)))
xlim([0 10000])
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')

[S_mix, f_mix, T_mix] = spectrogram (y_mix, wnd, foverlap, fR, Fs);
subplot(3,1,3)
spectrogram (y_mix, wnd, foverlap, fR, Fs, 'yaxis');

%% Identification of birds frequencies

PSD_mix = 2*abs(Y_mix(1:NFFT/2+1));

% identify frequencies birds: f = 2000-6000 Hz

N = length(f);
f_birds = zeris(N,1);

for k = 1:N
    if f(k) > 2000 && f(k) < 6000
        f_birds(k) = f(k);
    end
end

ind = find(f_birds);

birds = zeros(length(PSD_mix),1);
birds(ind) = PSD_mix(ind);
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.