Matemática

Scilab FFT HOWTO

Scilab FFT HOWTO
Scilab é uma ótima ferramenta para muitos usos em trabalhos científicos e de engenharia. Este artigo cobrirá o caso especial de FFT, Fast Fourier Transform.

Primeiro, vamos esclarecer o que é a transformação rápida de Fourier e por que você deseja usá-la. A matemática tem tudo a ver com frequências. A transformada de Fourier é um método para destacar ondas menores em uma onda complexa. Isso parecia complexo; quando você ouve música, você ouve muitas notas diferentes do cantor, instrumentos e assim por diante. Como humanos, muitas vezes podemos ouvir a guitarra por conta própria, mas tente identificá-la com a tecnologia em uma gravação e você terá problemas. A tecnologia moderna pode fazer isso, graças às diferentes encarnações das equações básicas de Fourier que foram desenvolvidas ao longo dos anos. Os usos modernos da série Fourier são compressão de imagem e vídeo, GPS e varreduras de ressonância magnética. Tudo isso faz uma aproximação da fonte e usa a série Fourier para economizar memória e obter resultados mais rápidos.

O matemático Jean-Baptiste Joseph Fourier estava realmente tentando resolver a equação do calor, para que fosse possível calcular como o calor se propaga na matéria sólida. O que ele descobriu foi muito mais útil do que isso, embora seus métodos tenham sido posteriormente aprimorados para uma versão mais formal. As equações agora são usadas em uma ampla variedade de campos.

Para destacar uma frequência específica em um sinal complexo, você pode usar alguns cálculos, as transformadas rápidas de Fourier. A base matemática para isso requer alguma prática. A Khan Academy é um bom lugar para aprender matemática.

Quando você precisa analisar quaisquer ondas, você pode usar funções seno para aproximar a onda total e obter todos os sinais separados da onda mista. Ou vice-versa, você pode fazer uma onda complexa a partir de várias ondas senoidais. Esta é a ideia básica por trás da matemática.

Para entender melhor suas transformadas de Fourier, uma boa prática é escrevê-las você mesmo. No Scilab você tem uma linguagem de programação simples projetada com ênfase na matemática.
As diferentes tarefas de que você vai precisar nas transformações de Fourier começam com a localização dos coeficientes de uma transformação. A razão é que isso é o que é usado para compressão de imagens e muitos outros processos.

Quando você aprende o básico da série, a primeira coisa que usa são os coeficientes. As equações são assim:

O código para resolvê-los é bastante simples, ele começa com uma função. Esta função implementa a transformada de Fourier em pequenos pedaços.
Para definir uma função, você usa a construção óbvia de 'função'. Abaixo está uma série de Fourier para uma onda quadrada:

função y =f(z)
y = 4 * sin (t) / 1 *% pi + 4 * sin (3 * t) / 3 *% pi + 4 * sin (5 * t) / 5 *% pi + 4 * sin (7 * t) / 7 *% pi
+ 4 * sin (9 * t) / 9 *% pi
função final

Para deixar a onda ainda mais quadrada, é uma aproximação, afinal, você precisa continuar aumentando o número de termos. Quando você está procurando recriar um padrão, digamos um desenho animado, você usa a transformada de Fourier de uma maneira muito semelhante. Você só precisa considerar o período como infinito.

Simples certo? Bem, não sem o conhecimento básico de matemática. Experimente alguns exemplos, usando o Scilab.

Este exemplo mostra a combinação de sinal mais simples possível; dois sinais de frequência diferente.

// Escolha um tamanho de amostra
 
N = 100;
 
// Defina a sequência, isso cria o array
 
n = 0: N-1;
 
// Crie a frequência dos sinais
 
w1 =% pi / 4
 
w2 =% pi / 8
 
// Faça os sinais de amostra
 
s1 = cos (w1 * n); // O primeiro componente do sinal
 
s2 = cos (w2 * n); // O segundo componente do sinal
 
// Combine os dois em um sinal
// Neste caso, fazemos um sinal de limpeza simples.
 
f = s1 + s2;
 
// Aqui está o sinal resultante pronto para transformação.
 
figura (0);
plot (f);
 
// A transformada de Fourier deste sinal deve mostrar apenas a frequência dos componentes.
 
F = fft (f);
 
F_abs = abs (F);
 
figura 1);
plot (n, F_abs);
 
Figura 2);
plot (F);

Use o exemplo acima para praticar como a transformação funciona. Certifique-se de alterá-lo para filtrar de maneiras diferentes.

Uma dica é usar o console Scilab para ver o que as variáveis ​​contêm em cada etapa do programa, desta forma você também pode ver que 'F' tem um conteúdo imaginário. Tente alterar o äfä de outra maneira para obter um resultado mais correto.

Na indústria, o uso mais comum das transformadas de Fourier é para analisar o sinal. Para filtrar as frequências de um sinal ruidoso, você precisa começar criando ou importando um sinal.  O seguinte snippet de código cria um sinal misto de duas frequências, 50 e 70 Hz. No código, você também pode ver o uso de 'grand', esta é a chamada do Scilab para random. Esses valores aleatórios são adicionados para tornar o sinal um pouco mais ruidoso, mais próximo da realidade.

sample_rate = 1000;
t = 0: 1 / sample_rate: 0.6;
N = tamanho (t, '*'); //Número de amostras
s = sin (2 *% pi * 50 * t) + sin (2 *% pi * 70 * t +% pi / 4) + grand (1, N, 'nem', 0,1);
Agora, você pode plotar 's' como uma função de 't' e ver que o gráfico parece confuso.
>> plot (t, s);

Aqui, é hora de experimentar a mais simples das transformadas de Fourier, fazer de 'y' a transformada de Fourier de s.

y = fft (s);

fft

Se você plotar 'y' como uma função de 't', você obterá um padrão um tanto simétrico que varia de 0 a 0.6. Os dois picos são o que procuramos, mas agora os estamos vendo no domínio do tempo. O que realmente aconteceu foi que o resultado ainda continha os valores imaginários. Para encontrar as duas frequências no domínio da frequência, precisamos de mais algumas operações para encontrar apenas os números reais. E então você pega o valor absoluto dos resultados. O gráfico aponta claramente as frequências originais.

Aqui está o código:

// s é real, então a resposta fft é simétrica conjugada e retemos apenas a primeira
N / 2 pontos
f = taxa_da_mostra * (0: (N / 2)) / N; // vetor de frequência associado
n = tamanho (f, '*')
clf ()
plot (f, absy (1: n)))

Este é o uso mais comum da transformada de Fourier. Usando este sistema, você pode encontrar qualquer frequência em um sinal complexo e barulhento. As equações são amplamente utilizadas em muitas indústrias hoje.
A função fft2 do Scilab é a versão bidimensional da transformação rápida de Fourier.

Uma ótima maneira de praticar é escolher os tons DTMF, pressionar um botão e fazer com que o Scilab descubra a tecla correta.

As demos no próprio Scilab contêm uma amostra de arquivos de som, estude-a.

Se você quiser se aprofundar, aqui estão alguns links para leituras adicionais.

Literatura avançada:

https: // cnx.org / contents / [email protected] / Implementing-FFT-in-Practice # uid8

Volfrâmio…

http: // demonstrações.volfrâmio.com / ComplexAndRealPlanesOfDiscreteFourierTransforms /

Implementando em outros idiomas:

https: // www.nayuki.io / page / how-to-implement-the-discrete-fourier-transform

Para ter a sensação certa do assunto:

https: // melhor explicado.com / artigos / um-guia-interativo-para-a-transformação-de-fourier /

Mecanismos de jogos gratuitos e de código aberto para o desenvolvimento de jogos Linux
Este artigo cobrirá uma lista de mecanismos de jogo gratuitos e de código aberto que podem ser usados ​​para desenvolver jogos 2D e 3D no Linux. Exist...
Tutorial de Shadow of the Tomb Raider para Linux
Shadow of the Tomb Raider é a décima segunda adição à série Tomb Raider - uma franquia de jogos de ação e aventura criada pela Eidos Montreal. O jogo ...
Como aumentar o FPS no Linux?
FPS significa Quadros por segundo. A tarefa do FPS é medir a taxa de quadros em reproduções de vídeo ou desempenho de jogos. Em palavras simples, o nú...