Por que uma onda continuamente decrescente de frequência começa a aumentar sua frequência além da metade de seu comprimento?

7

Estou tentando programaticamente gerar uma onda (seno ou quadrado) com uma frequência continuamente decrescente. Para fazer isso, simplesmente multiplico a frequência inicial por um valor decrescente, que linearmente passa de 1 a 0, em etapas intermediárias ao longo de um determinado período de tempo. Fiquei intrigado ao ver (e ouvir) que, exatamente na metade do período, a frequência começou a aumentar novamente. Eu verifiquei o valor da frequência, mas está tudo ok. Só posso usar a primeira metade da onda, mas seria ótimo entender o que estou experimentando. Qualquer ajuda apreciada! obrigado

rotor
fonte
Parece-me mais como se você tivesse um fator de escala errado ou compensado em algum lugar e realmente aumentasse sua modulação de frequência de 1 para -1.
precisa saber é o seguinte
2
Por favor, mostre-nos exatamente como você cria a onda senoidal ou quadrada.
Jim Clay

Respostas:

9

Verifique se sua frequência não atinge valores abaixo de 0 ou acima da metade da taxa de amostragem.

Poste mais informações / código sobre como você gera sua forma de onda! Provavelmente, você não está fazendo isso corretamente.

Por exemplo, se você deseja gerar uma onda senoidal com uma frequência variável no tempo f(t) (por exemplo, para implementar a modulação de frequência), gerando algo como:

y(t)=sin(2πtf(t))

está errado, porque sua frequência instantânea é:

fi(t)=12πdϕ(t)dt

E:

12πd2πtf(t)dtf(t)

Exceto no caso específico em que f(t) é uma constante.

A maneira correta de gerar uma onda senoidal com frequência variável no tempo f(t) é assim com:

y(t)=sin(2π0tf(τ)dτ)

Na fala do sintetizador, o registro / variável acumulando a frequência instantânea para avaliar a 0tf(τ)dτ quantidade é chamada de acumulador de fase.

http://en.wikipedia.org/wiki/Frequency_modulation

http://en.wikipedia.org/wiki/Instantaneous_phase

pichenettes
fonte
Muito obrigado pela sua resposta, que explicou o que eu estava fazendo de errado. A mudança para uma implementação baseada no acumulador de fases resolveu o problema.
Rotor