Matlab-Code zum Ableiten der Gesamtdifferenzgleichung zwischen zwei Systemen

Mit Matlab versuche ich:

  • Holen Sie sich die Gesamtdifferenzgleichung in Bezug auf z[n] bis x[n] und prüfen Sie, ob
  • z[n] = x[n] ist eine gültige Lösung der Gesamtdifferenzengleichung

Ich habe zwei Signale, die durch die Differentialgleichungen gegeben sind:

  • z[n] + az[n−N] = y[n]
  • y[n] = x[n] + ax[n−N]

Wobei x[n] ein unverfälschtes Sprachsignal ist, das um N Abtastwerte verzögert und mit einer um a < 1 verringerten Amplitude wieder hinzugefügt wurde. Außerdem ist N = 1000 und die Echoamplitude a = 0,5.

Was ich zu diesem Zeitpunkt habe:

% z[n] + az[n - N] = y[n]
% y[n] = x[n] + ax[n - N]

% Replacing:
% z[n] + az[n - N] = x[n] + a[n - N]
% z[n] = x[n] + a[n - N] - az[n - N]

syms z(n) % z[n] = dz/dn
syms x(n)

ode = diff(z,n) == ??

Aber ich stecke fest, wie soll ich den Teil x[n] hinzufügen.

Wie zeige ich, dass diese Gleichungen äquivalent sind?

Wie gewünscht füge ich weitere Informationen zu dieser allgemeinen Frage hinzu:

Ich verwende eine Sprache, die mit einer Abtastrate von 8192 Hz aufgenommen wurde (ich kann die Sprache hören, indem ich sound(y,8192) eintippe). Das Signal y[n], dargestellt durch den Vektor y, hat die Form:

y[n] = x[n] + ax[n−N] (1)

wobei x[n] das unverfälschte Sprachsignal ist, das um N Abtastwerte verzögert und mit einer um a < 1 verringerten Amplitude wieder hinzugefügt wurde. Dies ist ein vernünftiges Modell für ein Echo, das aus dem Signal resultiert, das von einer absorbierenden Oberfläche wie einer Wand reflektiert wird.

Für die Aufgaben in dieser Übung verwende ich den Wert der Echozeit, N= 1000, und der Echoamplitude, a= 0,5.

Meine erste Aufgabe und auch meine Frage hier war, das Echo durch lineare Filterung zu entfernen. Da das Echo durch ein lineares System der Form Gl. (1) Ich habe die Impulsantwort des Echosystems Gl. (1). Diese Impulsantwort habe ich im Vektor he für 0≤n≤1000 gespeichert.

Jetzt muss ich ein Echoentfernungssystem betrachten, das durch die Differenzgleichung beschrieben wird

z[n] +az[n−N] = y[n] (2)

wobei y[n] die Eingabe und z[n] die Ausgabe ist, bei der das Echo entfernt wurde. Ich muss die Gesamtdifferenzgleichung ableiten, die z[n] mit x[n] in Beziehung setzt, und prüfen, ob z[n] = x[n] eine gültige Lösung für die Gesamtdifferenzgleichung ist.

Mein ganzer Code an dieser Stelle ist:

% Testing the input:
sound(y,8192)


    %% Part A:
    % create the impulse response
    M = 1; % MATLAB indexing offset
    N = 1000;
    h = zeros(1001,1); 
    h(M+0) = 1;
    h(M+1000) = 1;
    stem(h);
    he = h;

    %% Part B:
    % z[n] + az[n - N] = y[n]
    % y[n] = x[n] + ax[n - N]

    % Replacing:
    % z[n] + az[n - N] = x[n] + a[n - N]
    % z[n] = x[n] + a[n - N] - az[n - N]

    syms z(n) % z[n] = dz/dn
    syms x(n)

    ode = diff(z,n) == 
Entschuldigung, aber ich habe Ihren Text ein paar Mal gelesen und kann immer noch nicht ganz verstehen, was Sie zu tun versuchen. Könnten Sie weitere Informationen hinzufügen und ein wenig klären? Wenn Sie x (das Sprachsignal) haben, berechnen Sie auch etwas y_1 und vergleichen das mit etwas? Haben Sie einige y_2, die durch ein anderes Signal der Differenzgleichung erzeugt wurden? Könnten Sie abschließend mehr von Ihrem Code posten?
@jDAQ , habe gerade weitere Informationen hinzugefügt. Ich hoffe, dass es besser erklärt.
Ich schlage vor, in Ihrer Erklärung einen Schritt zurückzutreten und auf einer ziemlich hohen Abstraktion zu bleiben. Es sind viel zu viele Informationen :) - Zeichnen Sie den Signalpfad. (1) Rohdaten> (2) Echosignal> (3) Echoentfernung> (4) Signale vergleichen? Es ist, als würde man ein DSP-Buch lesen, viel zu viele Gleichungen / Rauschen, nur um es gut aussehen zu lassen.

Antworten (2)

Sicher:

z [ N ] + A z [ N N ] = j [ N ]

nehmen wir nun die obige Gleichung und ersetzen x[n]=z[n]

X [ N ] + A X [ N N ] = j [ N ]

was genau wie die andere Gleichung aussieht, also sind sie äquivalent

Es ist wirklich nicht klar, was Sie hier fragen.

Sie haben ein Signal y, das x plus ein Echo darstellt:

  • y[n] = x[n] + ax[nN]

Sie verarbeiten dann y durch den folgenden rekursiven Filter, um zu versuchen, das Echo zu entfernen.

  • z[n] = y[n] - az[nN]

Die Frage ist, ob z[n] für alle n mit x[n] übereinstimmt.

Sie können die zweite Gleichung neu anordnen, um sie nach y aufzulösen

  • y[n] = z[n] + az[nN]

Da diese genau die gleiche Form wie die erste Gleichung hat, muss die Antwort auf die Frage "ja" lauten.

Jetzt wollen Sie dies demonstrieren, indem Sie die Punkt-für-Punkt-Berechnung in Matlab durchführen. Führen Sie einfach die durch die ersten beiden Gleichungen beschriebene Berechnung durch und vergleichen Sie z[n] mit x[n].

Es kann sich für Sie lohnen, zunächst ein einfaches Beispiel von Hand zu erarbeiten, anstatt direkt in Matlab zu springen. Generieren Sie einen Satz von zehn zufälligen ganzen Zahlen, um Ihr Signal x darzustellen, und verwenden Sie einen Echowert (N) von beispielsweise 3. Wenn Sie alle erforderlichen Schritte verstanden haben, sollte das Schreiben des Matlab-Codes einfach sein.