Quais são os méritos relativos de vários esquemas de upsampling?

12

Recentemente, encontrei um sistema DSP que fazia algumas upsampling internas via preenchimento zero. Esperando espera por ordem zero, fiquei surpreso ao descobrir que um sinal DC não produzia uma saída DC; muitos harmônicos da freqüência de amostragem interna (mais baixa) também estavam presentes na saída.

Isso leva à minha pergunta: quais técnicas de upsampling são comumente usadas e quais são seus méritos relativos? Por que eu escolheria preenchimento zero, retenção de ordem zero ou retenção de primeira ordem e que outras técnicas estão disponíveis?

Alguns esclarecimentos:

  • O sistema é em tempo real, portanto, o esquema de upsampling deve ser causal.
  • O upsampler é seguido por um filtro anti-aliasing que também pode ser especificado.
nibot
fonte

Respostas:

11

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 0,x1,0 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 )mmceEueu(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 0:1x2:-20 0:4x1:40 0:-2x0 0:1
Próxima amostra ...

x3:10 0:-2x2:40 0:4x1:-20 0:1
Próxima amostra ...

0 0:1x3:-20 0:4x2:40 0:-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.[12112][132312312]

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.

Jim Clay
fonte
Pesquisa fantástica Sr. Jim. Para adicionar à sua categoria de reservas de ordem superior, acredito que isso também seja chamado de "regressão polinomial". Nesse sentido, dado um conjunto específico de pontos, calculamos um polinômio linear, parábola, cúbico e de ordem superior de melhor ajuste. Depois de termos a equação, podemos facilmente descobrir o que são pontos intermediários.
Spacey
Perguntas: 1) Não estou totalmente esclarecido sobre o último parágrafo da parte do Filtro FIR. Você mencionou que a 2ª e a 3ª saídas correspondentes à 1ª amostra de entrada usam fitas de filtro 1, 4, 7 e 2, 5, 8. No entanto, você também menciona que todas são zeros ... portanto, não são a 2ª e a 3ª saída amostras apenas zeros neste caso? 2) Esse 'filtro de interpolação FIR' se parece com, digamos, [1 0 0 3,2 0 0 -2,1 0 0 1,1 0 0] para m = 3? (Os números são compostos).
Spacey
@Mohammad eu editei a resposta. Eu espero que isso ajude. E obrigado pela informação sobre regressões polinomiais.
Jim Clay
1
@ endolith Duas razões, eu acho: complexidade e só faz sentido computacionalmente quando o comprimento do filtro está além de um determinado número (e não tenho certeza de qual é esse número). A abordagem da FFT se sai muito bem ao lidar com blocos de amostras, mas se você estiver lidando com um fluxo de amostras, também precisará fazer sobreposição-adição ou sobreposição-economia para manter a continuidade.
Jim Clay
1
@ endolith Uma coisa realmente interessante sobre a abordagem da FFT é que praticamente não há custo para usar um filtro grande.
Jim Clay
3

A resposta de Jim cobre muito bem. Todos os métodos de upsampling seguem o mesmo esquema básico:

  1. Inserir zeros entre amostras: isso resulta em uma repetição periódica do espectro original, mas deixa o espectro na banda original completamente intacto
  2. Filtro passa-baixo para se livrar de todos os espectros de espelho

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:

  1. Quanta distorção de amplitude posso tolerar na banda original? Essa frequência é dependente?
  2. Eu me preocupo com a fase da banda original? Se você precisar manter a fase, precisará de um FIR de fase linear. Caso contrário, uma fase mínima faz um trabalho melhor na manutenção da "causalidade" e dos ataques agudos.
  3. Quanto eu preciso para suprimir as imagens no espelho? Basicamente, as imagens no espelho aparecerão como ruído extra na banda base.

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.

Hilmar
fonte
O que você quer dizer com "faz um trabalho melhor na manutenção da 'causalidade'"?
Nibot 12/12/12
0

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τ=0 0

Acontece que essa sincfunçã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.

insira a descrição da imagem aqui

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?

1/f

nibot
fonte
O problema é que os nulos são muito estreitos, portanto a maioria dos sinais terá energia fora dos nulos.
Jim Clay
@ JimClay, os nulos estreitos não são perfeitos para eliminar os harmônicos da menor taxa de amostragem? Eu concordo, você também gostaria de mais alguns polos em torno de 1 kHz para se livrar das frequências de imagem. Acho que expandiria minha pergunta: como projetar um bom filtro de interpolação?
Nibot 12/10/12
Você cria um filtro passa-baixo cuja banda de passagem inclui a largura de banda do seu sinal e cuja banda de parada inclui os aliases que são introduzidos quando você amplia a amostra. As frequências entre o ponto 3dB do sinal e o pseudônimo são sua banda de transição. Se sua pergunta for "como faço para projetar um filtro passa-baixo?", Faça isso em outra pergunta e poderemos discuti-lo.
Jim Clay
Geralmente entendo como projetar filtros, geralmente colocando pólos e zeros no domínio s explicitamente e depois convertendo-os em filtros do domínio z. Fiquei me perguntando se havia algum truque especial para filtros de interpolação. A mensagem que levo é que não há realmente nenhum truque - os filtros de interpolação são como qualquer outro tipo de filtro, e seu design é uma escolha de compromisso entre as várias considerações (ondulação, fase, atraso de grupo, atenuação mínima da banda de parada, complexidade computacional etc.).
Nibot 12/10/12
Por outro lado, não sei nada sobre o design de filtros FIR.
Nibot 12/12/12