Algoritmo de efeito de distorção digital

10

Eu li o livro DAFX de Udo Zölzer sobre o efeito de distorção nas páginas 124-125 e ele diz que a simulação adequada da distorção é dada pela função:

f(x)=x|x|(1ex2/|x|)

Alguém pode explicar essa fórmula e que tipo de sinal temos?

Pelo que entendi, 'x' é o sinal amostrado, então essa é uma sequência de números. O que faz | x | significar? Refere-se ao valor absoluto de x para cada valor amostrado?

Então, se eu quiser implementar esta simulação do efeito de distorção,

  1. Eu preciso saber o comprimento de x (é dado pelo número de amostras)
  2. Em um loop, preciso calcular esta fórmula para cada valor de amostra
  3. depois que o loop termina, recebo o sinal distorcido (em formato digital)

Depois disso, preciso convertê-lo em um sinal analógico para ouvi-lo.

Elior
fonte
2
Observe que há um erro na fórmula fornecida no livro (deve haver um sinal negativo no expoente). Veja minha resposta abaixo.
Matt L.

Respostas:

5

| x | denota o valor absoluto - x / | x | parte da fórmula existe para garantir que o sinal da entrada seja preservado na saída. Em relação à implementação, sim, as etapas que você listou estão corretas.

pichenettes
fonte
11
O que você quer dizer com "distorção real"? Absolutamente qualquer operação que você faça no sinal original seria distorção de qualquer maneira! O que você está tentando fazer?
Pichenettes
11
Distorção é um termo muito vago que descreve qualquer transformação (geralmente indesejada) que altera o sinal. A distorção da guitarra é alcançada por muitos processos diferentes - corte, retificação, sobrecarga - dependendo do tipo de pedal / amplificador em que ocorre - não existe uma fórmula "verdadeira" única ... A fórmula que você possui parece dar uma função sigmoide que simularia sobrecarga; mas acho que pode haver um erro em algum lugar.
pichenettes
11
Você precisa fazer isso no domínio do tempo.
Pichenettes
11
Porque é assim que os efeitos de distorção da guitarra funcionam. Eles foram originalmente feitos com elementos não lineares, como tubos, diodos e transistores posteriores, cujo comportamento é descrito no domínio do tempo por uma função não linear. E você está tentando emular que digitalmente ...
pichenettes
11
O gerador de harmonias sofisticadas de mudança de tom (como o micro pog EHX) ou a transformação espectral sofisticada (não consegue se lembrar do nome do produto) requerem processamento no domínio da frequência. Alguns simuladores de amplificadores / alto-falantes requerem longas convoluções, que são executadas eficientemente por multiplicações no domínio da frequência. Mas, em qualquer caso, NUNCA "pegue a FFT inteira do sinal" - isso é implementado pela adição de sobreposição de FFT de tamanho pequeno (1024 amostras ou mais).
Pichenettes
9

Graças à trama na resposta de Olli Niemitalo, fiquei convencido de que a fórmula dada no livro apresenta um erro de sinal. A não linearidade usada para distorção ou distorção é sempre algum tipo de função de recorte suavizada, que comprime o sinal de entrada. Portanto, amplitudes de entrada pequenas experimentam pouca alteração, enquanto amplitudes de entrada altas são (mais ou menos) suavemente cortadas. E a figura mostrada na resposta de Olli faz exatamente o oposto.

Estou convencido de que a fórmula correta deve ser

(1)f(x)=x|x|(1ex2/|x|)=sgn(x)(1e|x|)

xf(x)sgn(x)|x|=xf(x)sgn(x)

f(x)

insira a descrição da imagem aqui

(1)x/|x|x2/|x|x

se (x> 0)
   y = 1 - exp (-x);
outro
   y = -1 + exp (x);
fim
Matt L.
fonte
Ah, sim, o livro cita incorretamente web.archive.org/web/20070826204128/http://www.notam02.no/… e a descrição acima é a fórmula correta.
Olli Niemitalo 21/02
OK obrigado. Você acha que essa foi a fonte do livro?
Matt L.
Sim, o livro referenciou a tese do aluno. Houve uma segunda tese estudantil norueguesa que tinha a fórmula errada e citou a primeira tese estudantil. Não me preocupei em verificar as datas para ver se o livro copiava a segunda tese sem verificar a fonte original ou se a segunda tese copiava o livro.
Olli Niemitalo 22/02
11
x2/|x|
2

Você pode escrever o corpo da função diretamente no Wolfram Alpha e ele a plotará:

insira a descrição da imagem aqui

Parece um modelador de ondas para mim, e esses podem ser usados ​​como você descreve.

Olli Niemitalo
fonte
11
Agora que vejo seu enredo, estou bastante convencido de que a fórmula do livro está errada. Veja minha resposta. O que você acha?
Matt L.
2
@ MattL.Sim, isso faz muito mais sentido. A função do livro também é descendente, o que causaria uma inversão de fase indesejada.
Olli Niemitalo 21/02