MOD-N Kreisfaltung


7

So finden Sie die MOD-2- für die beiden Sequenzen und .h=[1,3,2,1]x=[1,1,2,1,3,2,1,2]

Ich weiß, dass die Antwort von matlab 7 0 aber ich weiß nicht, wie ich sie grafisch oder mathematisch finden kann

Antworten:


6

Schreiben Sie h(z)=1+3z2z2+z3 und berechnen Sie h(z)mod(z21) , dh teilen Sie h(z) durch z21 und nehmen Sie nur der Rest. Dies sieht zwar sehr kompliziert aus, aber wenn Sie ein wenig darüber nachdenken, werden Sie feststellen, dass Sie nur [-1 \ quad3 \ -2 \ quad 1][13 21] in [13] und [-2 \ quad 1 ] teilen ][21] und Addieren der kürzeren Vektoren, um [34] . Wiederholen Sie diesen Vorgang für x=[1 1 213212] , um vier Vektoren der Länge 2 zu addieren und [34]. Dies ist in MATLAB vermutlich nicht allzu schwierig, obwohl ich mit der Syntax nicht vertraut genug bin, um bestimmte Befehle vorzuschlagen. Berechnen Sie als nächstes die zyklische Faltung von [34] und [34] vorzugsweise ohne MATLAB-Funktionen aufzurufen. Das Ergebnis ist

[{(- -3)×3+4×4}}{(- -3)×4+4×3}}]]=[70]]

Mathematisch gesehen berechnen Sie was Sie sich vorstellen können, indem Sie zuerst mithilfe von FFTs finden und was Sie gefolgt von -Berechnung (dies zerlegt den langen Vektor effektiv in kurze Stücke und fügt sie hinzu) oder einfacher, indem zuerst berechnet wird und (das Zerlegen in kürzere Vektoren und deren Addition) und anschließende Berechnung der zyklischen Faltung was einfach zu tun ist.h(z)x(z)mod(z2- -1)h(z)x(z)mod(z2- -1)h^(z)=h(z)mod(z2- -1)x^(z)=x(z)mod(z2- -1)z^(z)x^(z)mod(z2- -1)

Chop-Add-Convolve ist einfacher als Convolve-Chop-Add


1
Matlab für "chop add convolve" wäre: ifft (fft (Summe (Umformung (x, 2, Länge (x) / 2), 2)). * Conj (fft (Summe (Umformung (h, 2, Länge (h)) ) / 2), 2))))
Pichenettes

Vielen Dank, dass Sie den Chop-Add-Code vorgeschlagen haben, aber ich bin mit dem ifft (fft-Teil nicht einverstanden. Die zyklische Faltung von zwei Längen- Vektoren sollte direkt berechnet werden, ohne ffts und dergleichen aufzurufen. Begin benötigt kaum den formalen Mechanismus von ffts und iffts. Modulo- für größere Werte von ist eine andere Sache, für Modulo- ist es ein Overkill.2
(ein+bz)(c+dz)mod(z2- -1)=(einc+(eind+bc)z+bdz2)mod(z2- -1)=(einc+bd)+(eind+bc)z
N.N.2
Dilip Sarwate

ja, tut das Kreiskonvolution mit IFFT (fft () * conj (fft ()).) ist nur sinnvoll für eine größere N.
pichenettes

1
@pichenettes Der fft-Ansatz würde (fft) berechnen, multiplizieren und dann die Faltung finden Ergebnis als , Verwendung von zwei Mults, zwei Skalierungen, sechs Adds, während die direkte Berechnung vier Mults und zwei Adds benötigt. Wenn es direkt codiert wird, ist es fast ein Wurf, aber ich denke, die direkte Methode hat einen leichten Vorteil. Wenn der Overhead von MATLAB-Unterprogrammaufrufen berücksichtigt wird, ist die direkte Methode schneller. Aber all dies ist natürlich ein Vergleich der Erdnüsse in der Rechenzeit mit allem anderen, was getan wird. ein+b,ein- -b,c+d,c- -de=(ein+b)(c+d),f=(ein- -b)(c- -d)(e+f)/.2(e- -f)/.2einc+bd,eind+bc
Dilip Sarwate

3

Ein Ansatz besteht darin, eine kreisförmige Faltung in voller Größe "neu zu verpacken":

sum(reshape(ifft(fft(x, 8) .* conj(fft(h, 8))), 2, 8 / 2), 2)

Eine andere Implementierung besteht darin, die FFT direkt zu dezimieren:

N = 2;
Xf = fft(x); Xf = Xf(1:length(Xf) / N:end);
Hf = fft(h); Hf = Hf(1:length(Hf) / N:end);
ifft(Xf .* conj(Hf))

Wenn Sie das Verhalten von cconv aus matlab reproduzieren möchten, ist es möglicherweise am besten, sich nur den Quellcode in den matlab-Dateien anzusehen :)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.