Tạo lại bộ lọc thứ hai matlab trong python

Nov 20 2020

Tôi muốn tạo một số bộ lọc tùy chỉnh trong filterDesignercông cụ Matlab và sau đó áp dụng các bộ lọc đó cho một tập hợp lớn các tệp âm thanh. Tôi muốn sử dụng python để thực hiện việc áp dụng các bộ lọc cho âm thanh.

Tôi đã tạo bộ lọc Butterworth trong Matlab và xuất nó dưới dạng tệp ASCII. Trong đó tôi nhận được hai dữ liệu. Ma trận SOSGiá trị Quy mô . Sau đó, tôi đọc tệp bằng python và nhận được ma trận SOS và lọc tín hiệu của tôi bằng cách sử dụng kết quả như sau ( sử dụngscipy.sosfilt )

from scipy import signal

x_sos = signal.sosfilt(sos, x)  # x is my signal

Kết quả tôi nhận được có hình dạng mong muốn ngoại trừ biên độ khác nhau (tôi đã áp dụng cùng một bộ lọc trong Matlab và so sánh đầu ra từ mã python). Tôi hiểu rằng các giá trị tỷ lệ cần được đưa vào phương trình này. Nhưng làm cách nào để kết hợp điều đó? Tôi không hiểu câu trả lời này . Câu hỏi này có câu trả lời giải thích các giá trị tỷ lệ nhưng tôi vẫn không biết mình nên sử dụng giá trị đó như thế nào trong mã python


CHỈNH SỬA: (Sau khi nhận được câu trả lời) Cho bất kỳ ai quan tâm đến mã cuối cùng, nó đây. Và có một lời giải thích một lần nữa trong chuỗi này

from scipy import signal
import numpy as np

x_sos = signal.sosfilt(sos, x) * np.prod(scale)  # x is my signal

Trả lời

1 Hilmar Nov 20 2020 at 21:15

Các giá trị thang đo phải là tất cả $1$ ngoại trừ trường hợp đầu tiên Trừ khi đó là $1$quá. Nhân tín hiệu đầu ra của bạn với giá trị tỷ lệ đầu tiên đó HOẶC nhân ba số đầu tiên trong ba hàng đầu tiên của ma trận SOS của bạn với số đó trước khi lọc.

BIÊN TẬP

Hóa ra trình thiết kế bộ lọc làm cho điều này phức tạp hơn mức cần thiết. Chỉ cần nhân tất cả các giá trị quy mô và nhân sản lượng với sản phẩm.