Академический Документы
Профессиональный Документы
Культура Документы
% inicialização de variáveis:
s_prev = 0;
s_prev2 = 0;
totalpower = 0;
function [freqpk,fcents]=tuneloop(fsel,varargin)
% [freqpk,fcents]=tuneloop(fsel,varargin) - Função para determinar a
% frequência do sinal de entrada (freqpk) e seu desvio (fcents) em relação à frequência de
% afinação (fsel) desejada. Deve ser informado o modo de afinação desejado (varagin)
% e, caso seja um dos modos de teste, o valor do desvio percentual (deltf)
% da frequência do sinal de entrada a simular.
%
% Uso:
% Modo de teste sem gravação: [freqpk,fcents]=tuneloop(fsel,'test',deltf);
% Modo de teste com gravação: [freqpk,fcents]=tuneloop(fsel,'autorec',deltf);
% Modo de gravação (sinal ambiente): [freqpk,fcents]=tuneloop(fsel,'rec');
%
% Diferença entre os modos de uso:
% * No modo de teste sem gravação, o programa gera um vetor com os valores
% calculados para uma senoide na frequência f_in=fsel+*(1+deltf/100), ao
% invés de capturar e amostrar um sinal de áudio. Desta forma, pode-se
% validar todo o algoritmo responsável pelo processamento do sinal, sem
% estar sujeito aos possíveis erros advindos do processo de captura com o
% microfone.
%
% * No modo de teste com gravação, novamente é gerado um vetor senoidal com
% o mesmo método, mas desta vez é utilizada a função sound do Matlab para
% emitir a nota correspondente à frequência f_in através da caixa de som.
% Enquanto o áudio é emitido, é utilizada a função recordblocking do
% Matlab para capturar e amostrar este mesmo áudio através do microfone
% do computador, armazenando o sinal amostrado em um vetor. Desta forma,
% pode-se testar o processamento já incluindo a captura de um sinal de
% áudio cuja frequência pode-se escolher livremente e com uma boa
% confiança (sujeita apenas à qualidade da caixa de som usada).
%
% * No modo de gravação, o afinador opera na forma convencional,
% simplesmente gravando e amostrando um sinal de áudio através do
% microfone do computador, para então processá-lo.
%
% Processamento do sinal:
% O processamento se dá incialmente pela passagem do vetor de sinal
% amostrado por um filtro digital (Algoritmo de Goertzel) e, em seguida,
% pela avaliação do quão distante sua frequência se encontra da
% frequência desejada de afinação (fsel). O resultado é a frequência para
% a qual a saída do filtro teve maior amplitude (dentre a faixa de
% frequências analisadas), e o valor percentual do desvio desta
% frequência em relação a fsel. Um desvio fcents=-100 indica que a nota
% já está a cerca de um semi-tom abaixo da afinação, enquanto o valor de
% fcents=50 indica um desvio de um quarto de tom acima da nota desejada.
%
% clc;
% clear;
% close all;
% Exibição do resultado:
fprintf('\n\nMedição: %.2fHz %+.1f centésimos (=%.2fHz).\n',fsel,fcents,freqpk);
% fprintf('\nPotência: %7.3f%%\n',100*fpwr_max/0.5); %em relação ao máximo esperado
end