Cách tạo bộ lọc bù méo


11

Tôi đang tạo một bộ tạo kênh bao gồm bộ trộn phức tạp, bộ giải mã CIC và bộ lọc bù / số thập phân FIR. Bộ lọc FIR cuối cùng có thể, nếu có vấn đề, được triển khai dưới dạng nhiều bộ lọc.

Câu hỏi của tôi là, làm cách nào để thiết kế bộ lọc sao cho bù cho đáp ứng tần số không phẳng của bộ lọc CIC? Bạn có tạo đáp ứng tần số mà bạn muốn bằng cách tính toán đối ứng của phản hồi của CIC và sau đó chạy nó qua FFT nghịch đảo để có được đáp ứng xung không?

Như bạn có thể thấy, mặc dù vấn đề cụ thể của tôi liên quan đến các bộ lọc CIC, câu hỏi của tôi thực sự là về cách bạn tạo bất kỳ loại bộ lọc bù méo nào.

Cảm ơn vì đã dành thời gian cho tôi.


3
Một bộ lọc có mục đích bù cho sự biến dạng sớm hơn trong hệ thống truyền thông thường được gọi là bộ cân bằng ; điều đó có thể cung cấp cho bạn thêm một số thông tin để đọc trong lúc này. Các loại phổ biến là bộ cân bằng cưỡng bức bằng không (không phải là thứ bạn muốn nếu hệ thống bạn bù có số không trong đáp ứng tần số của nó) và bộ cân bằng lỗi bình phương trung bình (MMSE) tối thiểu.
Jason R

@JasonR Tôi quen thuộc với Bộ cân bằng thích ứng MMSE trong bối cảnh các bộ cân bằng theo hướng quyết định bù kênh, nhưng tôi nghi ngờ đó là ý của bạn. Bạn sẽ đào tạo bộ cân bằng nào đó? Tôi đoán mấu chốt là cách bạn xác định lỗi là gì.
Jim Clay

MMSE chỉ đề cập đến tiêu chí mà bộ cân bằng phấn đấu; nó có thể thích nghi hoặc không thích nghi. Nếu bạn biết hàm truyền của hệ thống để bù và hàm tự tương quan của bất kỳ nhiễu phụ gia nào và cả hai đều bất biến theo thời gian, thì bạn có thể lấy được "bộ cân bằng MMSE, sẽ được cố định theo thời gian. Các giải pháp thích ứng có thể được sử dụng khi thông tin đó không được biết chính xác hoặc nó thay đổi theo thời gian (điều này khá phổ biến).
Jason R

Các bộ lọc thích ứng thường bao gồm một chế độ đào tạo trong đó một số ký hiệu đã biết được truyền qua hệ thống, cho phép người nhận để bộ lọc của nó hội tụ trên một hệ số tốt. Sau khi đào tạo, việc nhập một giai đoạn theo dõi, trong đó hoạt động theo quyết định được sử dụng để cập nhật liên tục các vòi lọc. Thay vào đó, trong một chế độ mà SNR và ISI là "đủ tốt", chế độ hướng quyết định có thể được sử dụng ngay từ đầu như một kế hoạch mua lại mù quáng, bỏ qua giai đoạn huấn luyện.
Jason R

Tìm tài liệu đọc về chủ đề này có thể truy cập toán học là hơi khó. Tôi thích Lý thuyết bộ lọc thích ứng của Haykin , nhưng phải mất một số nỗ lực để vượt qua toán học (và bạn cần một số nền tảng đại số tuyến tính vững chắc). Nó đủ phức tạp để nếu bạn không sử dụng nó thường xuyên, trước tiên bạn sẽ cần tiếp tục tìm hiểu về các chủ đề xử lý tín hiệu thống kê.
Jason R

Câu trả lời:


9

Sau đây giải quyết vấn đề bồi thường CIC và không phải là một kỹ thuật "bóp méo" chung. Nhưng nó là một phương pháp đơn giản để "bù đắp" "biến dạng" không thay đổi. Nếu đáp ứng tần số được biết thì nghịch đảo của tần số có thể được sử dụng để bù. Các ví dụ như bộ lọc CIC, trong đó bộ lọc kém có thể được sử dụng do độ phức tạp giảm, sẽ được bù sau chuỗi tín hiệu. Trong ví dụ này, đáp ứng tần số là biết và nghịch đảo có thể được sử dụng. Lưu ý, với các bộ lọc đa tốc độ, bạn chỉ muốn sử dụng phổ "có thể sử dụng" sau khi giảm.

Nói chung, để bù cho bộ lọc CIC, có thể sử dụng nghịch đảo của phản ứng bộ lọc CIC để tạo bộ lọc bù. CIC có phản hồi (xem tài liệu tham khảo [r2] hoặc [r3])

H(ω)=|sin(ωD/2)sin(ωM/2)|N

Trong đó D là độ trễ phân biệt, M là tốc độ giảm dần và N là thứ tự bộ lọc (số lượng bộ lọc xếp tầng). Nghịch đảo có thể được chỉ định là

H(ω)=|sin(ωM/2)sin(ωD/2)|N

Khi chúng tôi có đáp ứng tần số của bộ lọc bù, chúng tôi chỉ cần chọn độ dài của bộ lọc FIR mà chúng tôi mong muốn. Độ dài của FIR là ứng dụng cụ thể. Rõ ràng bộ lọc FIR càng dài thì bù càng tốt.

Sau đây là các lô của bồi thường thẳng về phía trước này.

Sau đây là mã Python để tạo ra các đáp ứng tần số và âm mưu.

import numpy as np
from numpy import sin, abs, pi
import pylab

D = 1; M = 7; N = 3

Hfunc = lambda w : abs( (sin((w*M)/2)) / (sin((w*D)/2.)) )**N
HfuncC = lambda w : abs( (sin((w*D)/2.)) / (sin((w*M)/2.)) )**N

w = np.arange(1024) * pi/1024

G = (M*D)**N
H = np.array(map(Hfunc, w))
Hc = np.array(map(HfuncC, w))
# only use the inverse (compensation) roughly to the first null.
Hc[int(1024*pi/M/2):] = 1e-8
plot(w, 20*log10(H/G))
plot(w, 20*log10(Hc*G))
grid('on')

Xem [r1] để biết các cách tiếp cận khác và xấp xỉ .sinc1

[r1] Altera, "Tìm hiểu về bộ lọc bù CIC"

[r2] R. Lyons, "Tìm hiểu về xử lý tín hiệu số", tái bản lần thứ 2, Hội trường Prentice, Thượng Yên River, New Jersey, 2004

[r3] R. Lyons, "Tìm hiểu bộ lọc tích hợp xếp tầng"


Ref 1 là tuyệt vời, nhưng sử dụng thuật ngữ khác nhau (M = độ trễ giai đoạn, nơi bạn đã sử dụng D. R = Tốc độ giảm, nơi bạn đã sử dụng M) nên tôi phải mất một lúc để xem lỗi: bạn sử dụng WM / 2, Altera chỉ định pi F / R. Sau một âm mưu Excel nhanh, tôi tin rằng phiên bản Altera là phiên bản chính xác.
Alan Campbell

@AlanCampbell Nếu bạn vẽ các phương trình trên (mà tôi đã làm trong đoạn mã), bạn sẽ thấy không có lỗi. Những gì tôi đã không gọi rõ ràng trong các phương trình là lợi ích . Thông báo trong đoạn mã snip tôi loại bỏ mức tăng. Nếu bạn chạy mã snip và sửa đổi M=8N=9nó tạo ra các ô giống như tham chiếu 1. Tôi đã sử dụng danh pháp gần hơn với tham chiếu 2.
Christopher Felton

2

Tôi nghĩ câu trả lời của Christopher là một câu hỏi hay. Tôi nghĩ rằng tôi sẽ thêm một loại cho chúng tôi loại lười biếng / gian lận.

Trong khi đào xung quanh fdatool của Matlab (Công cụ phân tích & thiết kế bộ lọc) tôi phát hiện ra rằng nó có thể thiết kế và mô hình hóa cả bộ lọc CIC và bộ lọc ngược, trong đó bộ lọc chân ngược là bộ lọc bù méo của CIC.

Bạn tạo bộ lọc CIC bằng cách truy cập thẳng vào trang "Tạo bộ lọc đa tốc độ" (nút bên trái trong phiên bản R2011b) và chỉ định bộ lọc CIC. Sau đó, bạn có thể đặt tất cả các tham số mà bạn muốn trên đó, chẳng hạn như tốc độ nội suy / số thập phân, số lượng tầng (Matlab gọi đó là "phần"), v.v.

Bạn tạo bộ lọc chân nghịch đảo bằng cách truy cập trang "Bộ lọc thiết kế" (trang mà công cụ mặc định khi nó khởi động) và chỉ định "Inverse Sinc Lowpass" từ menu thả xuống Lowpass. Sau đó bạn có thể đặt các tham số khác nhau cho nó. Nó có một vài tham số duy nhất trong phần Tùy chọn của hộp thoại, bao gồm "p", tương ứng với số tầng (số mũ chân thành).

Mặc dù vậy, thiết kế bộ lọc chân thành ngược lại không hoàn toàn thỏa mãn, vì làm cho nó đúng dường như không phải là một ví dụ của việc làm toán hơn là tìm ra dải thông của tôi ở đâu, cái gì của CIC rơi vào thời điểm đó, và sau đó thiết kế một bộ lọc gần như đã bị hủy ra mà rủ xuống. Vì bộ lọc CIC của tôi có bốn tầng, tôi đã nghĩ rằng tôi sẽ cần đặt "p" thành bốn, nhưng nó đã được bù quá mức khi tôi làm điều đó. Tôi đã kết thúc để lại "p" tại 1, giá trị mặc định.

Công cụ thực sự tỏa sáng khi tôi lưu cả hai bộ lọc trong phiên của mình và sau đó đi vào trình quản lý bộ lọc và xếp tầng để xem đáp ứng tần số chung. Điều này rất hữu ích và dễ làm.


0

Không lặp lại phản hồi ở đây, vui lòng xem

Cách tạo bộ lọc bù CIC

trong đó cho thấy một giải pháp 3 vòi rất đơn giản để bù CIC.

Điều này là dành riêng cho CIC hoặc bất kỳ ứng dụng nào cho một nghịch đảo được yêu cầu (chẳng hạn như trước khi chuyển đổi D / A).

Để bù cho bất kỳ biến dạng ngang nào (có thể được sao chép bằng bộ lọc chuyển đổi ngược với méo nhiễu động), tôi sẽ sử dụng phương pháp sử dụng phương trình Wiener Hopf để đưa ra bộ lọc bù bằng cách sử dụng phương pháp Least Squared Error, lý tưởng nhất sử dụng trình tự đào tạo nếu có sẵn để so sánh mong muốn với phản ứng thực tế và huấn luyện bộ cân bằng. Đối với một ứng dụng hiển thị điều này với mã nguồn được sử dụng, xem:

Bù đáp ứng tần số loa trong tín hiệu âm thanh

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.