Pergunta

Alguém sabe de qualquer lugar que eu possa encontrar a real exemplos de código de Software Phase Locked Loops (SPLLs) ?

Eu preciso de um SPLL que pode acompanhar um PSK sinal modulado, que está em algum lugar entre 1.1 KHz e 1.3 KHz.Uma pesquisa no Google traz uma abundância de trabalhos acadêmicos e de patentes, mas nada utilizável.Até mesmo uma viagem para a Universidade de biblioteca que contém uma prateleira cheia de livros sobre hardware PLL, houve apenas um único capítulo em um livro sobre SPLLs e que foi mais teórico do que prático.

Obrigado pelo seu tempo.

Ian

Foi útil?

Solução

Este é um pacote de design interativo para a concepção digital (i.e.de software) phase locked loops (PLLs).Preencha o formulário e pressione o botão `Enviar", e um PLL vai ser projetado para você.

Digital Interativa Phase Locked Loop Design

Isso vai ajudar você a começar, mas você realmente precisa entender os fundamentos de PLL design bem o suficiente para construir a si mesmo, a fim de solucioná-lo mais tarde - Este é o reino de processamento de sinal digital, e enquanto não a magia negra vai certamente dar-lhe um funcionamento para seu dinheiro durante a depuração.

-Adam

Outras dicas

Eu suponho que este é, provavelmente, muito tarde para ajudar você (o que você acabou de fazer?) mas pode ajudar o próximo cara.

Aqui está um golfed exemplo de um software de phase-locked loop eu escrevi em uma linha de C, que vai cantar junto com você:

main(a,b){for(;;)a+=((b+=16+a/1024)&256?1:-1)*getchar()-a/512,putchar(b);}

Eu apresento este pequeno golfed primeira versão, a fim de convencê-lo de que o software de phase-locked loops são, na verdade, bastante simples, como um software vai, embora eles podem ser complicados.

Se você alimentá-lo 8-bit linear amostras em stdin, ele vai produzir amostras de 8 bits de uma onda dente de serra tentando controlar uma oitava mais alta, no stdout.A 8000 amostras por segundo, faixas de freqüências no bairro de 250Hz, logo acima de " B abaixo médio C.No Linux você pode fazer isso digitando arecord | ./pll | aplay.A baixa 9 bits de b são o oscilador (que pode ser um VCO em uma implementação de hardware), o que gera uma onda quadrada (1 ou -1), que é multiplicado pela forma de onda de entrada (getchar()) para produzir a saída do detector de fase.Que a saída é, então, filtrado de passagem baixa em a para produzir o suavizada erro de fase do sinal que é usado para ajustar a freqüência de oscilação do b para empurrar a em direção a 0.A freqüência natural da onda quadrada, quando a == 0, é para b para o incremento de 16 de cada amostra, o qual incrementa-lo por 512 (um ciclo completo) todas as 32 amostras.32 amostras de 8000 amostras por segundo são 1/250 de um segundo, o que é por isso que a freqüência natural é 250Hz.

Em seguida, putchar() leva a baixa de 8 bits de b, que compõem uma onda dente de serra em 500Hz ou assim, e vomita-os fora como a saída de fluxo de áudio.

Há várias coisas que faltam a partir deste simples exemplo:

  1. Ele tem de bom uma forma de detectar bloqueio.Se você tiver o silêncio, o ruído, ou um forte pura 250Hz a entrada de tom, um será aproximadamente zero e b serão oscilante em seu padrão de frequência.Dependendo da sua aplicação, você pode querer saber se você já encontrou um sinal ou não!Camenzind sugestão no capítulo 12 de A Concepção De Chips Analógicos é para alimentar uma segunda fase de "detector" de 90° fora de fase do real, detector de fase;sua suavizada saída dá-lhe a amplitude do sinal que você, teoricamente, trancada.

  2. A frequência natural do oscilador é fixo e não varrer.O capturar gama de um PLL, o intervalo de frequência dentro do qual ele vai notar uma oscilação se não está atualmente bloqueado para um, é bem estreito;o seu bloqueio de intervalo de, sobre a qual ele irá gama, a fim de seguir o sinal uma vez que este está bloqueado, é muito maior.Devido a isso, é comum a varrer o PLL frequência em todo o intervalo de onde você espera encontrar um sinal até obter um bloqueio e, em seguida, parar de varrer.

O golfed versão acima é reduzido a partir de um muito mais legível exemplo de um software de phase-locked loop em C que eu escrevi hoje, o que faz detecção de bloqueio, mas não varrer.Ele precisa de cerca de 100 ciclos de CPU, por exemplo de entrada por PLL sobre a CPU Atom no meu netbook.

Eu acho que se eu estivesse na sua situação, eu faria o seguinte (além das coisas óbvias como a procura de alguém que sabe mais sobre o processamento de sinal do que eu, e a geração de dados de teste).Eu provavelmente não iria filtro e downconvert o sinal em um front-end, já que é de um tal de baixa frequência já.Downconverting para um 200 hz-400 hz banda não parece necessário.Eu suspeito que PSK trará alguns novos problemas, pois se o sinal de repente muda de fase de 90° ou mais, você perde a fase de bloqueio;mas eu suspeito que esses problemas vai ser fácil de resolver, e é quase inexplorado território.

Tem Matlab com o Simulink?Há PLL arquivos de demonstração disponível no Matlab Central aqui.O Matlab é a geração de código capacidades podem tirar-nos de lá para um PLL escrito em C.

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