Você está na página 1de 20

Prova II - Processamento

de Sinais
Most important part of doing physics is the knowledge of approximation.

Lev Landau

Victor Dieguez Correa


PUVR-VMA
Universidade Federal Fluminense
victordieguez@id.uff.br
UFF VMA Prova II - Processamento de Sinais Victor Dieguez Correa

Conteúdo

1 Introdução 3

2 Desenvolvimento 6

3 Algoritmo 11

4 Conclusão 18

1
UFF VMA Prova II - Processamento de Sinais Victor Dieguez Correa

Lista de Figuras
1 As primeiras quatro somas da séria de Fourier de uma onda quadrada . . . . . . . . . . . 4
2 Curva de frequência fornecida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3 Curva com dados coletados para análise algoritmica . . . . . . . . . . . . . . . . . . . . . . 6
4 Kernel do input dado pelo impulso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5 Frequências para diferentes valores de pontos . . . . . . . . . . . . . . . . . . . . . . . . . 8
6 Frequência e Domínio temporal de senoides . . . . . . . . . . . . . . . . . . . . . . . . . . 9
7 Exemplo de um filtro passa-baixa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
8 Sinais senoidais filtrados por frequência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
9 Resultado após novas considerações sobre o filtro utilizado . . . . . . . . . . . . . . . . . . 11

2
UFF VMA Prova II - Processamento de Sinais Victor Dieguez Correa

1 Introdução
Um dos principais problemas na atualidade é a utilização de diversas plataformas de informação e a sua
conexão sem perda de dados e detalhes sobre o qeu deseja ser transmitido. Uma dessas plataformas,
extremamente utilizada pela humanidade e uma das mais primordiais é aquela de natureza analógica,
pautada em sinais elétricos e na natureza física da corrente, resistência, amperagem e equipamentos ele-
trônicos para criação dos mais diversos aparelhos com as mais diversas funcionalidades, porém sempre
com o mesmo propósito, senão a medição de dados. Ora, esta medição, muitas das vezes, gera uma quan-
tidade suficientemente grande de dados a serem processadores, calculados e computados, o aparecimento
de meios como o computador parece natural quando se tem o desafio de se saber todas as combinações
possíveis de determinados eventos, ou da realização de extensas contas. Evidentemente, a natureza ana-
lógica do computador se deu lugar a um desenvolvimento lógico e tecnológico mais moderno que veio a
ser denominado digital, que se pauta apenas numa lógica booleana de tratamento de dados. Tudo parece
estar suficientemente emaranhado, temos meios capazes de medir o nosso mundo físico, de forma física,
e meios de computar todas as suas nuances com uma precisão considerada. Todavia, a migração entre
essas plataformas não é feita de maneira imediata, pois sinais digitais são sinais discretos, enquanto sinais
analógios são sinais contínuos, pela própria natureza da nossa descrição.
O processamento de sinais, portanto, está interligado com as diversas formas de se tomar um dado,
analógico ou digital, e transfórma-lo um noutro. Existem diversas maneiras de fazer isso, porém existe
uma em especial que trata um dos principais problemas que enocntramos: Sinais digitais são sinais que
apresentam descontinuidades por salto quando vistos de maneira matemática. Isto é, se representamos o
input x e o output f (x) num plano cartesiano (x, f (x)), encontraremos o que denominamos como descon-
tinuidades por salto, o que é caracterizado pelo fato de terem imagens finitas e |f (x + δ) − f (x − δ)| > ϵ,
em que ϵ torna-se conhecido como o salto associado quando tomamos δ suficientemente pequeno. Uma das
formas de se lidar com esse tipo de descontinuidade é a aproximação dela por uma função que seja suave
porém que simule, da forma mais abrupta possível, uma curva que tenda a descrever diferencialmente esse
salto. Uma forma teórica de se fazer isso é pelas conhecidas Séries de Fourier. Nas quais toda função
f pode ser escrita como

a0 X h nπx nπx i
f (x) = + an cos + bn sin
2 L L
n=1
em que
Z a+2L Z a+2L Z a+2L
1 1 nπx 1 nπx
a0 = f (x) dx an = f (x) cos dx bn = f (x) sin dx
L a L a L L a L

sendo L o comprimento do intervalo associado em nossa análise de aproximação. SEus critérios de con-
vergência e validade não serão expostos aqui, porém a vasta bibliografia associada a tal processo pode ser
encontrada, como por exemplo em [1]. Porém, deixamos algum uma perspectiva visual do que estamos
dizendo acerca da modelagem de descontinuidades por salto 1

1
Fonte: https://commons.wikimedia.org/wiki/File:Fourier_Series.svg

3
UFF VMA Prova II - Processamento de Sinais Victor Dieguez Correa

Figura 1: As primeiras quatro somas da séria de Fourier de uma onda quadrada

Aqui, somos capazes de perceber a natureza da Fourier aproximar os saltos(representados pelas linhas
verticais) de forma diferenciável a ponto de poder modelar uma representação que não se comporta como
uma função de maneira que seja uma função, ainda que com algum erro, o qual é compensado pela
expansão do somatório até o infinito. Porém, ir até o infinito é um problema, uma vez que infinito não é
número, ou seja, não poderemos executar um processo computacional até o infinito, uma vez que estamos
interessados em uma análise que, preferencialmente além de ser feita em vida, também possa ser feita em
um tempo finito. Para isso, nós utilizaremos a Transforma de Fourier Discreta(DFT), a qual se pautará
na análsie da periodicidade de nossa série de Fourier e a sua expansão de acordo com tal periodicidade, ou
seja, informando-nos que basta realizar tal aproximação para um período da função e isso bastará, uma
vez que podemos tomá-lo de forma repetida para o demais espaço que necessitamos de acordo com nossos
dados.
Dessa forma, ao recebemos um sinal analógico, poderemos interpretá-lo por uma DFT. Isto é feito
através do que denominamos Transformada Rápida de Fourier(FFT), a qual nos permite a decomposição
de N pontos em N sinais no tempo de um ponto cada, e com isso, poderemos calcular as DFTs através
da geração de N espectros de frequência. E a partir dessa geração, seremos capazes de teremos o desejado
para a nossa manipulação de dados. Assim, observamos que sempre teremos duas entradas, uma de Sample
Temporal e outra de Sample de frequência e tudo estará de acordo com o sinal recebido e analisado pelo
processamento requerido. Portanto, dado um sinal, teremos sempre um input e um output de acordo com
essa anaĺise tomada para o seu devido estudo. Um questionamento pertinente é, se dada uma frequência
requerida, se é possível entender como poderemos manipular nosso sinal de entrada para que possamos
gerar esta frequência ou seja, como podemos filtrar um sinal de acordo com o desejado por nós em termos
de frequência? Esta pergunta é a principal deste trabalho. Implementaremos códigos em C para a sua

4
UFF VMA Prova II - Processamento de Sinais Victor Dieguez Correa

resposta cujos algoritmos estão todos pautados na bibliografia principal do curso.

5
UFF VMA Prova II - Processamento de Sinais Victor Dieguez Correa

2 Desenvolvimento
Com todo o exposto previamente, seja o seguinte dado

Figura 2: Curva de frequência fornecida

Com isso em mente, o primeiro passo é sairmos de nossa idealização e começarmos a processar os dados
de tal gráfico. Para isso, tomaremos alguns pontos dele para que possamos realizar o nosso algoritmo e
assim criarmos um filtro. Os pontos escolhidos são fornecidos abaixo

Figura 3: Curva com dados coletados para análise algoritmica

6
UFF VMA Prova II - Processamento de Sinais Victor Dieguez Correa

Não necessitamos de todos os pontos de nosso espaço amostral para o nosso algoritmo, estes são
suficientes para ditarem uma aproximação suficientemente boa para o nosso sinal. A escolha da quantidade
de pontos está relacionada com a resolução desejada, assim, quanto maior a resolução, maior a quantidade
de pontos. Neste trabalho, fixamos uma resolução de 10 bits, o que nos informa uma quantidade de 1024
pontos, todavia, como estamos em termos de frequência, isso equivale a dizer uma escolha de 512 pontos
para a representação desta. Ao tomar a aplicação de nosso algoritmo, teremos como input que gera tal
frequência o seguinte dado:

Figura 4: Kernel do input dado pelo impulso

Para sabermos se o nosso input associado ao impulso que gera, teoricamente, a frequência desejada,
devemos analisar em relação ao número de pontos que trabalharemos. Assim, escolhemos N = 30, 70, 150
e teremos como resposta a frequência abaixo dada. Observamos, previamente, porém, que quanto maior a
quantidade de pontos, mais exato tende a ser a nossa aproximação em termos de funções, pois maior será
o espaço amostral que poderemos trabalhar e derivar maiores considerações sobre o nosso modelo.

7
UFF VMA Prova II - Processamento de Sinais Victor Dieguez Correa

Figura 5: Frequências para diferentes valores de pontos

E notamos, realmente, que quanto maior o número N , mais o nosso algoritmo tende ao requerido. Assim,
realmente o nosso processo é bom o suficiente em termos de gerar uma descrição em função do sinal
requerido. Agora, nós usaremos para filtrar um sinal sin fc x com x real e fc uma frequência em Hz
previamente escolhida. O motivo disso pode ser ilustrado na seguinte imagem 2
Nessa imagem, visualizamos uma constataçao que já realizamos previamente, porém com uma perspectiva
distinta: Todo gráfico pode ser decomposto em uma soma de funções senos com determinadas frequências
dadas pela Série de Fourier. Assim, quando utilizamos funções seno em nosso filtro, o resultado esperado
será a manutenção do formato do filtro(uma vez que ele é feito por funções seno), porém a amplitude
e o formato do gráfico serã influenciados pela frequência de nosso seno. O filtro ele funciona como um
ambiente de canalização do sinal, isso pode ser visto também pela imagem abaixo 3
Aqui percebemos claramente que, nesse caso, o sinal será canalizado e diminuído, como se entrasse em
uma região que comprimisse a sua amplitude e modelasse-o ao corpo do filtro. Portanto, quando filtramos
nossa função seno, devemos esperar um resultado que seja análogo ao nosso filtro, porém de uma escala
2
Fonte: https://blog.eletrogate.com/filtro-digital-no-arduino/
3
Fonte: https://edisciplinas.usp.br/pluginfile.php/5826204/mod_resource/content/1/APDS-Quarentena-aula6.
pdf

8
UFF VMA Prova II - Processamento de Sinais Victor Dieguez Correa

Figura 6: Frequência e Domínio temporal de senoides

Figura 7: Exemplo de um filtro passa-baixa

proporcional à frequência, ou seja, o filtro absorverá a função seno(uma vez que, como dito, faz parte de
sua composição) e a sua frequência modificará a amplitude e a dispersão de nosso gráfico. De fato, isso é
o visualizado exatamente quando realizamos a filtragem

9
UFF VMA Prova II - Processamento de Sinais Victor Dieguez Correa

Figura 8: Sinais senoidais filtrados por frequência

O leitor poderá ter que fazer um esforço em uma primeira vista para realizar a identificação e constatar
a manutenção da natureza do filtro, porém visualizamos exatamente o que o nosso filtro faz: Duas seções
amplificadas com um vale entre elas, e isso está visualizado em nosso filtro na altura de 0.3 e 0.1. O filtro
dado para nós tem essa natureza, ele amplifica em dois picos enquanto possui dois vales nas demais que
são precedidos de seções constantes. Por mais que o gráfico possua alguns ruídos, como aquele encontrado
na origem(o que é ocasionado pela aproximação da função e pelo tratamento de dados, o que pode ser
facilmente evitado pela reconstituição do gráfico, porém optamos por deixar para mostrar também que,
nessas ocasiões, podemos tratar tais situações sem perda de generalidade. Entendemos que não é uma
prática boa na hora da construção dum filtro, porém a sua colocação é didática o suficiente e justificada
neste texto), ele ainda permanece com a descrição fiel de nosso modelo, escalonado de acordo com a
frequência aplicada. Notamos que quanto maior a frequência, menos achatado o gráfico tende a ficar e
tende a formar a imagem de nosso filtro original, mostrando que o nosso filtro, de fato, está funcionado e
interagindo com o sinal, canalizando-o por meio de convolução.
Todavia, ficamos insatisfeitos com o comportamento do gráfico. Após alguns dias a mais de estudo,
reparamos que deveríamos, na realidade, aumentar a frequência para termos uma maior escala de nossa
função e uma melhor visualização. Após uma ecolha de frequência mais apropriada para uma melhor
escala de acordo com a natureza do gráfico, temos a confirmação que a filtragem anterior foi eficaz, porém
sua visualização ficou comprometida por causa de termos números pequenos em relação a sua magnitude
total. Após as devidas correções em nosso filtro apontadas como necessários pelos resultados anteriores,
temos o resultado final dado por

10
UFF VMA Prova II - Processamento de Sinais Victor Dieguez Correa

Figura 9: Resultado após novas considerações sobre o filtro utilizado

3 Algoritmo
O algoritmo utilizado, grande parte, é encontrado nas notas de aula disponibilizadas no curso. Dessa
maneira, discutiremos localmente cada parte do código para melhor esclarecimento do trabalho.
A primeira parte do código é dada pelo alocamento do ferramental utilizado em termos de memória,
assim, temos
1 v o i d main ( i n t argc , c h a r ∗ argv [ ] ) {
2
3 int i , j , k e r n e l =150;
4 double ∗RX, ∗IX , ∗MX;
5 double ∗ time ;
6 double FREQUENCY;
7
8 FREQUENCY = a t o f ( argv [ 1 ] ) ;
9
10 RX = ( d o u b l e ∗ ) c a l l o c (TAM, s i z e o f ( d o u b l e ) ) ;
11 IX = ( d o u b l e ∗ ) c a l l o c (TAM, s i z e o f ( d o u b l e ) ) ;
12 MX = ( d o u b l e ∗ ) c a l l o c (TAM, s i z e o f ( d o u b l e ) ) ;
13 time = ( d o u b l e ∗ ) c a l l o c (TAM, s i z e o f ( d o u b l e ) ) ;
14
15 FILE ∗ input , ∗ f o u r i e r _ a r c h i v e , ∗ k e r n e l _ a r c h i v e , ∗MX_archive ;
16
17 i n p u t = f o p e n ( " dados . dat " , " r+" ) ;
18 f o u r i e r _ a r c h i v e = f o p e n ( " f o u r i e r . dat " , "w+" ) ;
19 k e r n e l _ a r c h i v e = f o p e n ( " k e r n e l . dat " , "w+" ) ;

11
UFF VMA Prova II - Processamento de Sinais Victor Dieguez Correa

20 MX_archive = f o p e n ( "MX. dat " , "w+" ) ;


21

Listing 1: Primeira Seção do Código

Aqui, nós lemos a nossa frequência pela compilação no terminal, alogamos a memória para o nosso vetor
real e imaginário, o qual pode ser visto dessa maneira, uma vez que estamos respaldados pelo isomorfismo
canônico entre o espaço complexo e o espaço real bidimensional, e após isso, criamos e lemos os arquivos
necessários para o processo, principalmente aquele que descreve os pontos de frequência requeridos. A
demais seção, descreve a chamada das ações de FFT e de janelamento, o qual escolhemos utilizar o
Hamming por questões de precisão conforme visto na bibliografia
1 f o r ( i = 0 ; i < TAM/ 2 ; i ++)
2 f s c a n f ( input , "%l f \ t%l f " , &RX[ i ] , &IX [ i ] ) ;
3
4 f o u r i e r (RX, IX ) ;
5
6 f o r ( i = 0 ; i < TAM; i ++){
7
8 RX[ i ] /= TAM;
9 IX [ i ] /= −1∗TAM;
10 }
11
12 f o r ( i = 0 ; i < TAM; i ++)
13 f p r i n t f ( f o u r i e r _ a r c h i v e , "%d\ t%l f \n" , i , s q r t ( pow (RX[ i ] , 2 ) + pow ( IX [ i ] , 2 ) ) ) ;
14
15
16 windowing ( k e r n e l , RX, IX ) ;
17
18 f o r ( i = 0 ; i < TAM/ 2 ; i ++)
19 f p r i n t f ( k e r n e l _ a r c h i v e , "%d\ t%l f \n" , i , s q r t ( pow (RX[ i ] , 2 ) + pow ( IX [ i ] , 2 ) ) ) ;
20
21 f o u r i e r (RX, IX ) ;
22
23 f o r ( i = 0 ; i < TAM/ 2 ; i ++){
24
25 MX[ i ] = 2∗ s q r t ( pow (RX[ i ] , 2 ) + pow ( IX [ i ] , 2 ) ) ;
26 time [ i ] =( d o u b l e ) i / ( d o u b l e )TAM;
27 f p r i n t f ( MX_archive , "%l f \ t%l f \n" , time [ i ] ,MX[ i ] ) ;
28 }
29

Listing 2: Segunda Seção do Código

As rotinas aqui realizadas são a conversão dos dados obtidos em frequência para o kernel, e depois a
releitura desses dados após aplicar o janelamento para a verificação da eficácia do processo e do filtro
escolhido de acordo com o valor de pontos selecionado. Portanto, o output final dado por nós advém
após essa gama de processos. Ao fim, realizamos o processo de convolução, que também é uma rotina
fornecida, para filtramos os diversos sinais de seno com a frequência envolvida este é dado por
1 d o u b l e ∗RXsin , ∗ IXsin , i s e n o , aux ;
2 FILE ∗ seno , ∗MXseno ;
3
4 RXsin = ( d o u b l e ∗ ) c a l l o c (TAM, s i z e o f ( d o u b l e ) ) ;
5 I X s i n = ( d o u b l e ∗ ) c a l l o c (TAM, s i z e o f ( d o u b l e ) ) ;
6

12
UFF VMA Prova II - Processamento de Sinais Victor Dieguez Correa

7 s e n o = f o p e n ( "dadosSENO . dat " , "w+" ) ;


8 c h a r buf [ 0 x100 ] ;
9 s n p r i n t f ( buf , s i z e o f ( buf ) , " seno_ %.3 l f . dat " , FREQUENCY) ;
10 MXseno = f o p e n ( buf , "w+" ) ;
11
12
13 f o r ( i s e n o = 0 . 0 ; i s e n o < TAM/ (FREQUENCY∗ 2 ) ; i s e n o+=FREQUENCY∗ 1 )
14 f p r i n t f ( seno , "%l f \ t%l f \n" , i s e n o , s i n ( i s e n o ) ) ;
15
16 f c l o s e ( seno ) ;
17 s e n o = f o p e n ( "dadosSENO . dat " , " r+" ) ;
18 f o r ( i = 0 ; i < TAM/ 2 ; i ++)
19 f s c a n f ( seno , "%l f \ t%l f " , &RXsin [ i ] , &I X s i n [ i ] ) ;
20
21 f o u r i e r ( RXsin , I X s i n ) ;
22
23 f o r ( i = 0 ; i < TAM/ 2 ; i ++){
24
25 aux = RXsin [ i ] ∗RX[ i ] − I X s i n [ i ] ∗ IX [ i ] ;
26 I X s i n [ i ] = RXsin [ i ] ∗ IX [ i ] + I X s i n [ i ] ∗RX[ i ] ;
27 RXsin [ i ] = aux ;
28 }
29
30 f o r ( i = 0 ; i < TAM/ 2 ; i ++)
31 f p r i n t f ( MXseno , "%l f \ t%l f \n" , ( d o u b l e ) i / ( d o u b l e )TAM, 2∗ s q r t ( pow ( RXsin [ i ] , 2 ) + pow (
IXsin [ i ] , 2 ) ) ) ;
32
33

Listing 3: Terceira Seção do Código

Observe que sempre tomamos a norma euclidiana do vetor associado para termos o seu valor em termos de
frequência. Após a realização deste processo, temos a gravação requerida para gerar o processamento de
sinais pelo nosso filtro personalizado. Notamos, ao fim, que utilizamos funções senoidais com 512 pontos,
poderíamos utilizar um sinal de maior comprimento e maior detalhe, bastaria, então, aplicar o processo
para cada N parte do total contendo 512 pontos e assim analisarmos o processo resultante. O código
completo pode ser visto, portanto, abaixo
1 #i n c l u d e <s t d i o . h>
2 #i n c l u d e <math . h>
3 #i n c l u d e < s t d l i b . h>
4
5 #d e f i n e TAM 1024
6
7 v o i d windowing ( i n t k e r n e l , d o u b l e ∗RX, d o u b l e ∗IX ) ;
8
9 v o i d f o u r i e r ( d o u b l e ∗RX, d o u b l e ∗IX ) ;
10
11 v o i d main ( i n t argc , c h a r ∗ argv [ ] ) {
12
13 int i , j , k e r n e l =150;
14 double ∗RX, ∗IX , ∗MX;
15 double ∗ time ;
16 double FREQUENCY;
17
18 FREQUENCY = a t o f ( argv [ 1 ] ) ;

13
UFF VMA Prova II - Processamento de Sinais Victor Dieguez Correa

19
20 RX = ( d o u b l e ∗ ) c a l l o c (TAM, s i z e o f ( d o u b l e ) ) ;
21 IX = ( d o u b l e ∗ ) c a l l o c (TAM, s i z e o f ( d o u b l e ) ) ;
22 MX = ( d o u b l e ∗ ) c a l l o c (TAM, s i z e o f ( d o u b l e ) ) ;
23 time = ( d o u b l e ∗ ) c a l l o c (TAM, s i z e o f ( d o u b l e ) ) ;
24
25 FILE ∗ input , ∗ f o u r i e r _ a r c h i v e , ∗ k e r n e l _ a r c h i v e , ∗MX_archive ;
26
27 i n p u t = f o p e n ( " dados . dat " , " r+" ) ;
28 f o u r i e r _ a r c h i v e = f o p e n ( " f o u r i e r . dat " , "w+" ) ;
29 k e r n e l _ a r c h i v e = f o p e n ( " k e r n e l . dat " , "w+" ) ;
30 MX_archive = f o p e n ( "MX. dat " , "w+" ) ;
31
32 f o r ( i = 0 ; i < TAM/ 2 ; i ++)
33 f s c a n f ( input , "%l f \ t%l f " , &RX[ i ] , &IX [ i ] ) ;
34
35 f o u r i e r (RX, IX ) ;
36
37 f o r ( i = 0 ; i < TAM; i ++){
38
39 RX[ i ] /= TAM;
40 IX [ i ] /= −1∗TAM;
41 }
42
43 f o r ( i = 0 ; i < TAM; i ++)
44 f p r i n t f ( f o u r i e r _ a r c h i v e , "%d\ t%l f \n" , i , s q r t ( pow (RX[ i ] , 2 ) + pow ( IX [ i ] , 2 ) ) ) ;
45
46
47 windowing ( k e r n e l , RX, IX ) ;
48
49 f o r ( i = 0 ; i < TAM/ 2 ; i ++)
50 f p r i n t f ( k e r n e l _ a r c h i v e , "%d\ t%l f \n" , i , s q r t ( pow (RX[ i ] , 2 ) + pow ( IX [ i ] , 2 ) ) ) ;
51
52 f o u r i e r (RX, IX ) ;
53
54 f o r ( i = 0 ; i < TAM/ 2 ; i ++){
55
56 MX[ i ] = 2∗ s q r t ( pow (RX[ i ] , 2 ) + pow ( IX [ i ] , 2 ) ) ;
57 time [ i ] =( d o u b l e ) i / ( d o u b l e )TAM;
58 f p r i n t f ( MX_archive , "%l f \ t%l f \n" , time [ i ] ,MX[ i ] ) ;
59 }
60
61 d o u b l e ∗RXsin , ∗ IXsin , i s e n o , aux ;
62 FILE ∗ seno , ∗MXseno ;
63
64 RXsin = ( d o u b l e ∗ ) c a l l o c (TAM, s i z e o f ( d o u b l e ) ) ;
65 I X s i n = ( d o u b l e ∗ ) c a l l o c (TAM, s i z e o f ( d o u b l e ) ) ;
66
67 s e n o = f o p e n ( "dadosSENO . dat " , "w+" ) ;
68 c h a r buf [ 0 x100 ] ;
69 s n p r i n t f ( buf , s i z e o f ( buf ) , " seno_ %.3 l f . dat " , FREQUENCY) ;
70 MXseno = f o p e n ( buf , "w+" ) ;
71
72
73 f o r ( i s e n o = 0 . 0 ; i s e n o < TAM/ (FREQUENCY∗ 2 ) ; i s e n o+=FREQUENCY∗ 1 )
74 f p r i n t f ( seno , "%l f \ t%l f \n" , i s e n o , s i n ( i s e n o ) ) ;

14
UFF VMA Prova II - Processamento de Sinais Victor Dieguez Correa

75
76 f c l o s e ( seno ) ;
77 s e n o = f o p e n ( "dadosSENO . dat " , " r+" ) ;
78 f o r ( i = 0 ; i < TAM/ 2 ; i ++)
79 f s c a n f ( seno , "%l f \ t%l f " , &RXsin [ i ] , &I X s i n [ i ] ) ;
80
81 f o u r i e r ( RXsin , I X s i n ) ;
82
83 f o r ( i = 0 ; i < TAM/ 2 ; i ++){
84
85 aux = RXsin [ i ] ∗RX[ i ] − I X s i n [ i ] ∗ IX [ i ] ;
86 I X s i n [ i ] = RXsin [ i ] ∗ IX [ i ] + I X s i n [ i ] ∗RX[ i ] ;
87 RXsin [ i ] = aux ;
88 }
89
90 f o r ( i = 0 ; i < TAM/ 2 ; i ++)
91 f p r i n t f ( MXseno , "%l f \ t%l f \n" , ( d o u b l e ) i / ( d o u b l e )TAM, 2∗ s q r t ( pow ( RXsin [ i ] , 2 ) + pow (
IXsin [ i ] , 2 ) ) ) ;
92
93
94 }
95
96 v o i d f o u r i e r ( d o u b l e ∗RX, d o u b l e ∗IX ) {
97
98 i n t i , j = TAM/ 2 , k ;
99 i n t m_log = ( i n t ) ( l o g (TAM) / l o g ( 2 ) ) ;
100 i n t L , LE , LE2 , a u x i l i a r ;
101
102 d o u b l e TR, TI ;
103 d o u b l e UR, UI ;
104 d o u b l e SR , SI ;
105
106 f o r ( i =1; i < TAM−2; i ++){
107
108 i f ( i < j ){
109
110 TR = RX[ j ] ;
111 TI = IX [ j ] ;
112 RX[ j ] = RX[ i ] ;
113 IX [ j ] = IX [ i ] ;
114 RX[ i ] = TR;
115 IX [ i ] = TI ;
116 }
117
118 k = TAM/ 2 ;
119
120 w h i l e ( k <= j ) {
121
122 j −= k ;
123 k /= 2 ;
124 }
125
126 j += k ;
127 }
128
129 f o r (L=1; L <= m_log ; L++){

15
UFF VMA Prova II - Processamento de Sinais Victor Dieguez Correa

130
131 LE = ( i n t ) pow ( 2 , L) ;
132 LE2 = LE/ 2 ;
133 UR = 1 ;
134 UI = 0 ;
135 SR = c o s (M_PI/ ( d o u b l e ) LE2 ) ;
136 SI = ( −1) ∗ s i n (M_PI/ ( d o u b l e ) LE2 ) ;
137
138 f o r ( j =1; j<=LE2 ; j ++){
139 f o r ( i=j −1; i <= TAM−1; i=i+LE) {
140
141 a u x i l i a r = i + LE2 ;
142 TR = RX[ a u x i l i a r ] ∗UR − IX [ a u x i l i a r ] ∗ UI ;
143 TI = RX[ a u x i l i a r ] ∗ UI + IX [ a u x i l i a r ] ∗UR;
144 RX[ a u x i l i a r ] = RX[ i ] − TR;
145 IX [ a u x i l i a r ] = IX [ i ] − TI ;
146 RX[ i ] = RX[ i ] + TR;
147 IX [ i ] = IX [ i ] + TI ;
148 }
149
150 TR = UR;
151 UR = TR∗SR − UI∗ SI ;
152 UI = TR∗ SI + UI∗SR ;
153 }
154 }
155 }
156
157 v o i d windowing ( i n t k e r n e l , d o u b l e ∗RX, d o u b l e ∗IX ) {
158
159 i n t i , j , k , index ;
160 d o u b l e ∗ time ;
161
162 time =( d o u b l e ∗ ) m a l l o c (TAM∗ s i z e o f ( d o u b l e ) ) ;
163
164 f o r ( i =0; i < TAM; i ++){
165
166 index = i + kernel /2;
167
168 i f ( i n d e x > TAM−1)
169 i n d e x = i n d e x − TAM;
170
171 time [ i n d e x ] = RX[ i ] ;
172 RX[ i ] = 0 ;
173 IX [ i ] = 0 ;
174 }
175
176 f o r ( i =0; i < TAM; i ++)
177 RX[ i ] = time [ i ] ;
178
179
180 f o r ( i =0; i < TAM; i ++){
181
182 i f ( i <= k e r n e l )
183 RX[ i ] = RX[ i ] ∗ ( 0 . 5 4 − 0 . 4 6 ∗ c o s ( ( 2 . ∗M_PI∗ i ) / k e r n e l ) ) ;
184
185 else{

16
UFF VMA Prova II - Processamento de Sinais Victor Dieguez Correa

186 RX[ i ] = 0 ;
187 IX [ i ] = 0 ;
188 }
189 }
190 }
191

Listing 4: Código Completo

17
UFF VMA Prova II - Processamento de Sinais Victor Dieguez Correa

4 Conclusão
Com todo o apresentado, fomos capazes de implementar tanto o tratamento de um sinal de frequência
requerido para a modelagem de sua forma em função para manipulação e utilização assim como testá-lo em
ambiente prático por meio de funções snoidais. Visualizamos que o seu filtro é proporcional à frequência
que pretendemos filtrar e que o formato do filtro tende a se preservar por conta da natureza canalizadora
que este possui. Ao fim, entendemos que as aplicações de métodos discretos são suficientes para tratarmos
uma gama de dados suficientemente grande e que podemos também dividir nosso espaço amostral assim
se requerido, de acordo com a quantidade de bits suficientes para a nossa leitura.

18
UFF VMA Prova II - Processamento de Sinais Victor Dieguez Correa

Referências
[1] Georgi P Tolstov. Fourier series. Courier Corporation, 2012.

19

Você também pode gostar