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

Zwei Arrays miteinander falten

 

NachtStille
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 12.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2012, 15:22     Titel: Zwei Arrays miteinander falten
  Antworten mit Zitat      
Hallo zusammen,
ich habe ein Problem, bei dem Ihr mir hoffentlich helfen könnt Sad

Undzwar soll ich eine Funktion schreiben die als input zwei Arrays kriegt und als output die Faltung dieser beiden Arrays liefert.
Von der Idee her soll sie so ähnlich wie MATLABs 'conv()' funktionieren.. sprich;

output(1) = input1(1)*input2(1)
output(2) = input1(1)*input2(2) + input1(2)*input2(1)
output(3) = input1(1)*input2(3) + input1(2)*input2(1) + input1(3)*input2(1)
...
output(n) = input1(n)*input2(n)

ich hab da auch einiges ausprobiert. doch funktioniert mein code ab dem 3. output-eintrag nicht mehr Sad


wäre für jede Hilfe sehr dankbar!

Lieben Gruß
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: 12.07.2012, 15:50     Titel:
  Antworten mit Zitat      
Die allgemeine Formel ist ja in der Doku zu dem Befehl conv() angegeben. Diese läßt sich mit for Schleifen umsetzen. Mach doch mal einen Vorschlag dafür...

Muss die Faltung im Zeitbereich stattfinden?
Private Nachricht senden Benutzer-Profile anzeigen
 
NachtStille
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 12.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2012, 16:56     Titel:
  Antworten mit Zitat      
ja, sie muss im Zeitbereich statt finden.


Code:
%
%Bsp: complementConj([1;2;3;4],[5;6;7;8])
function [vFiltSig] = complementConj(vSig, vImpRes)


%Laenge des Ergebnis-Vektors
vFiltSig_size = size(vSig,1)+ size(vImpRes,1)-1


%Testen des Ergebnisses mit der Matlab-Funktion;
testErgebnis = conv(vSig, vImpRes)

%Initialvektor der Laenge 'vFiltSig_size'
w=zeros(vFiltSig_size,1)

%da erster Wert immer gleich ist, kann er direkt eingetragen werden
w(1)=vSig(1)*vImpRes(1)

i=2;
for k=2:vFiltSig_size
    faltWert=0;
    for j=1:i
        faltWert = faltWert + (vSig(j)*vImpRes((k-j)+1));  
            w(k) = faltWert
             if(i < size(vImpRes))
             i = i+1;
             end
    end
end
 


wie gesagt ab dem dritten wert stimmts nicht mehr. hab schon gedebuggt.. weiß ungefähr woran es liegt (bspw. dass mein k nicht 'hochgezählt' wird), komme aber dennoch nicht wirklich voran Sad
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: 12.07.2012, 17:04     Titel:
  Antworten mit Zitat      
Das Problem liegt an der Zählvariable j.

Schau mal in der Doku zu dem Befehl conv. In dem Satz "The sum..." wird dir die Lösung präsentiert Wink

faltwert benötigst du auch nicht unbedingt und k sollte bei 1 beginnen

Code:

w = zeros(vFiltSig_size, 1 );

for k = 1:...
    for...
            w(k) = w(K) + (vSig(j)*vImpRes(k+1 - j));
 
Private Nachricht senden Benutzer-Profile anzeigen
 
NachtStille
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 12.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2012, 17:15     Titel:
  Antworten mit Zitat      
es klappt leider immer noch nicht:(

ps: die doku hab ich mir bereits mehrmals angeguckt und darauf basierend hab ich auch den code implementiert..aber anscheinend hab ich irgendwo n denkfehler:(
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: 12.07.2012, 17:20     Titel:
  Antworten mit Zitat      
Code:

m = length(v_Sig);
n = length(vImpRes);
....


for k=1:vFiltSig_size
    for j = max(1,k+1-n): min(k,m)
            w(k) = w(k) + ( vSig(j)*vImpRes(k+1 - j) );  
    end
end
 


Der Ausdruck für j wird in dem angesprochenen Satz angegeben Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
NachtStille
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 12.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2012, 17:50     Titel:
  Antworten mit Zitat      
Hallo 'Forum-Meister' DSP Smile
zuerst einmal vielen lieben Dank für die recht schnelle Hilfe! Der Output-vektor ist immerhin gewachsen und hat vier statt zwei richtige Werte! )) ab dem fünften Wert schmeißt er mir n exception.. ('index exceeds matrix dimensions')..
Code:
und
Code:
sind in diesem Fall 2 und 4. Doch was ist jetzt das Problem:-/ Hast Du mal den Code bei Dir kurz getestet?

Ich danke nochmals ganz herzlich! Smile
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: 12.07.2012, 17:53     Titel:
  Antworten mit Zitat      
Ich habe folgendes Bsp. getestet...aber da sind ja nur die Var.-namen anders.

Code:

u = [zeros(20,1); ones(100,1); zeros(20,1)];
v = [ones(40,1); zeros(10,1)];
m = length(u);
n = length(v);
w = zeros(m+n-1,1);

for k = 1 : m + n - 1
    for j = max(1,k+1-n): min(k,m)
        w(k) = w(k) + ( u(j) * v(k+1-j) );
    end
end

plot(w);
hold on;
w2 = conv(u,v);
plot(w2,'r--');
grid on;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
NachtStille
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 12.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2012, 18:07     Titel:
  Antworten mit Zitat      
man bin ich aber doof.. ich hatte die ganze zeit (keine ahnung warum:-/ )

Code:
for j=1: max(1,k+1-n):min(k,m)
(man beachte "1:"... Embarassed )

also nochmals vieeelen dank!
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.