Recriando filtro matlab de segunda ordem em python
Quero criar alguns filtros personalizados na filterDesignerferramenta Matlab e depois aplicar esses filtros a um grande conjunto de arquivos de áudio. Eu quero usar o python para fazer a aplicação dos filtros aos áudios.
Criei um filtro Butterworth no Matlab e exportei-o como um arquivo ASCII. Lá eu pego dois dados. Matriz SOS e valores de escala . Então li o arquivo em python e peguei a matriz SOS e filtrei meu sinal usando o resultado da seguinte forma ( usandoscipy.sosfilt )
from scipy import signal
x_sos = signal.sosfilt(sos, x) # x is my signal
O resultado que obtenho tem a forma desejada, exceto pela amplitude ser diferente (apliquei o mesmo filtro no Matlab e comparei a saída do código python). Eu entendo que os valores da escala precisam entrar nesta equação. Mas como faço para incorporar isso? Eu não entendo essa resposta . Esta pergunta tem respostas que explicam os valores de escala, mas ainda não tenho ideia de como devo usar isso no código python
EDITAR: (Após obter a resposta) Para quem está interessado no código final, aqui está. E há uma explicação novamente neste tópico
from scipy import signal
import numpy as np
x_sos = signal.sosfilt(sos, x) * np.prod(scale) # x is my signal
Respostas
Os valores da escala devem ser todos $1$ exceto para o primeiro A menos que seja $1$também. Multiplique seu sinal de saída com aquele primeiro valor de escala OU multiplique os três primeiros números nas três primeiras linhas de sua matriz SOS com esse número antes de filtrar.
EDITAR
Acontece que o designer do filtro torna isso mais complicado do que precisa ser. Basta multiplicar todos os valores da escala e multiplicar a saída pelo produto.