Selama konvolusi pada sinyal, mengapa kita perlu membalik respon impuls selama proses?
Selama konvolusi pada sinyal, mengapa kita perlu membalik respon impuls selama proses?
Jawaban:
Diadaptasi dari jawaban untuk pertanyaan yang berbeda (sebagaimana disebutkan dalam komentar) dengan harapan bahwa pertanyaan ini tidak akan dilontarkan berulang kali oleh Komunitas Wiki sebagai salah satu Pertanyaan Top ....
Tidak ada "membalik" respon impuls oleh sistem linear (time-invariant). Output dari sistem linear time-invariant adalah jumlah versi impuls yang diskalakan dan tertunda waktu, bukan respons impuls "terbalik".
Kami memecah sinyal input menjadi jumlah sinyal pulsa unit yang diskalakan. Respons sistem terhadap sinyal pulsa unit adalah respons impuls atau respons pulsa
Demikian pula, nilai input tunggal atau menciptakan x [ 1 ] ( ⋯ , 0 , 0 , menciptakan respons 0 , x [ 1 ] h [ 0 ] , x [ 1
Apa output pada waktu ?
maka Anda bisa mendapatkan jawabannya dengan menjumlahkan kolom ke - untuk mendapatkan y [ n ] formula konvolusi tercinta yang membingungkan generasi siswa karena respon impuls tampaknya "terbalik" atau berjalan mundur dalam waktu. Tapi, apa yang tampaknya dilupakan orang adalah bahwa alih-alih kita bisa menulis y [ n ]
Berikut adalah contoh C / C ++ yang menunjukkan bahwa konvolusi dapat dilakukan tanpa menggunakan respons impuls secara terbalik. Jika Anda memeriksa convolve_scatter()
fungsi, tidak ada variabel yang dinegasikan di mana pun. Ini hamburan konvolusi mana setiap sampel masukan tersebar (dijumlahkan) ke beberapa sampel output dalam memori, menggunakan bobot yang diberikan oleh respon impulse. Ini boros karena sampel keluaran perlu dibaca dan ditulis beberapa kali.
Biasanya konvolusi dilakukan sebagai pengumpulan konvolusi, seperti pada convolve_gather()
. Dalam metode ini, setiap sampel keluaran dibentuk secara terpisah, dengan mengumpulkan (menjumlahkan) untuk memasukkan sampel, dengan respon impuls terbalik sebagai bobot. Sampel output berada di register prosesor yang digunakan sebagai akumulator saat ini dilakukan. Ini biasanya merupakan metode pilihan, karena hanya akan ada satu memori tulis per setiap sampel yang difilter. Sekarang ada lebih banyak memori yang dibaca dari input, tetapi hanya sebanyak yang ada memori yang dibaca dari output dalam metode hamburan.
#include <stdio.h>
const int Nx = 5;
const int x[Nx] = {1, 0, 0, 0, 2};
const int Ny = 3;
const int y[Ny] = {1, 2, 3};
const int Nz = Nx+Ny-1;
int z[Nz];
void convolve_scatter() { // z = x conv y
for (int k = 0; k < Nz; k++) {
z[k] = 0;
}
for (int n = 0; n < Nx; n++) {
for (int m = 0; m < Ny; m++) {
z[n+m] += x[n]*y[m]; // No IR reversal
}
}
}
void convolve_gather() { // z = x conv y
for (int k = 0; k < Nz; k++) {
int accu = 0;
for (int m = 0; m < Ny; m++) {
int n = k+m - Ny + 1;
if (n >= 0 && n < Nx) {
accu += x[n]*y[Ny-m-1]; // IR reversed here
}
}
z[k] = accu;
}
}
void print() {
for (int k = 0; k < Nz; k++) {
printf("%d ", z[k]);
}
printf("\n");
}
int main() {
convolve_scatter();
print();
convolve_gather();
print();
}
Ini melingkupi urutan:
1 0 0 0 2
1 2 3
dan menggunakan kedua metode metode konvolusi:
1 2 3 0 2 4 6
Saya tidak dapat membayangkan siapa pun menggunakan metode hamburan, kecuali filternya berbeda-beda waktu, dalam hal ini kedua metode akan menghasilkan hasil yang berbeda dan satu mungkin lebih tepat.
Ini hanya 'dibalik' untuk perhitungan yang searah.
@Dilip menjelaskan apa integral / penjumlahan konvolusi mewakili, tetapi untuk menjelaskan mengapa salah satu dari dua fungsi input (sering h(t)
) dibalik untuk tujuan perhitungan, pertimbangkan sistem waktu-diskrit dengan input x[n]
dan respons impuls h[n]
:
Anda dapat mengambil fungsi input Anda x[n]
, dan untuk setiap sampel yang bukan nol * x[n]
hitung respons impuls yang diskalakan dari sampel n
dan terus sampai waktu yang dialihkan h[n]
turun ke nol (dengan asumsi sebab-akibat h[n]
). Ini tidak melibatkan 'membalik' (atau lebih tepatnya 'pembalikan waktu') dari salah satu x[n]
atau h[n]
. Namun, pada akhirnya Anda harus menambahkan / menumpangkan semua 'gema' skala + yang digeser dari respons impuls untuk setiap yang bukan nol x[n]
.
Atau , untuk kenyamanan Anda dapat membalikkan waktu salah satu fungsi tentang asal waktu (biasanya 0), membuat perhitungan Anda {multiply, add, multiply, add, ...} alih-alih {multiply, multiply, ..., add , tambahkan, ...}. Ini menghasilkan sinyal keluaran yang sama karena akan melakukan penggandaan yang sama persis dan menambah operasi. Sebagai contoh, pikirkan tentang kontribusi output dari sinyal input bukan nol pada waktu 0 x[0]
. Kapan k
= 0 untuk persamaan
h[n]
x[n]
, yaitu x[0]h[0]
. Kemudian, peningkatan k
satu akan bergeserh[n]
ke kanan satu langkah waktu, sehingga h[n]
entri kedua yang terbalik waktu ( h[1]
) sekarang akan diletakkan di atas x[0]
, menunggu untuk dikalikan. Ini akan menghasilkan kontribusi yang diinginkan x[0]h[1]
pada waktunya n=1
, sama seperti yang telah dilakukan dalam metode sebelumnya.* Saya katakan non-nol x[n]
karena
h[n]
y[n]
Pada indeks c [n], konvolusi a [n] dan b [n], sedemikian rupa sehingga:
"c [n] adalah penjumlahan dari semua produk (a [k] b [m]) sedemikian sehingga m + k = n," jadi m = n - k atau k = n - m, yang berarti bahwa salah satu urutan harus dibalik.
Sekarang mengapa konvolusi berperilaku seperti ini pada awalnya? Karena hubungannya dengan penggandaan polinomial.
Mengalikan dua polinomial menghasilkan polinomial baru dengan koefisiensi. Koefisien dari polinomial produk menentukan operasi konvolusi. Sekarang, dalam pemrosesan sinyal, fungsi transfer - Transformasi Laplace atau z-transform adalah polinomial ini, dengan masing-masing co-efisien sesuai dengan penundaan waktu yang berbeda. Menyesuaikan koefisien produk dan multiplikasi menghasilkan fakta bahwa 'penggandaan dalam satu representasi sesuai dengan konvolusi dalam representasi yang diubah'.
Selama konvolusi, tidak ada "flip" dari respon impuls yang perlu terjadi sama sekali ...
Namun, jika Anda ingin mencegah perubahan fasa apa pun, Anda dapat membelit sinyal dengan respons impuls dan kemudian membalikkan respons impuls dan memutar kembali untuk membatalkan efek fase.
Dalam pemrosesan offline, Anda dapat dengan mudah membalikkan sinyal setelah konvolusi pertama untuk mendapatkan kesimpulan yang sama (seperti yang disarankan komentar).