Como trabalhar com dados de forma de onda adquiridos em Python

Os osciloscópios da Rohde & Schwarz utilizam tecnologias de ponta para obter resultados confiáveis e reproduzíveis.
Os osciloscópios da Rohde & Schwarz utilizam tecnologias de ponta para obter resultados confiáveis e reproduzíveis.

Sua tarefa

Como engenheiro de desenvolvimento ou de teste, você usa um osciloscópio R&S®RTP, R&S®RTO ou R&S®RTE em seu trabalho diário. Você armazena formas de onda gravadas para arquivamento e documentação ou para um processamento posterior que esteja além dos limites funcionais ou de desempenho do osciloscópio. O uso do formato ASCII (sufixo de arquivo csv) para armazenar formas de onda pode exceder a capacidade de armazenamento. Este formato também requer uma quantidade significativa de tempo para transferência e processamento. Além disso, algumas informações não estão disponíveis quando se usa o formato ASCII em vez do formato binário.

A solução da Rohde & Schwarz

Os osciloscópios de laboratório e alto desempenho da Rohde & Schwarz (R&S®RTP, R&S®RTO e R&S®RTE) compartilham o mesmo formato para armazenamento de formas de onda binárias. O pacote auxiliar Python RTxReadBin de alto desempenho permite que você manipule arquivos binários e obtenha todos os detalhes necessários para a sua documentação.

Aplicação

Para transferir a forma de onda do seu instrumento para o seu ambiente Python, você deve preparar o IDE Python:

  • Baixe o pacote RTxReadBin do site da Rohde & Schwarz
  • Instale o pacote no seu sistema
  • Adquira uma forma de onda em seu osciloscópio e armazene-a como um arquivo binário

Dois arquivos serão criados: um arquivo de descrição de forma de onda (*.bin) e um arquivo de dados de forma de onda (*.wfm.bin). Os dados da forma de onda (carregados através da função RTxReadBin) podem consistir em:

  • Canais analógicos
  • Canais digitais (osciloscópio de sinais mistos)
  • Barramentos paralelos (adquiridos através de osciloscópio de sinais mistos)
  • Canais analógicos (através de ZVC)
  • Formas de onda matemáticas que incluem espectros
  • Faixas (formas de onda baseadas em medição automatizada)

Para todas essas fontes de sinal, múltiplos canais e aquisições são compatíveis, se aplicável.

Depois de adquirir dados com o osciloscópio da Rohde & Schwarz, você pode carregá-los em seu ambiente Python para processamento posterior. Para maior conveniência, no entanto, você também pode deixar a forma de onda onde está e habilitar o acesso à rede aos dados, ao montar um compartilhamento CIFS no seu computador. Realize as seguintes etapas preparatórias no osciloscópio:

  • Acesse o compartilhamento avançado
  • Selecione o perfil público e altere os seguintes parâmetros:
    - Ativar a descoberta de rede
    - Ativar o compartilhamento de arquivos e impressoras
    - Ativar o acesso de gravação para pastas públicas

Depois de ter concluído essas etapas, você pode se conectar ao osciloscópio usando o seguinte caminho de arquivo em seu script Python:

r’\\<name of scope or IP address>\Users\Public\Documents\Rohde-Schwarz\RTx\RefWaveforms\<filename>.bin’

Saiba que, como o Python interpreta a cadeia de caracteres, a sequência de caracteres \U será interpretada e levará a um erro. Para evitar isso, basta adicionar um “r” (de "raw") na frente da cadeia de caracteres. As credenciais podem ser solicitadas. Certifique-se de não usar a autenticação no servidor de domínio local do Windows. Para fazer isso, coloque uma barra invertida antes do instrumento da conta local:

account: \instrument
password: <your oscilloscope pw>

Como alternativa, você também pode baixar (arrastar e soltar) a forma de onda do osciloscópio usando o Windows Explorer.

Quando esses pré-requisitos estiverem implementados, você poderá carregar o módulo por meio da importação de Python e invocar RTxReadBin. A maneira mais simples de fazer isso é fornecendo o nome do arquivo. A função retorna três parâmetros: os dados da forma de onda vertical (y), os dados do eixo horizontal (x) e o parâmetro de aquisição (S).

> from RTxReadBin import RTxReadBin
> import numpy
> y, x, S = RTxReadBin(’<wfm filename>.bin’)
> y.shape

Os dados verticais (y) são uma matriz NumPy com uma forma de [<record Length>, <# of acquisitions>, <# of active channels>]. Para uma forma de onda de osciloscópio de sinais mistos, o tipo de dados é apenas booliano e para o barramento paralelo, é um inteiro sem sinais (uint16), com pacote de bits com o índice de osciloscópio de sinal misto mais alto (MSB: bit mais significativo). Por exemplo, vamos supor que as linhas D12, D7, D2 e D0 do osciloscópio de sinais mistos estejam conectadas e configuradas como um barramento paralelo. Assim, a palavra de dados gravada será armazenada como D12 ∙ 23 + D7 ∙ 22 + D2 ∙ 21 + D0 ∙ 20. Para todos os outros tipos de dados de forma de onda, float32 é usado. É importante mencionar que o osciloscópio utiliza uma forma diferente de contar o histórico de aquisições em relação ao Python. O osciloscópio começa com (1 - <# of acquisitions>) e conta até 0 como última aquisição. Em Python, a contagem é deslocada e começa com 0 e termina com (<# of acquisitions> - 1) como última aquisição.

Os dados horizontais (x) são uma matriz NumPy flutuante de 64 bits com uma forma de [<record length>]. Se os dados forem armazenados no formato intercalado x/y, a matriz é estendida para cobrir todas as aquisições [<record length>, <# of acquisitions>]. Se um espectro for armazenado, o eixo x conterá o eixo de frequência do espectro.

O tamanho do registro, o número de aquisições e os canais podem ser facilmente recuperados ao acessar a propriedade de forma do valor de retorno y.

Se nem todos os parâmetros forem necessários, eles podem ser ignorados através do uso das técnicas padrão do Python, por exemplo, com a adição de um especificador de lista (veja o exemplo abaixo) ou através do uso de um sublinhado (underscore) como um parâmetro de retorno posicional.

> y, x =
RTxReadBin(’<wfm filename>.bin’)[0,2]

Existem mais dois parâmetros (opcionais) que podem ser especificados para reduzir a quantidade de memória alocada. O primeiro parâmetro especifica as aquisições de interesse. O segundo parâmetro especifica o intervalo, o tempo ou a frequência de interesse. Ambos requerem uma lista com tamanho de dois itens. Saiba que o parâmetro de aquisição segue a notação Python de uma lista. No exemplo dado, duas aquisições (2,3) são retornadas.

> y, x, S = RTxReadBin(’<wfm filename>.bin’,
acquisitions = [2,4],
xInterval = [-2e-7,3e-7])

O parâmetro S restante fornece todos os detalhes disponíveis no arquivo de cabeçalho. Ele é implementado como um dicionário Python. Nem todos esses parâmetros são importantes para o usuário. No entanto, alguns deles podem ser úteis para documentação e análise. Como os dados da forma de onda no vetor y são apenas flutuantes, o usuário não pode determinar as configurações originais a partir desses dados. Ao examinar os parâmetros no cabeçalho, no entanto, o usuário pode obter as informações necessárias para documentação e pós-processamento. Por exemplo, para entender as restrições de ruído para uma medição, é importante ter informações sobre as configurações de escala vertical, desvio, posição e acoplamento.

Outro exemplo envolve a análise do intervalo de repetição de pulso (PRI) em aplicações de radar. Quando um pulso de radar por aquisição é capturado usando a memória segmentada1), a lista de marcas temporais de uma captura segmentada fornece os eventos de disparo ao longo do tempo, que não estão disponíveis de outra forma (S[’Timestamps’]). A diferença de tempo para eventos de disparo consecutivos fornece a sequência de PRI.

Os dois gráficos seguintes mostram dados de forma de onda carregados no osciloscópio e em um ambiente Python. São apresentados três sinais:

  • Sinal senoidal de 1 MHz com desvio
  • Chirp do radar alternando para cima/para baixo
  • Ruído – nenhum sinal conectado

A vantagem da função RTxReadBin é que ela pode manipular arquivos de forma de onda com múltiplas aquisições (histórico). Quando o mesmo arquivo é carregado, o osciloscópio reconhece apenas a última aquisição e exibe um histórico vazio.

1)Consulte “Demodulação de pulsos de radiofrequência de radar com um osciloscópio” no site da Rohde & Schwarz:

Resumo

O R&S®RTP, o R&S®RTO e o R&S®RTE são osciloscópios poderosos. O módulo Python (RTxReadBin) estende a funcionalidade dos instrumentos ao permitir que você acesse formas de onda armazenadas. Para aplicativos que envolvem pós-processamento, documentação ou procedimentos de análise subsequentes, como comparações de formas de onda, todos os dados de formas de onda estão agora disponíveis em um poderoso ambiente Python.

Três formas de onda diferentes sem histórico carregadas como formas de onda de referência.
Três formas de onda diferentes sem histórico carregadas como formas de onda de referência.
Abrir o Lightbox
Três formas de onda diferentes com histórico.
Três formas de onda diferentes com histórico.
Abrir o Lightbox

Soluções relacionadas