Kết hợp thông tư MOD-N


7

Cách tìm tích chập Thông tư MOD-2 cho hai chuỗih=[1,3,2,1]x=[1,1,2,1,3,2,1,2].

Tôi biết câu trả lời là 7 0 từ MATLAB nhưng tôi không biết làm thế nào để tìm thấy nó bằng đồ họa hoặc toán học

Câu trả lời:


6

Viết h(z)=1+3z2z2+z3và tính , nghĩa là chia cho và chỉ lấy phần còn lại. Mặc dù điều này có vẻ rất phức tạp, nhưng nếu bạn nghĩ về nó một chút, bạn sẽ thấy rằng tất cả những gì bạn đang làm là chia thành và và thêm các vectơ ngắn hơn để có . Lặp lại cho để thêm bốn vectơ có độ dài để có được h(z)mod(z21)h(z)z21[13 21][13][21][34]x=[1 1 213212]2[34]. Điều này có lẽ không quá khó để thực hiện trong MATLAB mặc dù tôi không đủ quen thuộc với cú pháp để đề xuất các lệnh cụ thể. Tiếp theo, tính toán tích chập tuần hoàn của và mà không cần gọi các hàm MATLAB. Kết quả là [34][34]

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

Về mặt toán học, những gì bạn đang làm là tính toán có thể được thực hiện ngay từ đầu bằng cách tìm bằng cách sử dụng FFT và những gì bạn đã theo dõi (điều này thực sự cắt vectơ dài thành các đoạn ngắn và thêm chúng), hoặc đơn giản hơn bằng cách tính toán đầu tiên và (cắt thành các vectơ ngắn hơn và thêm chúng) và sau đó tính toán tích chập tuần hoàn rất dễ thực hiện.h(z)x(z)mod(z21)h(z)x(z)mod(z21)h^(z)=h(z)mod(z21)x^(z)=x(z)mod(z21)z^(z)x^(z)mod(z21)

Chop-add-confolve dễ hơn so với chập-chập-add


1
Matlab cho "chop add convolve" sẽ là: ifft (fft (sum (reshape (x, 2, length (x) / 2), 2)). * Comb (fft (sum (reshape (h, 2, length (h) ) / 2), 2))))
pichenettes

Cảm ơn bạn đã đề xuất mã Chop-add, nhưng tôi không đồng ý với ifft (phần fft. Phép tích hợp tuần hoàn của hai vectơ nên được tính trực tiếp mà không cần gọi fraft và tương tự. Begin hầu như không cần cơ chế chính thức của fraft và iffts. Modulo- đối với các giá trị lớn hơn của là một vấn đề khác, đối với Modulo- , đó là một sự quá mức.2
(a+bz)(c+dz)mod(z21)=(ac+(ad+bc)z+bdz2)mod(z21)=(ac+bd)+(ad+bc)z
NN2
Dilip Sarwate

có, thực hiện phép tích chập tròn với ifft (fft (). * const (fft ())) chỉ hữu ích cho một N.
pichenettes

1
@pichenettes Cách tiếp cận fft sẽ tính (fft), nhân , sau đó tìm tích chập kết quả là , bằng cách sử dụng hai mults, hai tỉ lệ, sáu bổ sung, trong khi tính toán trực tiếp cần bốn mults và hai add. Nếu được mã hóa trực tiếp, nó gần với một sự tung lên nhưng tôi nghĩ rằng phương pháp trực tiếp có một chút cạnh. Nếu các chi phí của các cuộc gọi chương trình con MATLAB được tính đến, phương pháp trực tiếp sẽ nhanh hơn. Nhưng tất nhiên, tất cả điều này là so sánh đậu phộng trong thời gian tính toán so với bất kỳ điều gì khác đang được thực hiện. a+b,ab,c+d,cde=(a+b)(c+d),f=(ab)(cd)(e+f)/2(ef)/2ac+bd,ad+bc
Dilip Sarwate

3

Một cách tiếp cận là "bọc lại" một tổ hợp tròn có kích thước đầy đủ:

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

Một cách thực hiện khác là trực tiếp xác định FFT:

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))

Nếu những gì bạn muốn sao chép là hành vi của cconv từ matlab thì tốt nhất bạn chỉ nên xem mã nguồn của nó trong các tệp matlab :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.