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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top