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

Deconvolution von Verteilungsfunktionen

 

Nico_MATLAB
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 21.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.10.2012, 12:18     Titel: Deconvolution von Verteilungsfunktionen
  Antworten mit Zitat      
Hallo liebe Forenleser,

Ich habe ein Problem mit der Matlab Funktion deconv. Ich habe eine Verteilungsfunktion (A) gegeben, die aus der Faltung zweier Gauss-Verteilungen (A&B) entsteht. Von diesen ist mir eine gegeben. Die fehlende (A) möchte ich durch deconvolution von C mit B erhalten. Ich erhalte jedoch folgende Fehlermeldung:

Error using deconv (line 20)
First coefficient of A must be non-zero.

Ich habe einen Code geschrieben, um das Problem zu verdeutlichen. Hier gehe ich von zwei bekannten Gauss-Kurven 1 & 2 aus, die gefaltet Gauss 3 ergeben. Durch deconvolution von Gauss 3 mit Gauss 2 müsste ich also wieder Gauss 1 erhalten. Wer weiß rat, wo der Fehler steckt???

Vielen lieben Dank!


Code:


%% test convolution / deconvolution
clear all; close all;
x = linspace(0,10000,10000);

mean1 = 250;                        % Erwartungswert der 1. Gauss-Kurve
sigma1 = 5;                         % Standardabweichung der 1. Gauss-Kurve

mean2 = 450;                        % Erwartungswert der 2. Gauss-Kurve
sigma2 = 6;                         % Standardabweichung der 2. Gauss-Kurve

gauss1 = gauss(x,mean1,sigma1);    % 1.Gauss-Kurve
gauss2 = gauss(x,mean2,sigma2);    % 2.Gauss-Kurve

gauss3 = conv(gauss1,gauss2);       % 3.Gauss-Kurve ergibt sich aus Faltung von 1.Gauss-Kurve mit 2.Gauss  
gauss3 = gauss3(1:size(x,2));       % resize gauss3 to inital points of data

[gauss4,res]  =deconv(gauss3,gauss2); % 4.Gauss Kurve ergibt sich aus deconvolution von 3.Gauss-Kurve mit 2.Gauss-Kurve
                                    % gauss4 und gauss1 sollten identisch sein

                               
figure(1);
subplot(2,2,1); plot(x,gauss1,'b',x,gauss2,'k.');  
subplot(2,2,2); plot(x,gauss1,'b',x,gauss2,'r',x,gauss3,'m');
subplot(2,2,3); plot(x,gauss4,'k.');
Private Nachricht senden Benutzer-Profile anzeigen


rowJoe
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 25.11.12
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 26.11.2012, 10:21     Titel:
  Antworten mit Zitat      
Moin Nico,

hast du dafür bereits eine Lösung für dein Problem? Ich bin gerade an dem gleichen Problem, habe aber absolut keine Idee...

Eben wollte ich mir mal ein Beispiel ansehen. Dabei habe ich folgende Fehlermeldung erhalten - hast du die auch? Und wenn nein, wie umgehe ich diese?

>> Bsp_Deconvolution
Undefined function 'gauss' for input arguments of type 'double'.

Error in Bsp_Deconvolution (line 11)
gauss1 = gauss(x,mean1,sigma1); % 1.Gauss-Kurve




Viele Grüße

Jonas
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: 26.11.2012, 11:50     Titel:
  Antworten mit Zitat      
Gauss ist keine Matlab Funktion, sondern selbst geschrieben worden. Daher kennt dein Matlab die Funktion auch nicht. Du brauchst den m-file der Funktion.
Private Nachricht senden Benutzer-Profile anzeigen
 
rowJoe
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 25.11.12
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 26.11.2012, 12:08     Titel:
  Antworten mit Zitat      
Hey danke für deine Antwort. Kannst du mir sagen wo ich den her bekomme?
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 26.11.2012, 12:35     Titel:
  Antworten mit Zitat      
Ich würde es, statt mit gauss, mal mit normpdf probieren: http://www.mathworks.de/de/help/stats/normpdf.html
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 26.11.2012, 12:42     Titel:
  Antworten mit Zitat      
Zum Problem im Anfangsbeitrag: Problem ist die Zeile

Code:

gauss3 = gauss3(1:size(x,2));   % resize gauss3 to inital points of data
 


Hier gehen entscheidende Informationen verloren. Die Länge der Vektoren ist bei der Faltung keine Erhaltungsgröße!
Private Nachricht senden Benutzer-Profile anzeigen
 
rowJoe
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 25.11.12
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 26.11.2012, 17:10     Titel:
  Antworten mit Zitat      
Moin MaFam,

danke für den Tipp, er hat mir sehr weitergeholfen. Wenn ich nun mit "conv" die Faltung berechne werden alle drei Graphen angezeigt. Jedoch interessiert mich ebenfalls die "Rückfaltung" . Dazu muss in dem beiliegenden Beispiel die Zeile 40 bzw. 41 auskommentiert werden - je nach gewünschter Richtung.

Bei "deconv" erhalte ich keine Fehler, allerdings fehlt auch die Ausgabe aller drei (!) Graphen. Kannst du mir sagen, wodran das liegt?


Viele Grüße und bereits jetzt vielen Dank!

Jonas

versuch_rueckfaltung.m
 Beschreibung:
Beipiel für "Rückfaltung"

Download
 Dateiname:  versuch_rueckfaltung.m
 Dateigröße:  1.6 KB
 Heruntergeladen:  330 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 26.11.2012, 19:20     Titel:
  Antworten mit Zitat      
Wenn ich deinen Code ausführe, enthält der Plot alle drei Graphen!
Private Nachricht senden Benutzer-Profile anzeigen
 
rowJoe
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 25.11.12
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 26.11.2012, 22:59     Titel:
  Antworten mit Zitat      
Das ist super! So wie ich ihn hier reingestellt habe, funktioniert er bei mir auch. Hast du auch die Zeilen 41 bzw. 43 miteinander getauscht?

Die Funktion conv funktioniert (Zeile 43), jedoch die deconv (Zeile 41) nicht. Hast du die eine auskomentiert und die jeweils andere aktiviert?
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 30.11.2012, 10:02     Titel:
  Antworten mit Zitat      
Versuch es mal so:

Code:

fktVerschleiss = conv(fktFertigungsstreuung,fktUsed,'same')
[fktFertigungsstreuung_de,res] = deconv(fktVerschleiss ,fktUsed);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
rowJoe
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 25.11.12
Wohnort: ---
Version: 2015b
     Beitrag Verfasst am: 30.11.2012, 12:06     Titel:
  Antworten mit Zitat      
Hallo MaFam,

das klappt leider nicht... Die Funktion "fktVerschleiss" ist dadurch nicht definiert. Diese wird ja durch "deconv" berechnet.

Hm... Hat evtl. noch jemand anders Ideen? Vorschläge? Muss doch irgendwie gehen...


Viele Grüße

Jonas
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 30.11.2012, 12:37     Titel:
  Antworten mit Zitat      
Wie, das ist nicht definiert? Das ist doch durch
Code:

fktVerschleiss = conv(fktFertigungsstreuung,fktUsed,'same')
 

definiert!

Dann lass das 'same' weg...
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 - 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.