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

nochmal über filtersignal bitte um eure Hilfe!

 

gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.02.2010, 22:10     Titel: nochmal über filtersignal bitte um eure Hilfe!
  Antworten mit Zitat      
hallo,
ich mache eine abschlussarbeit und muss ein signal filtern,bis jetzt habe ich es nicht geschafft.
ich habe ein programm. aus 2 GUIs
das erst Gui besteht aus 2 fenster ,einmal für original Signal und zweimal wo fft spektrum dargestellt wird .
ich habe spannung werten womit ich das signal verlauf darstelle ,(wie auf dem bild im anhang)und danach berechne ich spannung verlauf ,und dann fft Spektrum ,aus FFT berechne ich dann meine merkmale ,die auf dem GUI nummer 2 erscheinen.
das alles funktioniert ,nur halt ohne filter ,ich möchte in meinem programm ein filter hinzufügen ,damit mein original signal gefiltert wird ,bevor ich FFT darstelle und aus diesem die Merkmale berechne.
wie kann ich in meinem programm ein filter hinzufügen und um die störsignale zu entfernen
ich füge hier den ganzen code und mein signal verlauf hinzu
ich hoffe ihr könnt mir dabei helfen ,dieses problem zu lösen und vielen dank

[/code]
% --- wird ausgeführt bevor Programm für den Benutzer sichtbar wird
function myfile1_OpeningFcn(hObject, eventdata, handles, varargin)

% Deklaration Standardbefehl für Ausgabe in myfile1
handles.output = hObject;
%Achsenbezeichung der Diagramme im GUI
xlabel(handles.spgverlauf,'Abtastrate [s]')
ylabel(handles.spgverlauf,'Spannung [V]')
xlabel(handles.spektrum,'Frequenz [Hz]')

%Aktualisierung der GUI Eigenschaften
guidata(hObject, handles);

% --- Fuktion zur Ausgabe in der Kommandozeile
% wird beim jetzigen Stand nicht verwendet
function varargout = myfile1_OutputFcn(hObject, eventdata, handles)
%holt die Ausgabeeigenschaften
varargout{1} = handles.output;




% --- Spannungswerte einlesen
%wird ausgeführt nach Betätigung Button "werte einlesen"
function spgopen_Callback(hObject, eventdata, handles)
global SPANNUNG MESSUNGEN NAME fid
% Spannungswerte aus datei_menu öffnen
% Datei öffnen Dialog ausführen
[filename,pathname] = uigetfile('*.*','Datei öffnen');
% Dateipfad und Dateiname in einer variablen vereinen
datei = fullfile(pathname,filename);

fid=fopen(datei,'rb'); % datei ist ein String mit dem vollständigen Dateinamen
a=fread(fid,'uint8');
fclose(fid);
a(a==44)=46 .*ones(size(a(a==44))); % Komma wird mit Dezimalpkt. ersetzt.
fid=fopen(datei,'wb');
fwrite(fid,a,'uint8');
fclose(fid);



% Spannungwerte einlesen
SPANNUNG = load(datei);
S =sgolayfilt(SPANNUNG,3,41);

% Dateiname in GUI ausgeben
set(handles.spgtext,'String',filename);
% Anzahl der Spannungswerte bestimmen
anzspgwerte = numel(SPANNUNG);
%Anzahl in GUI ausgeben
set(handles.anzspgtext,'String',anzspgwerte);
anzmesswerte=sum(MESSUNGEN);
set(handles.anzmesstext,'String',anzmesswerte);






% --- Texteingabe für Abtastrate
% Programmcode generiert von GUI-Editor
function abtinput_Callback(hObject, eventdata, handles)
function abtinput_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% --- Texteingabe für Samplerate
% Programmcode generiert von GUI-Editor
function sampleinput_Callback(hObject, eventdata, handles)
function sampleinput_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end


% --- Original Signal berechnen und darstellen
% wird ausgeführt nach Betätigung Button "Verlauf berechnen"
function plotten_Callback(hObject, eventdata, handles)
global SPANNUNG SAMPLES ABTAST MESSUNGEN Signalbeginn Signalende
%Abtastrate aus GUI Textfeld holen
abtastman = str2double(get(handles.abtinput,'String'));
ABTAST = abtastman;
% Samplerate aus GUI Textfeld holen
samplerate = str2double(get(handles.sampleinput,'String'));
SAMPLES = samplerate;
% Matrix mit Abtastwerten erstellen
abtastwerte = (1:samplerate)';
abtastrate = (abtastwerte*(abtastman*0.001));
% Anzahl der Messungen bestimmen
anzmessungen = (str2double(get(handles.anzspgtext,'String')))/...
(str2double(get(handles.sampleinput,'String')));

MESSUNGEN = anzmessungen;
%-- Signalbeginn (Rauschtoleranz bis 33% des Signalmaximums)
% Einschwingvorgang berücksichtigen
einschwing = SAMPLES*0.01;
schwingstart = [];
for n = (0:MESSUNGEN-1)
% Maximum und Minimum der Messung bestimmen
Spannungmax = max(SPANNUNG((1+n*SAMPLES)+einschwing:SAMPLES+n*SAMPLES));
Spannungmin = min(SPANNUNG((1+n*SAMPLES)+einschwing:SAMPLES+n*SAMPLES));
% ersten wert finden der grösser als 33% des Maximums
% oder kleiner als 33% des Minimums ist
schwingwerte = find(...
(SPANNUNG((1+n*SAMPLES)+einschwing:SAMPLES+n*SAMPLES)...
>(Spannungmax*0.33))|...
(SPANNUNG((1+n*SAMPLES)+einschwing:SAMPLES+n*SAMPLES)...
<(Spannungmin*0.33)));
schwingwert = schwingwerte+einschwing;
schwingstart(end+1) = schwingwert(1);
end
schwingstartg = mean(schwingstart);
%tatsächlicher Signalbeginn -0,2ms
Signalbeginn = round(schwingstartg) - round(0.0002/(ABTAST*0.001));
% Signal in GUI ausgeben
signalausgabe = Signalbeginn*ABTAST;
set(handles.sigbeginninput,'String',signalausgabe)
% Signalende (Rauschtoleranz bis 33% des Signalmaximums)
schwingende = [];
for n = (0:MESSUNGEN-1)
% nur mit positiven Signalspitzen arbeiten
[pks,locs] = findpeaks(SPANNUNG(Signalbeginn+n*SAMPLES:SAMPLES+n*SAMPLES));
pksamples = numel(pks);
% Maximum der Messung bestimmen
[Umax Upos] = max(pks);
% ersten wert finden der nach dem Maximum kleiner als 33% wird
endwerte = find((pks(Upos:pksamples)<(Umax*0.33)));
endwert = locs(endwerte(1)+Upos)+Signalbeginn;
schwingende(end+1) = endwert;
end
schwingendeg = mean(schwingende);
% tatsächliches Signalende +0,8ms
Signalende = round(schwingendeg) + round(0.0008/(ABTAST*0.001));
% Signalende in GUI ausgeben
signalendausgabe = Signalende*ABTAST;
set(handles.sigendeinput,'String',signalendausgabe)








% Plot Original Signal
for n = (0:anzmessungen-1)
spgplot = SPANNUNG(1+n*samplerate:samplerate+n*samplerate);
plot(handles.spgverlauf,abtastrate, spgplot, 'Color', [0 0.7 0]);
hold on

end
hold off
xlabel(handles.spgverlauf,'Abtastrate [s]')
ylabel(handles.spgverlauf,'Spannung [V]')





% --- Spektrum darstellen
% wird ausgeführt nach Betätigung Button "Spektrum berechnen"
function fftstart_Callback(hObject, eventdata, handles)
global SPANNUNG SAMPLES ABTAST MESSUNGEN SPKTRM Signalbeginn Signalende spektrum

frequenz = 1/(ABTAST*0.001); %Frequenz
T = (Signalende-Signalbeginn+1)/frequenz; %Abtastperiodendauer
t = 0:1/frequenz:T; %Abtastzeitwerte in Matrix
t_diff = t(end)-t(1); %Zeitdifferenz
SPKTRM = [];



% Plot Spektrum
for n = (0:MESSUNGEN-1)
% Berechnung FFT
spektrum = fft(SPANNUNG(Signalbeginn+n*SAMPLES:Signalende+n*SAMPLES));
SPKTRM = [SPKTRM; spektrum];
% nur im positiven Bereich
spktrmabs = abs(spektrum);
% Gleichanteil und spiegelung entfernen
fspktrm = spktrmabs(2:ceil(length(spktrmabs)/2));
% Plot Spektrum
stem(handles.spektrum,...
linspace(1/t_diff,length(fspktrm)/t_diff,length(fspktrm)),fspktrm,...
'fill','MarkerSize',1,'Color', [0 0.7 0]);
hold on
end
hold off
xlabel(handles.spektrum,'Frequenz [Hz]')





% --- merkmale der Merkmalberechnung
% wird ausgeführt nach Betätigung Button "merkmale"
function merkmale_Callback(hObject, eventdata, handles)
% startet Unterprogramm myfile2
myfile2






% --- Menü Datei
function datei_menu_Callback(hObject, eventdata, handles)
% Neu
function neu_menu_Callback(hObject, eventdata, handles)
delete(myfile1)
myfile1
% Merkmale Speichern unter...
function speichern_menu_Callback(hObject, eventdata, handles)
global Merkmale
[filename,pathname,filterindex] = uiputfile('Merkmale.dat',...
'Merkmale speichern unter...');
save(fullfile(pathname,filename),'Merkmale');

% Beenden
function beenden_menu_Callback(hObject, eventdata, handles)
delete(myfile1)

original signal ohne filter.png
 Beschreibung:

Download
 Dateiname:  original signal ohne filter.png
 Dateigröße:  12.31 KB
 Heruntergeladen:  535 mal


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