Codificador Matlab e filtfilt()
-
12-11-2019 - |
Pergunta
Estou tentando usar o comando filtfilt com codificador matlab mas estou tendo problemas.
Se eu executar o programa da maneira normal tudo funciona bem, mas quando tento construir para código c a seguinte mensagem de erro é exibida: "Os dados devem ter comprimento superior a 3 vezes a ordem do filtro". Li em algum lugar que isso pode ocorrer porque a função filtfilt precisa conhecer todo o sinal (ao longo do tempo) e isso pode ser incompatível com o codificador matlab.No entanto, isso parece incorreto, pois o matlab lista o filtfilt como uma função suportada para geração de código - http://www.mathworks.se/help/toolbox/signal/ug/br7exek-1.html
Minha chamada é:
y_filt=filtfilt(b,a,y);
Minhas variáveis logo antes da chamada possuem as seguintes propriedades:
Tamanho do nome..........Bytes ......Aula
a ......1x9 ...........72 ...........dobro
b......1x9 ...........72 ...........dobro
ei ......1499400x1 11995200 duplo
Alguém tem alguma sugestão de como resolver esse problema?
Solução
Eu entendo sua frustração.Acho que o problema se deve ao fato de que para usar filtfilt
você pré-aloca uma grande quantidade de dados.Quando tento uma operação semelhante, minha máquina, que é considerada uma classe de servidor, fica sem memória.Eu recomendaria analisar seus requisitos e certificar-se de que filtfilt
é a única função que irá atendê-los.Eu percebo que a propriedade de fase zero do filtfilt
é perfeito para distribuição no Matlab Coder, porém os requisitos de memória podem causar ainda mais dores de cabeça.Deixe-me saber se você deseja discutir outras alternativas.Obrigado!
Outras dicas
você usa um filtro Buuterwroth aqui.Este é um filtro IIR.O filtro ordem solicitado pode ser muito maior que o número de guias de filtro.E o comprimento do sinal deve ser três vezes maior que o filtro ordem, não o comprimento do filtro!
Atenciosamente, Tchekov