Làm thế nào để đi từ Matlab đến Filter?


7

Tôi thiết kế bộ lọc trong Matlab bằng cách sử dụng các lệnh sau:

Fs = 2.5*10^10;
n = 2;
Wn = 5000/Fs;
[b,a] = butter(n,Wn);

và lấy

b={9.86988268891764e-14, 1.97397653778353e-13, 9.86988268891764e-14}
a={1, -1.99999911142341, 0.999999111423807}

Làm thế nào để tôi thực hiện một tương tự?

http://en.wikipedia.org/wiki/Butterworth_filter

Câu trả lời:


11

Đầu tiên, bạn có thể thiết kế bộ lọc kỹ thuật số của bạn không chính xác. Bạn đã sử dụng Wn = 5000/Fs, nhưng tham số Wn kỹ thuật số muốn có một số từ 0 đến 1, trong đó 1 là Fs / 2, do đó, thông thường bạn sẽ nói, đối với bộ lọc 5000 Hz, điều đó Wn = 5000/(Fs/2).

Giả sử đây là những gì bạn muốn nói, bạn muốn thiết kế bộ lọc thông thấp Butterworth tương tự bậc 2 với tần số cắt là 5000 Hz.

Đầu tiên, sử dụng [b,a] = butter(n,Wn,'s')để có được đầu ra trong miền tương tự thay vì miền z kỹ thuật số.

[b, a] = butter (n, Wn, 's') thiết kế một bộ lọc Butterworth tương tự bậc thấp với tần số cắt góc Wn rad / s. Nó trả về các hệ số bộ lọc theo chiều dài n + 1 vectơ hàng b và a, với quyền hạn giảm dần của s, xuất phát từ hàm truyền này: nhập mô tả hình ảnh ở đây

Nếu bạn muốn tần số cắt là 5 kHz (= 2π⋅5000 radian / s), hãy sử dụng butter(2,2*pi*5000,'s'), ví dụ. Trong GNU Octave tôi nhận được:

> [b, a] = butter(2,2*pi*5000,'s')
b = 9.8696e+008
a = 1.0000e+000  4.4429e+004  9.8696e+008

Vì vậy, chức năng chuyển sẽ là

H(S)= =9.8696×10số 8S2+4.4429×104S+9.8696×10số 8

Các bộ lọc Butterworth luôn bao gồm các cực N được sắp xếp theo hình bán nguyệt xung quanh bên trái của vòng tròn đơn vị (và bạn thực sự có thể thiết kế nó trực tiếp theo cách này). Điều này có 2 cực ở-22214,4 ± 22214,4j. Để tạo bộ lọc thực tế, bạn nhóm các cặp liên hợp phức tạp thành các phần bậc 2 và xây dựng bộ lọc biquad cho mỗi bộ. Trong trường hợp của bạn, đây đã là một phần thứ tự duy nhất, vì vậy bạn chỉ cần một bộ lọc.

Sau đó, bạn ánh xạ nó tới một mạch, như một trong số đó: http://en.wikipedia.org/wiki/Butterworth_filter#Filter_design

nhập mô tả hình ảnh ở đây

Điện kháng của tụ là và cuộn cảm là , vì vậy hàm truyền là1CSLS

H(S)= =Vobạnt(S)VTôin(S)= =1C1SR2L1S+R1+1C1SR2= =R2CL1R2S2+(CR1R2+L1)S+(R2+R1)

Vì thế

  • Tử số:
    • R2 = 9.8696e + 008 = 987 MΩ
  • Mẫu số:
    • C * L1 * R2 = 1
    • C * R1 * R2 + L1 = 4.4429e + 004
    • R2 + R1 = 987 MΩ

Vậy thì R1 = 0 và L1 = 44,4 kH ?? và C = 22,8 fF ?? ... Ôi trời, tôi không nhớ thứ này.

Trên thực tế ... mặc dù những giá trị này hoàn toàn điên rồ, nhưng chúng hoạt động trong một mô phỏng.

Vì vậy, sau đó bạn có thể chia tỷ lệ tất cả các giá trị đồng thời thành các giá trị hợp lý hơn. Nhân tụ điện với một số giá trị, và chia cuộn cảm và điện trở cho cùng một giá trị để giữ cho bộ lọc giống nhau. Chẳng hạn, nhân với 1 triệu sẽ đưa chúng ta vào một phạm vi hợp lý hơn:

  • C = 22,8 fF * 1000000 = 22,8 nF
  • R2 = 987 MΩ / 1000000 = 987
  • L1 = 44,4 kH / 1000000 = 44,4 mH

Này, nó hoạt động!

Mô phỏng TINA của các giá trị hợp lý

Thực tế, mặc dù? Chỉ cần sử dụng phần mềm thiết kế bộ lọc như những người khác.


@eryksun: Vâng, tôi sẽ không bao giờ thực sự làm điều này với Matlab. Đó là lý do tại sao tôi không nhớ làm thế nào.
endolith

@eryksun Có, nhưng đây là cách đơn giản nhất để chứng minh nó
endolith
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.