Como rodar código do Octave no RStudio

Guilherme Ferreira

2023-09-14

Introdução

Podemos rodar Octave1 Linguagem de alto nível para computação numérica, compatível com o MATLAB, distribuído sob licença GPL. no IDE RStudio, por intermédio de R markdown. Basta adicionar a localização/caminho para o interpretador do Octave que executa o código, no documento KnitR:

Ajustes iniciais

Se você ainda não possui o RStudio IDE instalado na sua máquina, baixe e instale a versão desktop comunitária, liberada livremente sob a licença AGPL v3, de acordo com o sistema operacional de sua preferência, disponível no site da posit , empresa mantenedora do produto.

Hello RMarkdown!

Crie seu primeiro documento RMarkdown: na barra de menus do RStudio, clique em: File > New File > RMarkdown. Preencha o campo “Título” e “Autor”, e selecione o formato do arquivo de saída.2 Markdown é uma linguagem de marcação, assim como HTML, de formato aberto, que pode ser lido por qualquer software que o suporte. Já RMarkdown combina Markdown com o poder da linguagem R. Saiba mais aqui..

Depois de informado o caminho do interpretador do Octave, inicializamos e fechamos o bloco de códigos com três sinais diacríticos de acento grave. Declare o nome do interpretador entre chaves e insira o código a ser executado.3 Para informações mais detalhadas sobre as funcionalidades básicas do Octave, sugiro este tutorial..

2^sin(2*pi^e)
## ans = 1.7474

Além do comando executado, o interpretador imprime na tela a saída, antecedida da palavra chave “ans” (do inglês “answer”, resposta).

Processamento de sinais

Como exemplo de código em Octave a ser executado no RStudio, vamos apresentar algumas rotinas de processamento de sinais.

Definição de sinais e sistemas

Sinal é uma função de uma ou mais variáveis que transmite informações sobre algum fenômeno. Em geral, a variável independente é representada pelo tempo (t). Exemplos: sinais de fala, sinais de áudio, sinais de vídeo, imagens, sinais de radar, sinais biomédicos, séries temporais etc.

Sistema indica o processo de transformação de sinais, que pode incluir o preprocessamento, a extração, o aprimoramento, o armazenamento e a transmissão de informações úteis.

Dentre as diversas ferramentas matemáticas desenvolvidas para o processamento de sinais, tomamos como exemplo a convolução, que comentamos a seguir.

Equações e figuras

Convolução

A convolução é uma operação matemática, no domínio do tempo, utilizada para alterar sinais de acordo com a resposta ao impulso do sistema, também definida formalmente como uma operação entre duas funções que retorna como resultado uma terceira função.4 A convolução de f e g é denotada por
f * g.

Para sistemas lineares invariantes no tempo, a decomposição de um sinal em uma soma de impulsos unitários é dada pela equação:5 x[n] representa um sinal de tempo discreto e o impulso unitário é descrito matematicamente pela função delta de Dirac. \[x[n] =\sum_{k = {-\infty}}^{+\infty}{({x[k]}\delta[n - k]}\]

Considerando que a resposta ao impulso unitário discreto no tempo é a própria equação do sistema6 A equação do sistema é dada por h[n]., o sinal de saída é determinado pela equação: \[y[n] =\sum_{k = {-\infty}}^{+\infty}{({x[k]}h[n - k]}\]

O somatório de convolução, utilizado na análise de sinais e sistemas em tempo discreto, definido como a operação matemática entre o sinal de entrada e a resposta ao impulso do sistema, é representado pela equação:7 Ressaltamos que a convolução, representada pelo sinal diacrítico ‘asterisco’, é uma operação matemática diferente da multiplicação. Andrew J. Reader, professor do King’s College de Londres, detalha o tema nesse vídeo. \[x[n] * h[n] =\sum_{k = {-\infty}}^{+\infty}{({x[k]}h[n - k]}\]

logo, \[ y[n] = x[k] * h[n].\]

Representação gráfica do sistema

Definimos a função h:

h = [1 zeros(1,20) 0.5 zeros(1,10)];
figure; stem(h,'b', 'LineWidth', 2);
title('Resposta ao impulso')
xlabel('t');
ylabel('Amplitude');
print("fig1.png")

Representação gráfica do sinal de entrada

Definimos a entrada x:

x = [0 1:10 ones(1,5)*5 zeros(1,10)];
figure;
stem(x,'b', 'LineWidth', 2);
title('Entrada x')
xlabel('t');
ylabel('Amplitude');
print("fig2.png")

Representação gráfica da saída do sistema

Realizamos a convolução8 O comando conv tem a seguinte sintaxe: c = conv(a, b, shape), onde a, b são os argumentos de entrada e shape o formato ou forma da convolução. Por padrão, quando ausente, shape recebe o argumento “full”, que retorna a convolução completa. Outros dois parâmetros são: “same”, que retorna a parte central da convolução, e a opção “valid”, realiza a convolução de dois sinais de entrada somente quando eles se sobrepõem completamente. da resposta ao impulso h com a entrada x e usamos o comando subplot para mostrar a resposta ao impulso, a entrada e a saída:

% Declaramos as variáveis
h = [1 zeros(1,20) 0.5 zeros(1,10)];
x = [0 1:10 ones(1,5)*5 zeros(1,10)];
% Realizamos a operação de convolução
y = conv(x, h);

% Definimos o tamanho dos vetores
nh = 0:length(h)-1;
nx = 0:length(x)-1;
ny = 0:length(y)-1;

subplot(3,1,1)
stem(nx, x, 'marker','none','LineWidth',1)
title('x(t)');
ylabel('x');
xlabel('t');

subplot(3,1,2)
stem(nh, h,'marker','none', 'LineWidth',1)
title('h(t)');
ylabel('h');
xlabel('t');

subplot(3,1,3)
stem(ny, y, 'marker','none','LineWidth',1)
title('y(t)');
ylabel('y');
xlabel('t');

print("fig3.png")

Considerações finais

Além da possibilidade de execução de scripts de outras linguagens no RStudio, através do pacote knitr, a ferramenta R Markdown permite a geração de relatórios e documentos em diferentes formatos de saída - html ou pdf, por exemplo - nos mais variados modelos e estilos.

Referências:

  1. Felix, Leonardo Bonato (2023): Sinais. Pós Graduação em Inteligência Artificial e Computacional. UFV/Cead.

  2. Reader, Andrew J.(2023): Convolution equation explained simply in 3 forms: discrete, continuous and matrix-vector. Disponível em: https://www.youtube.com/watch?v=t-yjeQmYi5U&list=WL&index=18

  3. “RMarkdown Octave Plot”: https://stackoverflow.com/questions/71512367/rmarkdown-octave-plot

  4. Yihui Xie, J. J. Allaire, Garrett Grolemund(2023): R Markdown: The Definitive Guide.Última atualização em 15/05/2023. Disponível em: https://bookdown.org/yihui/rmarkdown/