Interpolação Cúbica Síntese

Interpolação Cúbica Síntese

por Henrique Stagni -
Número de respostas: 2

Minha síntese está funcionando bem, qndo não usamos interpolação cúbica. Fazendo só o chão do índice da amostra obtemos um resultado audível.

Usando interpolação cúbica, a síntese pára após algumas sílabas, só dando um estalo no fim do arquivo. Percebi que a 'culpa' é, na conta da interpolação, das partes que multiplicam x2, x0 e x4. Se faço com que elas tenham menos peso na conta (divindo por mais) o som dura mais antes de parar antes da hora. Por outro lado, fazendo a interpolação apenas com um oscilador as coisas funcionam.

Então algumas dúvidas que podem estar relacionadas:

 -Existe algum cuidado especial que tem que ser feito na conta da interpolação cúbica? Alguma ordem certa para não ter imprecisão numérica?

-Eu tenho que verificar se as amostras de um bloco estão no intervalo [-1,1] e dividir pelo valor máximo(em modulo) das amostras do bloco?

Em resposta à Henrique Stagni

Re: Interpolação Cúbica Síntese

por Marcelo Queiroz -

Oi, Henrique!

As diferenças de valores da conta da interpolação cúbica para o truncamento não poderiam ser grandes, este é apenas um refinamento que reduz o ruído de interpolação. Você pode colocar no código algum teste para comparar os valores produzidos pelo truncamento (que você diz que está funcionando) e pela interpolação, e dar um post() quando encontrar algo grande (por exemplo, maior que 0.1).

A fórmula da interpolação não tem nenhum problema, mas talvez a interpretação dos termos é que não tenha ficado clara. Por exemplo, os "y" que aparecem lá são sempre valores entre 0 e 1 (algo que seu programa pode checar...). Os 4 pontos (x0,x1,x2,x3) precisam ser calculados mod S. E a fórmula produz diretamente o valor correspondente à função seno (e não, como no caso do truncamento, um índice na tabela).

E isso não tem relação nenhuma com as durações, que são determinadas apenas pelos parâmetros M e N, e não pelos valores que serão produzidos.

Embora teoricamente a interpolação pudesse produzir valores fora do intervalo [0,1] (por exemplo, se os valores fossem T[x0]=T[x3]=0.9, T[x1]=T[x2]=1), no caso da função seno isso não vai acontecer.

Em resposta à Marcelo Queiroz

Re: Interpolação Cúbica Síntese

por Henrique Stagni -

OK, obrigado! O erro não era na interpolação em si, mas na leitura das duas primeiras amplitudes de cada dt. Por 'azar' a versão truncada funcionava, mas essa pequena diferença de cada seno interpolado multiplicada por amplitudes absurdas davam números absurdos. De qualquer forma, agora a versão truncada produz resultados muito parecidos com os da interpolada (só percebo diferença sonora diminuindo o tamanho da tabela do seno).