Últimas notícias Os próximos 50 idiomas de programação A seguinte lista de idiomas indica 51 a 100. Uma vez que as diferenças são relativamente pequenas, as linguagens de programação são apenas listadas (em ordem alfabética). (Visual) FoxPro, ABC, ActionScript, APL, AutoLISP, bc, shell Bourne, shell C, CFML, cg, CL (OS400), Clipper, Lisp comum, Cristal, Eiffel, Elixir, Elm, Hack, Ícone, IDL, Inform, Io, J, Julia, Korn shell, Kotlin, Maple, ML, NATURAL, NXT-G, OCaml, OpenCL, OpenEdge ABL, Oz, PLI, PowerShell, Pure Data, REXX, S, Smalltalk Alterações no Índice Este mês as seguintes alterações foram feitas para a definição do índice: ClojureScript foi adicionado à entrada Clojure. Esta foi uma sugestão de Alex Miller. Olaf Buddenhagen e alguns outros se perguntaram por que Nim ainda não fazia parte do índice TIOBE. Na verdade, Nim qualifica para o índice. Ele entra no índice TIOBE na posição 129 este mês. Ao lado de Lua também LuaJIT é aceito como uma entrada para Lua. Isto é graças a Szbnwer. Finalmente, Mahmoud Fayed propôs adicionar a linguagem de programação Ring ao índice. Esta linguagem fez sua estréia na posição 104. Há lotes de e-mails que ainda precisam ser processados. Assim que houver mais tempo disponível, seu e-mail será respondido. Por favor, seja paciente. Muito longo prazo História Para ver o quadro maior, por favor, encontrar abaixo as posições das 10 melhores linguagens de programação de muitos anos atrás. Note que estas são posições médias por um período de 12 meses. Bugs amp Change Requests Este é o top 5 das alterações e bugs mais solicitados. Se você tiver alguma sugestão de como melhorar o donapost índice hesite em enviar um e-mail para tpcitiobe. Para além da programação em linguagem de programação, também outras consultas, tais como programação com linguagem de linguagem, desenvolvimento de linguagem e codificação de idioma devem ser testadas. Adicione consultas para outros idiomas naturais (além do inglês). A idéia é começar com o motor de busca chinês Baidu. Isso foi implementado parcialmente e será concluído nos próximos meses. Adicione uma lista de todos os pedidos de termos de pesquisa que foram rejeitados. Isso é para minimizar o número de e-mails recorrentes sobre Rails, JQuery, JSP, etc. Inicie um índice TIOBE para bancos de dados, sistemas de gerenciamento de configuração de software e frameworks de aplicativos. Alguns motores de busca permitem consultar páginas que foram adicionadas no ano passado. O índice TIOBE só deve rastrear as páginas adicionadas recentemente. Perguntas frequentes (FAQ) Q: Posso mostrar o índice TIOBE no meu weblogpresentationpublication A: Sim, a única condição é referir-se à sua fonte original quottiobequot. Q: Como eu posso indicar uma nova língua para ser adicionada ao índice TIOBE? A: Se uma linguagem satisfaz os critérios de ser listada (isto é, é Turing completa e tem uma entrada própria Wikipedia que indica que se refere a uma linguagem de programação) É suficientemente popular (mais de 5.000 hits para quotltlanguagegt programmingquot para o Google), então por favor escreva um e-mail para tpcitiobe. P: Gostaria de ter o conjunto completo de dados do índice TIOBE. Isso é possível A: Nós gastamos muito esforço para obter todos os dados e manter o índice TIOBE atualizado. A fim de compensar um pouco para isso, pedimos uma taxa de 5.000 EU para o conjunto de dados completo. O conjunto de dados vai de junho de 2001 até hoje. Começou com 25 idiomas em 2001, e agora mede mais de 150 idiomas uma vez por mês. Os dados estão disponíveis em formato separado por vírgula. Entre em contato com salestiobe para obter mais informações. Q: Por que o máximo é levado para calcular o ranking de um agrupamento, por que não a soma A: Bem, você pode fazê-lo de qualquer maneira e ambos estão errados. Se você tomar a soma, então você começa a interseção duas vezes. Se você tomar o máximo, então você perca a diferença. Que escolher? Suponha que alguém venha com um novo termo de pesquisa que seja 10 do original. Se você tomar o máximo, nada muda. Se você tomar a soma, em seguida, as classificações vai subir 10. Assim, tendo a soma será um incentivo para alguns a chegar a todos os tipos de termos obscuros para uma língua. Thataposs porque nós decidimos tomar o máximo. A maneira correta de resolver isso é é claro para tomar a soma e subtrair a interseção. Isso dará origem a uma explosão de consultas extras que devem ser realizadas. Suponha que uma linguagem tenha um agrupamento de 15 termos, então você terá que realizar 32.768 consultas (todas as combinações de interseções). Então isso também não parece possível. Se alguém tem uma solução para isso, por favor, deixe-nos saber. Q: O que aconteceu com o Java em abril de 2004 Você mudou sua metodologia A: Não, nós não mudamos nossa metodologia naquele momento. O Google mudou sua metodologia. Eles realizaram uma ação de varredura geral para se livrar de todos os tipos de sites que tinham sido empurrados para cima. Como conseqüência, houve uma grande queda para linguagens como Java e C. Para minimizar tais flutuações no futuro, adicionamos mais dois motores de busca (MSN e Yahoo) alguns meses após esse incidente. P: Por que o YouTube é usado como um mecanismo de busca para o índice TIOBE A: Primeiro de tudo, o YouTube conta para menos de 10 de todas as classificações, de modo que tem pouca influência no índice. O YouTube foi adicionado como uma experiência. Qualificou para o índice de TIOBE por causa de seu ranking elevado em Alexa. O YouTube é uma plataforma jovem (portanto, um indicador de popularidade) e há algumas palestras, apresentações, dicas de programação e apresentações de idiomas disponíveis no YouTube. TIOBE verifica mais de 586 milhões de linhas de código de software para os seus clientes em todo o mundo, em tempo real, cada dia. Homemade receptor GPS Retratado acima é o front-end, primeiro mixer e IF amplificador de um receptor experimental GPS. O SMA mais à esquerda é conectado a uma antena comercial com filtro LNA e SAW integral. Um primeiro oscilador local sintetizado aciona o SMA inferior. Os cabeçalhos de pin à direita são entrada de alimentação e saída IF. O último é conectado a um FPGA Xilinx que não só executa DSP, mas também hospeda um sintetizador de freqüência N fracionário. Mais sobre isso mais tarde. Eu estava motivado para projetar este receptor depois de ler o trabalho 1 de Matjax017E Vidmar, S53MV, que desenvolveu um receptor GPS a partir do zero, usando principalmente componentes discretos, há mais de 20 anos. Seu uso do DSP seguindo um IF de difícil limitação e um ADC de 1 bit me interessava. O receptor aqui descrito funciona com o mesmo princípio. Seu ADC de 1 bit é o IC de 6 pinos perto dos cabeçalhos de pinos, um comparador de saída LVDS. Escondido sob o ruído, mas não obliterado no bi-nível quantised mush que emerge são sinais de todos os satélites em vista. Todos os satélites GPS transmitem na mesma frequência, 1575.42 MHz, utilizando espectro de dispersão de sequência directa (DSSS). O transportador L1 é espalhado sobre uma largura de banda de 2 MHz ea sua resistência na superfície terrestre é -130 dBm. A potência de ruído térmico na mesma largura de banda é -111 dBm, de modo que um sinal de GPS na antena de recepção é de 20 dB abaixo do nível de ruído. Que qualquer um dos sinais presentes, sobrepostos uns aos outros e enterrados no ruído, são recuperáveis após a quantização de dois níveis parecer contra-intuitiva. Eu escrevi uma simulação para me convencer. O GPS baseia-se nas propriedades de correlação de seqüências pseudo-aleatórias chamadas Códigos de Ouro para separar sinais de ruído e entre si. Cada satélite transmite uma seqüência única. Todos os sinais não correlacionados são ruídos, incluindo os de outros satélites e erros de quantificação de limitadores rígidos. Misturar com o mesmo código na fase correta de-espalha o sinal desejado e ainda espalha tudo o resto. Filtragem de banda estreita remove o ruído de banda larga sem afetar o sinal desejado (mais uma vez estreito). Hard-limiting (1-bit ADC) degrada SNR em menos de 3 dB, um preço vale a pena pagar para evitar hardware AGC. Atualização em Maio de 2017 Este é agora um receptor GPS portátil de 12 canais, verdadeiramente portátil, com software turnkey, que adquire e rastreia satélites e recalcula continuamente a sua posição sem intervenção do utilizador. O sistema completo (abaixo, à esquerda) é composto por: display LCD 16x2, computador modelo A de framboesa Pi, duas placas de circuito impressas personalizadas, antena de remendo comercial e bateria de iões de lítio. O consumo total de corrente do sistema é de 0,4A para uma duração de bateria de 5 horas. O Raspberry Pi é alimentado através do cabo de fita ligando seu cabeçalho GPIO à placa FPGA Frac7 e não requer nenhuma outra conexão. Atualmente, o Pi está executando Raspbian Linux. Uma distro menor encurtaria o tempo para a primeira correção. Depois de inicializar a partir do SD-Card, o software de aplicação GPS inicia automaticamente. Na saída, ele fornece um meio para desligar corretamente o Pi antes de desligar. Pi desenvolvimento de software foi feito head-less via SSH e FTP através de um dongle USB Wi-Fi. O código fonte ea documentação podem ser encontrados na parte inferior desta página. Ambos os PCBs personalizados são placas simples de 2 camadas PTH com planos de solo contínuos na parte inferior. Indo no sentido horário em torno do Xilinx Spartan 3 na placa FPGA Frac7: de 12 oclock para 3 oclock são o filtro de loop, VCO, divisor de energia e prescaler do sintetizador de freqüência de microondas inferior direito são o joystick e conector JTAG e, às 6 oclock, um Pin para o cabo de fita Framboesa Pi. A extrema esquerda é o conector LCD. Próximo à esquerda é um oscilador de cristal controlado por tensão com compensação de temperatura (TCVCXO) proporcionando uma freqüência de referência estável, vital para a recepção GPS. O TCVCXO é bom, mas não completamente até GPS padrão quando operando un-boxed em locais ventosos. O sopro sobre ele desloca o oscilador de cristal de 10.000000 MHz em cerca de 1 parte em 10 milhões ou 1 Hz, que é ampliado 150 vezes pelo sintetizador PLL. Isso é suficiente para desbloquear momentaneamente os circuitos de rastreamento via satélite, se feito de repente. O dispositivo é também ligeiramente sensível a infravermelhos, v. g. De lâmpadas de halogéneo e controles remotos de TV Quando lançado pela primeira vez em 2017, este era um receptor de quatro canais, o que significa que só poderia acompanhar quatro satélites simultaneamente. Pelo menos quatro são necessários para resolver a posição do usuário e viés de relógio do receptor, mas maior precisão é possível com mais. Nessa versão original, quatro instâncias idênticas do módulo de rastreador preencheram o FPGA. Mas a maioria dos fracassos só eram cronometrados uma vez por milissegundo. Agora, uma CPU soft-core personalizada dentro do FPGA serializa o processamento e apenas 50 do tecido FPGA é necessária para um receptor de 8 canais ou 67 para 12 canais. O número de canais é um parâmetro na fonte e pode ir mais alto. Precisão de posicionamento é melhor quando a antena pode ver 360deg de céu e receber sinais de todas as direções. Geralmente, quanto mais satélites estiverem visíveis, melhor. Dois ou mais satélites no mesmo rolamento podem levar ao que é chamado de má geometria. A melhor solução até agora foi plusmn1 metros em um local muito aberto usando 12 satélites, mas a precisão é tipicamente plusmn5 metros em locais mais pobres com menos satélites. Atualização de setembro de 2017 O código-fonte para este projeto foi relançado sob a GNU General Public License (GPL). Arquitetura Processamento é dividido entre FPGA e Pi por complexidade e urgência. O Pi lida com o levantamento de peso intensivo em matemática em seu próprio ritmo. O FPGA sintetiza o primeiro oscilador local, presta serviços de alta prioridade em eventos em tempo real e rastreia os satélites de forma autônoma. O Pi controla o FPGA através de uma interface SPI. Convenientemente, o mesmo SPI é usado para carregar o fluxo de bits de configuração FPGA e código executável binário para a CPU incorporada. O FPGA também pode ser controlado através de um cabo USB JTAG da plataforma Xilinx a partir de um PC com Windows e detecta automaticamente qual interface está em uso. As frequências L1 são convertidas para baixo para uma 1ª FI de 22,6 MHz, misturando-se com um oscilador local de 1552,82 MHz na placa frontal GPS3. Todo processamento de sinal IF e banda base subseqüente é feito digitalmente no FPGA. Dois controladores proporcional-integrais (PI) por satélite, porta-faixas e fase de código. Os dados NAV transmitidos pelos satélites são coletados em memória FPGA. Isto é carregado para o Pi, que verifica a paridade e extrai efemérides do fluxo de bits. Quando todos os parâmetros orbitais necessários são coletados, um instantâneo é tomado de certos contadores internos FPGA, a partir do qual o tempo de transmissão é calculado para mais precisão 15ns. Muito do sintetizador 1552.82 MHz é implementado no FPGA. Pode-se esperar problemas de jitter, co-hospedagem de um detector de fase com outra lógica, mas funciona. A pureza espectral da saída do sintetizador é excelente, mesmo que o núcleo do FPGA esteja afastando-se furiosamente e não todas em freqüências harmonicamente relacionadas. Esta abordagem foi tomada porque uma placa semelhante ao Frac7 já existia a partir de um projeto de sintetizador anterior. A adição de um front-end foi o caminho mais curto para um protótipo de receptor. Mas essa primeira versão não era portátil: tinha requisitos de energia inconveniente e nenhum padrão de frequência a bordo. Processamento de sinal até e incluindo o limitador rígido: O comparador LMH7220 tem uma tensão máxima de deslocamento de entrada de 9,5mV. Ruído térmico ampliado deve confortavelmente exceder este para mantê-lo toggling. Os sinais fracos do GPS só influenciam o comparador perto de cruzamentos de zero Eles são amostrados pelo ruído Para estimar o nível de ruído na entrada do comparador nós tabulamos ganhos, perdas de inserção e números de ruído: O ruído dentro da banda na saída do misturador é -1740.828-1.5-3.920- 610log10 (2,5e6) -73 dBm ou 52microV RMS. O misturador é resistivamente terminado em 50-ohms e os estágios depois trabalham em impedância mais alta. A tira discreta de IF tem um ganho de tensão total de 1000 para que o nível de entrada do comparador seja 52mV RMS. O LMH7220 adiciona 59 dB de ganho, totalizando 119 dB para todo o IF. Implantar tanto ganho em uma freqüência foi um risco. Para minimizá-lo, circuitos balanceados sobre um plano de massa sólido foi usado e blindado par trançado transporta a saída para o FPGA. A motivação era a simplicidade, evitando uma segunda conversão. Na prática, o circuito é estável, então o jogo valeu a pena. O desacoplador activo Q1 fornece 5V para o LNA remoto. O amplificador de MMIC U2 fornece ganho de 20 dB (não em IF) e garante baixa figura geral de ruído do sistema, mesmo se forem usados cabos de antena longos. L1 e L2 são invólucros de microondas de mão com freqüência de auto-ressonância muito alta, montados perpendicularmente um ao outro e livres do plano de terra. Vento 14 voltas, ar-cored, diâmetro interno de 1mm dos comprimentos de 7cm do fio de cobre esmaltado 32swg. Verificado com o gerador de rastreamento em um Marconi 2383 SA, estes eram bons para 4 GHz. O Mini-Circuits MBA-15L DBM foi escolhido por sua baixa perda de conversão de 6 dB em 1,5 GHz e baixa exigência de drive de 4 dBm LO. R9 termina a porta IF. Três etapas de amplificador IF totalmente diferenciadas seguem o misturador. Baixo-Q paralelo circuitos sintonizados entre coletores definir a largura de banda -3 dB em torno de 2,5 MHz e evitar a acumulação de DC offsets. L4, L5 e L6 são rolos Toko 7mm. O BFS17 foi escolhido por sua alta (mas não muito alta) 1 GHz f T. I e é 2mA para o mais baixo ruído e betar e. O primeiro IF de 22,6 MHz é convertido digitalmente para 2,6 MHz por subamostragem a 10 MHz no FPGA. 2,6 MHz está perto do centro da banda de 5 MHz Nyquist. É melhor evitar o centro exato, por razões que serão explicadas mais tarde. Várias outras primeiras frequências IF são possíveis: 27,5 MHz, que produz inversão de espectro na 2 ª IF, também foi tentado com êxito. Há um trade-off entre os problemas de imagem com menor e BFS17 disponível ganho em freqüências mais altas. Detecção de sinal implica resolver três incógnitas: o que os satélites estão em vista, seus turnos Doppler e fases de código. Uma busca sequencial deste espaço tridimensional a partir de um chamado arranque a frio pode levar muitos minutos. Um início quente usando dados de almanaque para prever posições e velocidades ainda requer uma pesquisa de código. Todas as 1023 fases de código devem ser testadas para encontrar o pico máximo de correlação. O cálculo de 1023 integrações de correlação no domínio do tempo é muito caro e redundante. Este receptor GPS utiliza um algoritmo baseado em FFT que testa todas as fases de código em paralelo. Do frio, leva 2,5 segundos em um Pentium de 1,7 GHz para medir a força do sinal, o deslocamento Doppler ea fase de código de cada satélite visível. A framboesa Pi é um pouco mais lento. Com a conjugação de over-bar, a função de correlação cruzada y (Tau) do sinal complexo s (t) eo código c (t) deslocado pelo deslocamento Tau é: O Teorema de Correlação indica que a transformada de Fourier de uma integral de correlação é igual a O produto do complexo conjugado da transformada de Fourier da primeira função ea transformada de Fourier da segunda função: FFT (y) CONJUGADO (FFT) FFT (c) A correlação é realizada na banda de base. O código de 1.023 Mbps CA é 1023 chips ou 1ms de comprimento. O comprimento FFT para frente deve ser um múltiplo. A amostragem a 10 MHz durante 4 ms resulta num tamanho de compartimento FFT de 250 Hz. 41 Deslocamentos Doppler devem ser testados girando os dados do domínio da freqüência, uma caixa de cada vez, até mais de 20 compartimentos plusmn5 KHz. A rotação pode ser aplicada a qualquer uma das funções. O primeiro IF de 22,6 MHz do ADC de 1 bit é sub-amostrado por um relógio de 10 MHz no FPGA, convertendo-o digitalmente para um 2º IF de 2,6 MHz. No software, o 2º IF é convertido para baixo para banda base complexa (IQ) usando osciladores locais em quadratura. Para sinais de dois níveis, os misturadores são simples portas XOR. Embora não mostrado acima, as amostras são temporariamente buffered em memória FPGA. O Pi não é capaz de aceitá-los em 10 Mbps. 1.023 Mbps e 2.6 MHz são gerados por acumuladores de fase de oscilador com controle numérico (NCO). Estas frequências são bastante grandes em comparação com a taxa de amostragem, e não são sub-harmônicos exatos dele. Consequentemente, os NCOs têm esporões fracionários. O número de amostras por chip de código cai entre 9 e 10. Felizmente, os receptores DSSS são tolerantes a interferentes de banda estreita, externos ou autogerados. A banda base complexa é transformada no domínio da frequência por uma FFT directa que só necessita de ser calculada uma vez. Uma FFT de cada código de CA de satélites é pré-calculada. O tempo de processamento é dominado pelo loop mais interno que executa deslocamento, conjugação, multiplicação complexa e um FFT inverso por teste Doppler por satélite. O GPU Raspberry Pis Videocore poderia ser alavancado para acelerar as coisas. A uma taxa de amostragem de 10 MHz, a fase de código é resolvida para os 100ns mais próximos. A saída CCF típica é ilustrada abaixo: Cálculo de pico a potência média sobre estes dados dá uma boa estimativa de SNR e é usado para encontrar os sinais mais fortes. Os seguintes foram recebidos às 20:14 GMT em 4 de março de 2017, em Cambridge, Reino Unido, com a antena em uma borda exterior da janela norte: De latitudes norte, mais satélites GPS serão geralmente encontrados no céu do sul, isto é, em direção ao equador. Tirar amostras mais longas aumenta SNR, revelando sinais mais fracos, mas o cancelamento ocorre quando a captura abrange transições de dados NAV. O comprimento FFT dianteiro é um número inteiro de milissegundos, no entanto, a FFT inversa pode ser encurtada, simplesmente por jogar dados fora em caixas de freqüência mais alta. SNR é preservada, mas a fase de código não é tão resolvida. No entanto, uma boa estimativa da posição de pico é obtida pela média ponderada dos dois compartimentos adjacentes mais fortes e testes off-air sugerem que isso poderia funcionar até mesmo para curtos intervalos FFT inversos. Depois de detectar um sinal, o próximo passo é bloquear, rastreá-lo e desmodular os dados de NAV de 50 bps. Isto requer dois loops de fase de interdependência (PLLs) para rastrear o código e a fase da portadora. Estes PLLs devem operar em tempo real e são implementados como funções DSP no FPGA. O software Pi tem uma função de supervisão: decidir quais satélites monitorizar, monitorizar o estado do bloqueio e processar os dados NAV recebidos. Os loops de rastreamento são bons em manter bloqueio, porque eles têm largura de banda muito estreita no entanto, esta mesma característica torna-os pobres em adquirir bloqueio sem ajuda. Eles não conseguem ver além da largura de banda do loop para capturar algo mais distante. As fases iniciais e as frequências devem ser pré-ajustadas para a fase de código medida eo deslocamento Doppler do satélite alvo. Isto é orquestrado sob controle Pi. Os loops devem ser in-lock desde o início e permanecer assim. A fase de código é medida em relação à amostra FFT. O código NCO no FPGA é reiniciado no início da amostragem e acumula fase em um fixo 1.023 MHz. É alinhado mais tarde com o código recebido parando brevemente o acumulador de fase. O deslocamento Doppler na portadora de 1575,42 MHz é plusmn5 KHz ou plusmn3 ppm. Também afeta a taxa de código 1.023 Mbps por plusmn3 chips por segundo. O comprimento da pausa é ajustado para fluência de código no tempo desde a tomada da amostra. Felizmente, o código Doppler é proporcional ao portador Doppler para o qual temos uma boa estimativa. Software de hardware dividido No diagrama abaixo, o código de cores mostra como a implementação do DSP de rastreamento agora é dividida entre hardware e software. Anteriormente, tudo isso era feito em hardware, com instâncias paralelas idênticas repetidas para cada canal, tornando o uso ineficiente de recursos FPGA. Agora, o processamento mais lento de 1 KHz é feito por software, e duas vezes mais canais podem ser acomodados em metade do FPGA real-estate. Os seis acumuladores de integração e dump (Sigma) são bloqueados em um registro de deslocamento na época do código. Uma sinalização de solicitação de serviço sinaliza a CPU, que lê o bit de dados - em série. Com 8 canais ativos, 8 de tempo de CPU é gasto executando a instrução oprdBit Mas há tempo de sobra, e IO serial usa FPGA tecido economicamente. Luxos como RSSI e registro de IQ (por exemplo, para gráficos de dispersão) podem agora ser proporcionados. As funções de transferência do filtro de laço F (z) engulam 2 da largura de banda da CPU por canal ativo. Estes são controladores padrão proporcional-integrais (PI): a precisão de 64 bits é usada e os coeficientes de ganho KI e KP, embora restritos a potências de 2, são dinamicamente ajustáveis. Cada canal tem que esperar sua vez, as atualizações de taxa de NCO podem ser adiadas por dezenas ou centenas de microssegundos após uma época de código, mas isso introduz um desvio de fase desprezível em freqüências onde a margem de fase é determinada. Rastros finos são 1-bit, representando nocionalmente plusmn1. O portador de 2,6 MHz é primeiro desdobrado misturando-se com códigos cedo, tarde e pontuais. Os produtos de banda base I e Q complexos da segunda ordem de misturadores de portão XOR são somados em 10000 amostras ou 1ms. Esta filtragem de baixa passagem reduz drasticamente a largura de banda de ruído e, assim, aumenta SNR. O downsampling para 1 KHz necessita de caminhos de dados mais avançados no domínio do software. A fase de código é rastreada usando um loop de atraso-bloqueio convencional ou um gate de atraso antecipado. A potência nos canais precoce e tardio é calculada usando P I 2 Q 2 que é insensível à fase. Códigos precoce e tardio são um chip distante, ou seja, frac12 chip à frente e por trás pontual. Este diagrama ajuda a obter o erro correto: Um Costas Loop é usado para o rastreamento de veiculos e recuperação de dados NAV no canal pontual. Os dados NAV, m, são retirados do bit de sinal do braço I com uma incerteza de fase de 180 graus. K é a amplitude do sinal recebido e theta é a diferença de fase entre a portadora recebida (sem modulação) e o NCO local. K varia de cerca de 400 para os sinais recuperáveis mais fracos até mais de 2000 para os mais fortes. Observe como o termo de erro retornado ao controlador da planta F (z) no loop Costas é proporcional à potência do sinal recebido ksup2. O slope de rastreamento e, portanto, o ganho de loop, também variam com a potência do sinal no loop de código. Abaixo está um gráfico de Bode de ganho de malha aberta para o Costas Loop em k500: Costas Loop largura de banda é de cerca de 20 Hz, o que é ideal para rastreamento de transportadora. A largura de banda do loop de código é de 1 Hz. O poder de ruído em tais largura de banda é pequeno e os loops podem rastrear sinais muito fracos. Os kI acima e kP trabalho para a maioria dos sinais, mas precisa cair um entalhe para o muito mais forte. Scilab prevê, e parcelas de dispersão confirmar, o início da instabilidade em kge1500. Os erros de paridade não ocorrem a menos que as amostras se desviem para a metade oposta do plano de QI. (I) Instabilidade em kge1500 O acima são 2 quadros consecutivos de 5 subframes cada. Subframes são de 300 bits de comprimento e levar 6 segundos para transmitir. A coluna 1 é o preâmbulo 10001011. Isto aparece no início de cada subtrama mas pode ocorrer em qualquer lugar nos dados. O contador de 17 bits na coluna 5 é hora-de-semana (TOW) e redefine a zero na meia-noite domingo. O contador de 3 bits na coluna 7 é o ID de subtrama 1 a 5. As subtramas 4 e 5 são subcomutadas em 25 páginas cada e uma mensagem de dados completa compreendendo 25 quadros completos leva 12,5 minutos para transmitir. Estou usando apenas os dados nas subquadras 1, 2 e 3 no momento. Solução para a posição do usuário Todo satélite GPS transmite sua posição e o tempo. Subtrair tempo enviado a partir do tempo recebido e multiplicar pela velocidade da luz é como um receptor mede a distância entre si e os satélites. Fazer isso com três satélites resultaria em três equações simultâneas em três incógnitas (posição do usuário: x, y, z) se o tempo exato estava disponível. Na prática, os relógios receptores não são precisos o suficiente, o tempo exato é um quarto desconhecido, quatro satélites são, portanto, necessários e quatro equações simultâneas devem ser resolvidos: Um método iterativo é usado porque as equações são não-lineares. Usando o centro de terra (0, 0, 0) eo tempo aproximado como ponto de partida, o algoritmo converge em apenas cinco ou seis iterações. A solução é encontrada mesmo se o erro do relógio do usuário for grande. Os satélites carregam relógios atômicos, mas estes também têm erros e os coeficientes de correção na subtrama 1 devem ser aplicados ao tempo de transmissão. Os ajustes típicos podem ser centenas de microsegundos. O tempo de transmissão não corrigido é formado por dimensionamento e adição de vários contadores. Tempo-de-semana (TOW) em segundos desde meia-noite domingo é enviado cada subframe. As bordas de dados marcam intervalos de 20 ms dentro de subtramas de 300 bits. O código é repetido 20 vezes por bit de dados. O comprimento do código é de 1023 chips e a taxa de chip é de 1,023 Mbps. Finalmente, os 6 bits mais significativos da fase de código NCO são anexados, fixando o tempo de transmissão para plusnn 15ns. As posições dos satélites no tempo de transmissão corrigido são calculadas usando efemérides nas subtramações 2 e 3. A posição orbital em um tempo de referência toe (tempo de efemérides) é fornecida juntamente com parâmetros que permitem calcular a posição (x, y, z) até alguns Horas antes ou depois. Efemérides são atualizados regularmente e satélites só transmitem os seus próprios. As órbitas de longo prazo de toda a constelação podem ser preditas com menos precisão utilizando os dados do Almanaque nas subtramações 4 e 5, no entanto, isto não é essencial se for utilizada uma pesquisa rápida baseada na FFT. As soluções são calculadas em coordenadas centradas na terra, fixadas na terra (ECEF). A localização do usuário é convertida em latitude, longitude e altitude com uma correção para excentricidade da terra, que se projeta no equador. Os diagramas de dispersão abaixo ilustram a repetibilidade, o benefício da média e o efeito de escolhas de satélites pobres. Quadrados de grade são 0.001deg em cada lado. Os pontos azuis marcam 1000 correções. Os triângulos amarelos marcam os centros de gravidade: (i) Rebordo da janela virado para o norte (ii) Antena da cobertura (iii) Rebordo da janela orientada para o leste O conjunto apertado (ii) foi obtido utilizando satélites em quatro diferentes partes do céu. Apenas a antena no último andar tinha uma visão clara em todas as direcções. Mas as boas correções foram obtidas pela média, mesmo quando metade do céu estava obscurecida. As correções do telhado também exibem o espalhamento como (i) e (iii) se os satélites errados forem escolhidos. As soluções acima foram geradas sem compensar os atrasos de propagação ionosférica usando os parâmetros na página 18 da subtrama 4 que devem ser aplicados porque este é um receptor de frequência única. A refração ionosférica aumenta o comprimento dos trajetos entre usuários e satélites. Em abril de 2017, eu corrigi um bug que causou erros significativos nas soluções de posição do usuário. Originalmente, ao não transformar as posições de satélites de coordenadas terrestres (ECEF) centradas na terra (ECI), eu estava efetivamente ignorando a rotação da Terra durante os 60 a 80 ms que os sinais estavam em vôo. Agora estou vendo precisão de solução posicional de plusmn 5 metros após a média, mesmo com visibilidade de satélite limitada. Ive criado um apêndice mostrando como a solução iterativa é desenvolvida, a partir de uma equação geométrica intervalo, que é linearizado usando uma Taylor Series expansão, e resolvido por métodos de matriz, para o caso especial de quatro satélites ou o caso geral de mais, com a Opção de usar quadrados mínimos ponderados para controlar a influência de determinados satélites. Você encontrará este e código-fonte da solução C nos links na parte inferior da página. Estou grato a Dan Doberstein por me enviar um rascunho de seu livro de GPS 2 que me ajudou a entender o algoritmo de solução. O governo oficial dos EUA GPS Interface Specification 3 é uma referência essencial. Monitor de sinal A disposição de circuito acima, implementada na maior parte em FPGA, de-espalha tomando o produto do 1-bit IF e do código pontual, deixando a modulação de dados de 50 bps. Um pequeno entalhe devido à supressão de portadora BPSK pode ser visto: Estes espectros mostram a mesma transmissão de propagação em diferentes intervalos e largura de banda de resolução (RBW). O deslocamento Doppler foi de -1,2 KHz. O piso do ruído é o ruído térmico da antena amplificado e filtrado pela faixa IF. -3 dB de largura de banda parece em torno de 3 MHz, ligeiramente maior do que o planejado. O transportador de espalhamento é 5 dB acima do ruído a 30 KHz RBW e 25 dB acima a 300 Hz RBW. A intensidade do sinal recebido na antena pode ser estimada como -174110log10 (30e3) 5 -123 dBm. Ainda me espanta como a informação de domínio freqüência bem é preservada através de hard-limiting O transmissor LVDS tem uma corrente de saída constante de 1mW em 100 ohms. O pico de potência visto na SA não pode exceder 0 dBm. Aqui, vemos essa potência disponível espalhada por uma faixa de freqüências. A densidade de espectro de potência integrada de banda larga deve ser o primeiro oscilador local Ive sido a construção de sintetizadores experimentais fraccionada-N usando lógica programável de propósito geral por vários anos: Xilinx Spartan 3 FPGA Frac7 foi construído para este propósito, mas eu não tinha idéia Frac5 seria usado em um GPS Quando eu originalmente concebido. A foto abaixo mostra como a saída VCO do ROS-1455 no Frac5 foi dividida resistivamente entre a saída SMA e um preditor Hittite HMC363 dividir-por-8. A saída do divisor de 200 MHz é encaminhada (diferencialmente) para o FPGA cuja fase o bloqueia para uma referência mestre usando métodos documentados em meus projetos anteriores. Circuity microondas em Frac7 é semelhante, mas usa um divisor Mini-Circuits 3dB. Elevada estabilidade e baixo ruído de fase são alcançados, como pode ser visto nos espectros de saída de VCO mostrados abaixo. Quando o Frac5 foi originalmente desenvolvido, como um sintetizador de freqüência dedicado, o alternar simultâneo em freqüências não harmonicamente relacionadas foi evitado para minimizar os estímulos de intermodulação. O FPGA era estático quando pulsos de relógio que a saída de detector de fase alternada cruzou o tecido. Nenhum luxo como é prático quando o FPGA está hospedando um receptor GPS no entanto, felizmente, a saída do oscilador local é bom o suficiente: Os analisadores de espectro Marconi 2383 50 MHz STD OUTPUT foi usado como a fonte de referência mestre para Frac5 e todos os relógios receptor interno GPS. GPS receivers need accuracies better than 1 ppm (parts per million) to measure plusmn5 KHz Doppler shifts on the 1575.42 MHz L1 carrier. Any frequency uncertainty would necessitate a wider search range. Embedded CPU My original GPS receiver could only track 4 satellites. The available fabric was not used efficiently and the FPGA was full. Identical logic was replicated for each channel and only clock-enabled at the 1 KHz code epoch. GPS update rates are quite un-demanding and most of the parallel processing can easily be done sequentially. Embedding a CPU for this task has both increased the number of channels and freed space in the FPGA. This CPU directly executes FORTH primitives as native instructions. Visitors to my Mark 1 FORTH Computer page will already be aware of my interest in the language. FORTH is not mainstream and its use here might be an esoteric barrier however, I could not resist doing another FORTH CPU, this time in FPGA, after seeing the excellent J1 project, which was an inspiration. FORTH is a stack-based language, which basically means the CPU has stacks instead of general purpose registers. Wikipedia has a good overview. FPGA resources: 360 slices 2 BRAMs Single-cycle instruction execution FORTH-like, dual-stack architecture 32-bit stack and ALU data paths 64-bit double-precision operations Hardware multiplier 2k byte (expandable to 4k byte) code and data RAM Macro assembler code development Memory and IO Two BRAMs are used: one for main memory, the other for stacks. Xilinx block RAM is dual ported, allowing one instance to host both data and return stacks. Each stack pointer ranges over half of the array. Dual porting of the main memory permits data access concurrent with instruction fetch. One memory port is addressed by the program counter, the other by T, the top of stack. Writes to the PC-addressed port are also used for code download, the program counter providing incrementing addresses. Code and data share the main memory, which is organised as 1024 (expandable to 2048) 16-bit words. Memory accesses can be 16-, 32- or 64-bits, word-aligned. All instructions are 16-bit. Total code plus data size of the GPS application is less than 750 words, despite all loops being unrolled. IO is not memory-mapped, occupying its own 36 bit-select space (12 in 12 out 12 events). One-hot encoding is used to simplify select decoding. IO operations are variously 1-bit serial, 16- or 32-bit parallel. Serial data shifts 1 bit per clock cycle. Events are used mainly as hardware strobes and differ from writes by not popping the stack. Instruction format 24 instructions out of a possible 32 are currently allocated in the opcode space h80XX - h9FXX. These are mostly zero-operand stack ALU operations. The ret option, which performs return from subroutine, executes in parallel, in the same cycle. Add-immediate is the only one-operand instruction. A carry-in option extends (stack, implied) addition precision. hF0000 - hFFFF is spare. Stack and ALU data paths are 32-bit however, 16-, 32- and 64-bit operations are supported. 64-bit values occupy two places on the stack, with least significant bits on top. Top of stack, T, and next on stack, N, are registered outside the BRAM for efficiency. Apart from the 64-bit left shift (opshl64) which is hard-wired for single-cycle execution, all other double precision functions are software subroutines. Assembly language The GPS embedded binary was created using Microsofts Macro Assembler MASM. This only supports x86 mnemonics but opcodes are declared using equ and code is assembled using dw directives. MASM not only provides label resolution, macro expansion and expression evaluation but even data structures The MASM dup() operator is used extensively to unroll loops e. g. dw N dup(opcall dest) calls a subroutine N times. This fragment gives some flavour of source style. Stack-effect is commented on every line: opfetch16 and opstore16 are primitives. opstore32 and opstore64 are subroutines or compound instructions usable as if they were primitives. T is actually 15:0,31:16 after opswap16 . but we dont care about the upper 16-bits here. opstore16 leaves the address stack depth can only change plusmn1 per cycle. Purists might prefer: dw N addi Host serial interfaces The FPGA can be controlled via SPI by the Raspberry Pi, or by a Windows PC using a Xilinx Platform USB JTAG cable. There are two levels of request priority: Send new command and poll for response to previous New code images are copied to main memory via a third BRAM which bridges the CPU and serial clock domains. Thus downloaded, binary images execute automatically. Host commands are captured in the bridge BRAM and the CPU is signalled to action them. Its responses are collected by the host from the bridge on the next scan. The top-level main loop polls for host service requests. The first word of any host message is a command code. Requests are dispatched through the Commands jump table: optor moves vector to the return stack. Some host requests (e. g. CmdGetSamples) elicit lengthy responses. Data ports on the CPU side of the bridge are 16-bit. The CPU can read and write these via the data stack however, more direct paths exist for uploading main memory and GPS IF samples. The instruction opwrEvt GETMEMORY transfers a memory word directly to the bridge, using T as an auto-incrementing pointer. GETMEMORY is the only event which has stack effect. The instruction opwrEvt GETSAMPLES transfers 16 bits from the IF sampler: Unrolling loops at assembly time with dup() trades code size for performance, avoiding a decrement-test-branch hit and the entire application binary is still tiny however, long loops must be nested, as illustrated above. CHANNEL data structure An array of structures holds state variables and buffered NAV data for the channels. MASM has excellent support for data structures. Field offsets are automatically defined as constants and the sizeof operator is useful. The epoch service routine (labelled Method: ) is called with a pointer to a CHANNEL structure on the stack. Affecting OO-airs, stack-effect comments refer to it as this throughout the routine. A copy is conveniently kept on the return stack for accessing structure members like so: The Chans array is regularly uploaded to the host. Raspberry Pi application software The Raspberry Pi software is multi-tasked using what are variously known as coroutines, continuations, user-mode or light-weight threads. These co-operatively yield control, in round-robin fashion, using the C library setjmplongjmp non-local goto, avoiding the cost of a kernel context-switch: Up to 16 threads can be active:Slideshare uses cookies to improve functionality and performance, and to provide you with relevant advertising. Se você continuar navegando no site, você concorda com o uso de cookies neste site. Veja nosso Contrato de Usuário e Política de Privacidade. O Slideshare usa cookies para melhorar a funcionalidade e o desempenho e para fornecer publicidade relevante. Se você continuar navegando no site, você concorda com o uso de cookies neste site. Consulte nossa Política de Privacidade e Contrato de Usuário para obter detalhes. Explore all your favorite topics in the SlideShare app Get the SlideShare app to Save for Later even offline Continue to the mobile site Upload Login Signup Double tap to zoom out Designing of 8 BIT Arithmetic and Logical Unit and implementing on Xilinx Vertex 4 FPGA Share this SlideShare LinkedIn Corporation copy 2017
No comments:
Post a Comment