Berechnung der Faltung mit matlab - matlab

Ich möchte die Faltung der folgenden Gleichung berechnen. $$ x [n] = sin {frac {n * pi} {6}} (u [n] - u [n-12]) $$ Ich bin auf die folgende Codezeile gekommen:

>> stem(5, y);
>> plot(n, y);
>> syms n
>> u = int(exp(-x)*heaviside(x), x, -Inf, Inf);
>> a = sin((n*pi)/6);
>> x = a*(u -u[n-12]);

Die letzte Zeile gibt mir jedoch einen Fehler. DarĂĽber hinaus habe ich Probleme, herauszufinden, wie ich diese Gleichung verwenden wĂĽrde, um die Windungen fĂĽr die Darstellung von $ y [n] $ in MATLAB herauszufinden. Ich weiĂź, den Befehl zu verwenden conv aber ich bin nicht in der Lage herauszufinden, wie. Ich definiere $ h [n] = delta [n-3] $ und verwende $ y [n] = x [n] * h [n] $ als meine Gleichung.

Antworten:

1 fĂĽr Antwort â„– 1

Angenommen, wir haben Vektoren:

u = [1 2 1];
v = [1 1 0 0 0  2 ];

also fĂĽr $ x [n] = u [n] ast v [n] $, wenn die Vektoroperationen aufgeschlĂĽsselt sind

x [0] = 1 * 1
x [1] = 1 * 2 + 1 * 1
x [2] = 1 * 1 + 1 * 2 + 0 * 1
x [3] = 1 * 1 + 0 * 2 + 0 * 1
x [4] = 0 * 1 + 0 * 2 + 0 * 1
x [5] = 0 * 1 + 0 * 2 + 2 * 1
x [6] = 0 * 1 + 2 * 2
x [7] = 2 * 1

oder ohne Polsterung:
x [0] = 0 * 1 + 0 * 2 + 1 * 1
x [1] = 0 * 1 + 1 * 2 + 1 * 1
x [2] = 1 * 1 + 1 * 2 + 0 * 1
x [3] = 1 * 1 + 0 * 2 + 0 * 1
x [4] = 0 * 1 + 0 * 2 + 0 * 1
x [5] = 0 * 1 + 0 * 2 + 2 * 1
x [6] = 0 * 1 + 2 * 2 + 0 * 1
x [7] = 2 * 1 + 0 * 2 + 0 * 1

Beachte das 1) Der x-Vektor ist größer als u und v sowie für die Startoperationen 2) In den Start- und Endfällen müssen Sie mit Nullen auffüllen
wenn

u = [1 2 1];
v = [0 0 1 1 0 0 0 2 0 0 ];
x = conv(u,v)
x = [0 0 1 3 3 1 0 2 4 2 0 0]; % result for x

oder

v =[0 0 0 1 1 0 0 0 2 0 0 0];
x = conv(u,v)
x = [0 0 0 1 3 3 1 0 2 4 2 0 0 0]; % result for x

Es macht einen Unterschied in der Vektorgröße, wenn es Nullen gibt, aber nicht die Werte, die verschachtelt sind. Dies wird als Null-Auffüllung bezeichnet. Bei Faltung müssen Sie die Kantenfälle behandeln.

(Denken Sie auch daran, dass das Matlab-Element Null bei Eins beginnt. Ich habe die mathematische Notation mit dem ersten Vektorelement verwendet, das bei Null beginnt.)

Warum erzähle ich dir das?

denn wenn du auf einem computer die faltung machstKantenfälle können verwirrend sein. wenn Sie diesen Vorgang ausführen x = a * (u -u [n-12]); und wenn Sie nach u [n-12] fragen, das matlab verwenden soll, ist u [-11] für den ersten Wert des Arrays und im Speicher, der für dieses Array nicht vorhanden ist Kantenfälle sind für die Faltung unterschiedlich.

Ich gebe ein Beispiel fĂĽr x [n] = u [n] + u [n-3]:

 u = [ 1 2 3 4 5 6 ];
x = u + [u(3:6) 0 0 ];

Lies jetzt