Como criar um filtro de compensação de distorção

11

Estou criando um canalizador que consiste em um misturador complexo, dizimador CIC e um filtro de compensação / dizimação FIR. O filtro FIR final pode, se for o caso, ser implementado como mais de um filtro.

Minha pergunta é: como faço para projetar um filtro que compense a resposta de frequência muito não plana do filtro CIC? Você cria a resposta de frequência que deseja calculando a resposta recíproca da CIC e a executa através de uma FFT inversa para obter a resposta ao impulso?

Como você pode ver, embora meu problema específico se refira aos filtros CIC, minha pergunta é realmente sobre como você cria qualquer tipo de filtro de compensação de distorção.

Obrigado pelo seu tempo.

Jim Clay
fonte
3
Um filtro cujo objetivo é compensar a distorção anteriormente no sistema de comunicação é chamado de equalizador ; isso pode lhe dar mais informações para ler enquanto isso. Tipos comuns são o equalizador de força zero (que não é o que você deseja se o sistema que você está compensando possui zeros na resposta de frequência) e o equalizador mínimo de erro ao quadrado médio (MMSE).
Jason R
@JasonR Eu estou familiarizado com os Equalizadores Adaptativos MMSE no contexto de equalizadores direcionados a decisões de compensação de canal, mas duvido que seja isso que você quis dizer. Você treinaria o empate de alguma forma? Eu acho que o ponto crucial é como você determina qual é o erro.
Jim Clay
MMSE refere-se apenas ao critério pelo qual o equalizador se esforça; pode ser adaptável ou não adaptável. Se você conhece a função de transferência do sistema para compensar e a função de correlação automática de qualquer ruído aditivo, e ambas são invariantes no tempo, você pode derivar "o" equalizador MMSE, que será corrigido ao longo do tempo. Soluções adaptativas podem ser usadas quando essas informações não são conhecidas com precisão ou são alteradas ao longo do tempo (o que é bastante comum).
Jason R
Os filtros adaptativos geralmente incluem um modo de treinamento em que vários símbolos conhecidos são transmitidos pelo sistema, permitindo que o receptor permita que seu filtro converja em um bom conjunto de coeficientes. Após o treinamento, também é comum entrar em uma fase de rastreamento, em que a operação direcionada à decisão é usada para atualizações contínuas dos toques do filtro. Como alternativa, em um regime em que o SNR e o ISI são "suficientemente bons", o modo direcionado à decisão pode ser usado desde o início como um esquema de aquisição cega, pulando a fase de treinamento.
Jason R
Encontrar material de leitura sobre este assunto matematicamente acessível é um pouco difícil. Eu gosto da Teoria dos Filtros Adaptativos de Haykin , mas é preciso algum esforço para detalhar a matemática (e você precisa de um sólido histórico de álgebra linear). Já é bastante complicado que, se você não o usa regularmente, precisa primeiro revisar os tópicos de processamento estatístico de sinais.
Jason R

Respostas:

9

A seguir, aborda a compensação CIC e não é uma técnica geral de "distorção". Mas é um método direto para "compensar" a "distorção" não variável. Se a resposta em frequência é conhecida, o inverso da frequência pode ser usado para compensar. Exemplos como o filtro CIC, onde um filtro ruim pode ser usado devido à complexidade reduzida, são compensados ​​posteriormente na cadeia de sinal. Neste exemplo, a resposta de frequência é conhecida e o inverso pode ser usado. Observe que, com os filtros com várias taxas, você deseja usar apenas o espectro "utilizável" após a dizimação.

Geralmente, para compensar um filtro CIC, o inverso da resposta dos filtros CIC pode ser usado para gerar o filtro de compensação. O CIC tem uma resposta de (consulte a referência [r2] ou [r3])

H(ω)=|sin(ωD/2)sin(ωM/2)|N

Onde D é o atraso diferenciado, M é a taxa de dizimação e N é a ordem dos filtros (número de filtros em cascata). O inverso pode ser especificado como

H(ω)=|sin(ωM/2)sin(ωD/2)|N

Uma vez que tenhamos a resposta de frequência do filtro de compensação, podemos simplesmente escolher o comprimento do filtro FIR que desejamos. O comprimento do FIR é específico da aplicação. Obviamente, quanto mais tempo o filtro FIR, melhor a compensação.

A seguir, são apresentados gráficos dessa compensação direta.

A seguir, é apresentado o código Python para criar as respostas e gráficos de frequência.

import numpy as np
from numpy import sin, abs, pi
import pylab

D = 1; M = 7; N = 3

Hfunc = lambda w : abs( (sin((w*M)/2)) / (sin((w*D)/2.)) )**N
HfuncC = lambda w : abs( (sin((w*D)/2.)) / (sin((w*M)/2.)) )**N

w = np.arange(1024) * pi/1024

G = (M*D)**N
H = np.array(map(Hfunc, w))
Hc = np.array(map(HfuncC, w))
# only use the inverse (compensation) roughly to the first null.
Hc[int(1024*pi/M/2):] = 1e-8
plot(w, 20*log10(H/G))
plot(w, 20*log10(Hc*G))
grid('on')

sinc1

[r1] Altera, "Entendendo os filtros de compensação CIC"

[r2] R. Lyons, "Understanding Digital Signal Processing", 2ª ed., Prentice Hall, Upper Saddle River, Nova Jersey, 2004

[r3] R. Lyons, "Entendendo os filtros combinados em cascata do integrador"

Christopher Felton
fonte
A referência 1 é ótima, mas usa terminologia diferente (M = atraso do estágio, onde você usou D. R = Taxa de redução, onde você usou M), demorei um pouco para ver o erro: você usa WM / 2, Altera especifica pi F / R. Após uma rápida plotagem do Excel, acredito que a versão do Altera é a correta.
Alan Campbell
@ AlanCampbell Se você traçar as equações acima (o que fiz no trecho de código), verá que não há erro. O que não expliquei explicitamente nas equações é o ganho . Observe no snip de código que removo o ganho. Se você executar o recorte de código e modificar o M=8e N=9ele cria as mesmas parcelas como referência 1. eu usei a nomenclatura mais perto de referência 2.
Christopher Felton
2

Eu acho que a resposta de Christopher é boa. Eu pensei em adicionar um para nós, tipos preguiçosos / trapaceiros.

Enquanto vasculhava o fdatool (Ferramenta de design e análise de filtros) do Matlab, descobri que ele pode projetar e modelar filtros CIC e sinc sinc inversos, onde o filtro sinc inverso é o filtro de compensação de distorção do CIC.

Você gera o filtro CIC indo diretamente para a página "Criar um filtro com várias taxas" (botão à esquerda na versão R2011b) e especificando o filtro CIC. Você pode então definir todos os parâmetros desejados, como taxas de interpolação / dizimação, número de cascatas (o Matlab chama de "seções"), etc.

Você cria o filtro sinc inverso, indo para a página "Filtro de design" (a página que a ferramenta assume como padrão quando é iniciada) e especificando "Inverse Sinc Lowpass" no menu suspenso Lowpass. Você pode então definir os vários parâmetros para ele. Ele possui alguns parâmetros exclusivos na parte Opções da caixa de diálogo, incluindo "p", que corresponde ao número de cascatas (expoente sinc).

O design do filtro inverso e sinc não foi completamente satisfatório, porém, já que acertar parecia menos um exemplo de matemática do que descobrir onde estava minha banda de passagem, qual era a queda do CIC naquele momento e depois projetar um filtro que quase cancelou fora essa queda. Como meu filtro CIC tinha quatro cascatas, eu pensaria que seria necessário definir "p" para quatro, mas ele supercompensou quando fiz isso. Acabei deixando "p" em 1, o valor padrão.

A ferramenta realmente brilhou quando eu salvei os dois filtros na minha sessão e, em seguida, entrei no gerenciador de filtros e os coloquei em cascata para ver a resposta geral de frequência. Isso foi muito útil e fácil de fazer.

Jim Clay
fonte
0

Sem duplicar a resposta aqui, consulte

como fazer filtro de compensação CIC

que mostra uma solução muito simples de 3 torneiras para compensação de CIC.

Isso é específico para o CIC ou é necessário qualquer aplicativo para um Sinc inverso (como antes da conversão D / A).

Para compensar qualquer distorção transversal geral (aquela que poderia ser replicada com um filtro transversal em oposição à distorção de ruído dinâmico), eu adotaria a abordagem de usar as equações de Wiener Hopf para criar um filtro de compensação usando a abordagem de erro ao quadrado, idealmente usando uma sequência de treinamento, se disponível, para comparar a resposta desejada com a real e treinar o equalizador. Para um aplicativo que mostra isso com o código-fonte usado, consulte:

Compensação da resposta de frequência do alto-falante em um sinal de áudio

Dan Boschen
fonte