Para os fins desta resposta, usarei a terminologia do Matlab e definirá "upsampling" como o processo de inserção de z entre as amostras de entrada e "interpolação" como o processo combinado de upsampling e filtragem para remover os aliases de ( sendo o fator de interpolação) introduzido na amostragem. Para obter uma explicação de como / por que o upsampling introduz aliases, consulte este tópico .m - 1 mm - 1m - 1m
É importante entender que qualquer filtro passa-baixo pode ser usado para se livrar dos aliases e, assim, concluir a interpolação. Alguns filtros têm vantagens quando usados na interpolação. Discutirei os vários tipos de filtragem de interpolação abaixo.
Filtro FIR
Os filtros FIR de interpolação são eficientes porque combinam upsampling e filtragem de alias em uma única etapa. Isso é mais facilmente visto em um exemplo. Suponha que temos uma sequência de dados e queremos interpolá-la por um fator de dois. O primeiro passo é fazer um upsample por um fator de dois. Isso altera a sequência de dados original de para .x 0 , x 1 , . . . x N x 0 , 0 , x 1 , 0 , . . . x Nx [ n ]x0 0, x1, . . . xNx0 0, 0 , x1, 0 , . . . xN
Agora, suponha que tenhamos um filtro FIR passa-baixo, , que usaremos para remover o alias. Quando convolvemos a sequência de dados com amostra ampliada com o filtro, metade das torneiras de filtro são estimuladas pelas amostras diferentes de zero e metade das torneiras ficam inativas porque correspondem às amostras zero. A metade que é estimulada e a metade que está inativa se alternam à medida que o filtro passa pelos dados. Esses dois conjuntos de derivações são chamados de fases do filtro.h [ n ]
Esse mesmo efeito pode ser conseguido implicitamente, eliminando a amostragem ampliada e filtrando a sequência de dados original com um filtro FIR interpolado. O filtro FIR interpolado produz saídas para cada amostra de entrada. Para todas as saídas o filtro funcionará nas mesmas amostras de entrada de teto (onde K é o número de derivações de filtro e "ceil" é a função de teto).m c e i l ( K / m )mmc e i l ( K/ m)
Esperemos que um exemplo ilustre como isso funciona. Suponha que temos um filtro de seis torneiras e estamos interpolando por um fator de dois. As torneiras de filtro são [1 -2 4 4 -2 1]. Se literalmente interpolássemos e filtrássemos as amostras, as torneiras de filtro se alinhariam (uma vez que houvesse sobreposição total) da seguinte maneira:
0 : 1x2: - 20 : 4x1: 40 : - 2x0 0: 1
Próxima amostra ...
x3: 10 : - 2x2: 40 : 4x1: - 20 : 1
Próxima amostra ...
0 : 1x3: - 20 : 4x2: 40 : - 2x1: 1
E assim por diante. O ponto do filtro de interpolação é que ele realmente pula a inserção dos zeros e apenas alterna qual conjunto de toques ele usa no momento. Assim, a sequência anterior seria agora a seguinte:
x2: - 2x1: 4x0 0: 1
x3: 1x2: 4x1: - 2
x3: - 2x2: 4x1: 1
Retenção de ordem zero
Um interpolador de espera de ordem zero é aquele que simplesmente repete cada amostra vezes. Portanto, um fator de dois interpoladores de espera de ordem zero converte em . Esse método é atraente porque é extremamente fácil de implementar, tanto em termos de codificação quanto de carga computacional.m - 1x0 0, x1, . . . xNx0 0, x0 0, x1, x1, . . . xN, xN
O problema é que a filtragem passa-baixo é muito ruim. Podemos ver que, quando reconhecemos que o interpolador de retenção zero é um caso especial de interpolação FIR. Corresponde à upsampling seguida por um filtro retangular de largura. A transformação de Fourier de um filtro retangular é uma função sinc, que é um filtro passa-baixo bastante gasto. Sua degradação pode ser corrigida com um filtro FIR compensador, mas se você quiser fazer isso, use um bom filtro passa-baixo para começar.m
Retenção de primeira ordem
A retenção de primeira ordem é um aumento do interpolador de retenção zero, na medida em que interpola linearmente as amostras superiores usando as duas amostras de entrada mais próximas. Portanto, um fator de dois interpoladores de espera de primeira ordem converteria em .x0 0, x1, . . . xNx0 0, x0 0+ x12, x1, x1+ x22, . . . xN
Como o interpolador de espera de ordem zero, o interpolador de espera de primeira ordem é um caso especial de interpolação FIR. Corresponde a upsampling e filtragem com um filtro triangular. Para interpolação com fator de dois, o filtro é , para interpolação com fator de três, o filtro é e assim por diante.[ 121 12][ 13231 2312]
O filtro triangular é formado por dois filtros retangulares convoluídos, o que corresponde a um quadrado sinc no domínio da frequência. Este é um passo definitivo da retenção de ordem zero, mas ainda não é ótimo.
Filtro IIR
Eu nunca usei um filtro IIR interpolado, por isso não vou falar muito sobre eles. Suponho que os mesmos argumentos se apliquem à filtragem regular - os filtros IIR são mais eficientes, podem ser instáveis, não possuem fase linear etc. Não acredito que eles possam combinar as etapas de upsampling e filtragem como um filtro FIR, mas eu posso estar errado sobre isso.
Interpolação FFT
Vou colocar este aqui, mesmo que não seja muito comum (é claro, também não acho que a retenção zero seja comum). Este tópico discute a reamostragem de FFT, em que reamostragem é interpolação e dizimação.
Retenções de ordem superior
Os interpoladores de espera de segunda ordem são geralmente referidos como "interpoladores quadráticos". Eles não são lineares e, portanto, não podem ser implementados como filtros FIR, que são lineares. Eu não entendo bem a matemática por trás deles, então não discutirei o desempenho deles. Eu direi, no entanto, que acredito que eles são um pouco comuns fora do processamento de sinais.
Também existem métodos de ordem superior (três ou mais). Estes são referidos como "regressões polinomiais".
EDITAR:
Filtros Cascade Integrator Comb (CIC)
Esqueci de mencionar os filtros CIC . Os filtros CIC são usados por dois motivos: eles usam apenas somadores / sub-caracteres (não é tão grande agora que as multiplicações são rápidas e baratas) e podem fazer alterações de taxa de amostragem realmente grandes com bastante eficiência. O lado negativo é que eles são essencialmente uma implementação eficiente de um filtro retangular em cascata, portanto, possuem todas as desvantagens dos filtros retangulares, conforme discutido acima. Os interpoladores CIC são praticamente sempre precedidos por um filtro FIR compensador que pré-distorce o sinal para cancelar a distorção introduzida pelo CIC. Se a alteração da taxa de amostragem for grande o suficiente, o custo do filtro de pré-distorção vale a pena.
A resposta de Jim cobre muito bem. Todos os métodos de upsampling seguem o mesmo esquema básico:
A principal diferença entre os métodos é como a filtragem passa-baixo é implementada. O upsampler ideal seria incluir um filtro passa-baixas ideal, mas isso é impraticável. A consideração do problema no domínio da frequência permite encontrar o algoritmo de amostragem correta para seus requisitos específicos:
Os interpoladores não lineares de alta ordem (spline, eremita, Lagrange) normalmente não funcionam bem, pois o erro de interpolação depende muito do sinal e é quase impossível mapear para requisitos específicos.
fonte
Ao considerar a diferença entre amostra e retenção (ou seja, repetição dos valores da amostra) e preenchimento zero, é útil perceber (como Jim e Hilmar apontam) que a amostra e a retenção podem ser interpretadas como upsampling pelo preenchimento zero seguido por um Filtro FIR cuja resposta ao impulso consiste em um pulso retangular.
Por exemplo, ao fazer upsampling de 2 kHz a 64 kHz (um fator de 32), podemos implementar isso inserindo 31 zeros entre cada par de amostragem de 2 kHz e, em seguida, filtrando por um filtro FIR que consiste em 32, com todos os outros coeficientes zero.
sinc
Acontece que essa
sinc
função tem seus nulos exatamente nos harmônicos da menor frequência de amostragem. Em nosso exemplo de aplicação de upsampling de 2048 Hz a 65536 Hz, a resposta de frequência da operação de amostragem e retenção tem nulos em 2048 Hz, 4096 Hz, etc.A partir disso, concluo que qualquer filtro interpolador que suprima totalmente os harmônicos da frequência de amostragem original será algo como "amostra e espera". Isto está certo?
fonte