Demodulação FSK, recuperação de temporização de bits

10

Atualmente, estou implementando modulação e desmodulação acústica de FSK. Como eu não sou do ramo de processamento de sinais, qualquer ajuda sobre a recuperação do tempo de bits seria muito apreciada. Atualmente, implementei o demodulador usando dois filtros correspondentes para cada tom (com uma diferença de fase de para detecção não coerente). Basicamente, a saída de cada filtro são picos com diferentes amplitudes. Eu tenho duas perguntas:90

  • Como posso executar a recuperação de temporização de bits?
  • O que você recomenda para o preâmbulo da sincronização de pacotes (chirp, código de barras, código de ouro etc.)?

Pesquisei o algoritmo de Gardner no Google, mas não sei se é aplicável e como. Considere que atualmente estou trabalhando com 2 frequências com taxa de bits de 800 bps usando a placa de som.

Peter
fonte

Respostas:

8

Atualmente, estou implementando modulação e desmodulação acústica de FSK. Eu não sou um cara de processamento de sinal ...

Como você diz que possui filtros correspondentes e menciona a detecção não coerente, acho que você já é praticamente uma pessoa de comunicação digital - o passo para ser uma pessoa DSP é bem pequeno :)

A abordagem completa do SDR do sincronizador

Portanto, a maneira clássica de fazer isso é usar as saídas de seus dois filtros (magnitude) ao quadrado, filtrar passa-baixo o resultado para algo acima de e durante / após a filtragem dizimar (se possível), para não desperdiçar operações por segundo.2fsímbolo, max

Fiz para mim um rápido sinal de passagem de valor real FSK demod (acho que, se fizesse isso de novo, teria substituído os dois filtros de passagem por uma conversão de frequência combinada e um filtro de passagem baixa, dando-me banda base complexa ou jogando um banco de filtros polifásicos no problema, mas tanto faz) no GNU Radio com a ajuda do companheiro do GNU Radio (arquivo de fluxograma aqui ):

FSK recv

A questão é que provavelmente queremos simbolizar a sincronização do tempo entre a divisão e o bloco de limiar. Poderíamos fazer isso depois - a abordagem clássica de "microcontrolador e design de hardware digital" seria de fato o relógio Muller & Mueller e isso também funcionaria lá - mas não vamos desperdiçar as informações da inclinação.

Então, eu adicionaria uma sincronização polifásica do relógio aqui; Devo admitir que não poderia formular isso melhor do que Tom, um discípulo de Harris, fez na documentação do bloco homônimo da GNU Radio :

Sincronizador de tempo usando bancos de filtros polifásicos.

Este bloco executa sincronização de temporização para sinais PAM, minimizando a derivada do sinal filtrado, que por sua vez maximiza o SNR e minimiza o ISI.

sincsinc(0 0)=1 1,sinc(0 0)=0 0

dEu[n]EuxEu[n]

e[n]={xEu[n]}{dEu[n]}+{xEu[n]}{dEu[n]}2.0 .

xEu[n]xEu[n]xEu[n]em vez de apenas o sinal é especialmente bom para sinais com baixo SNR.

e[n]dkdtaxadtaxadtaxadkdtaxadkdαdβdαdβganho24

Percebendo que isso é frequência de áudio

Portanto, parametrizando esse bloco corretamente (e provavelmente reduzindo bpf_decime lpf_decimdando mais espaço ao sincronizador para mudar de fase), você pode criar uma recuperação de tempo de símbolo muito estável, que seria um exagero total para a sua aplicação.

Como você está amostrando com uma placa de som nas duas extremidades e como presumo que você não precisa lidar com o Doppler, a taxa de símbolos tem uma relação fixa com as frequências da portadora (por exemplo, o lado transmissor tem uma portadora mais alta com um período de 8 amostras de placas de som e um símbolo sempre leva, digamos 128 amostras, para que haja uma proporção fixa), você pode fazer um atalho:

darctandt[n]

Sobre a sincronização de pacotes

Bem, como você tem um demodulador funcional que provavelmente ficará muito fora de sincronia quando não houver sinal presente, use uma sequência de dados conhecida fixa para encontrar seu pacote.

Marcus Müller
fonte