Sintetizador Synth Magic

Software e Hardware para uC STM

Moderadores: andre_luis, 51

Re: Sintetizador Synth Magic

Mensagempor Guri » 01 Set 2020 10:11

Veja um exemplo de modelagem de ruido, observe a diferença:
Entrada ADC 8bits sample rate 22050hz:
O ruído é elevado a uma frequencia maior, somente o ruído.


Exemplo 1 esta sem modelagem:
https://soundcloud.com/musica-plena/03- ... lagen-ns-1

Exemplo 2 esta com modelagem:
https://soundcloud.com/musica-plena/04- ... delagem-ns
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Sintetizador Synth Magic

Mensagempor eletroinf » 01 Set 2020 11:21

Teria como saber qual técnica foi aplicada nesse exemplo aí? (nome ou referência ao material técnico)

O que me vem em mente é adicionar ruído conhecido ao sinal analógico e depois subtrair digitalmente (Dither), como descrito aqui:
http://www.robertwannamaker.com/writings/ieee.pdf

Ou ainda pode ser usado oversampling para aumentar a resolução, considerando que o sinal analógico contenha ruído gaussiano (já testei oversampling e no geral funciona bem). Mas aí o resultado ficaria maior que 8 bits, tipo 9 ou 10 bit, o que leva a usar um uC decente com ADC de 12 bit, barato ... :mrgreen: :roll:

Edit: Link da tese do cidadão, interessante:
http://www.robertwannamaker.com/writings/rw_phd.pdf
"De cada um segundo sua capacidade a cada um segundo sua necessidade."
Avatar do usuário
eletroinf
Word
 
Mensagens: 948
Registrado em: 12 Out 2006 14:59
Localização: Santa Maria - RS

Re: Sintetizador Synth Magic

Mensagempor Guri » 01 Set 2020 21:06

Pena que a maioria das coisas boas em eletrônica é em inglês, Alemão, Japonês... :D
Digo "pena" porque é penoso para um novato como eu entender.

O que você quis dizer com:
eletroinf escreveu:O que me vem em mente é adicionar ruído conhecido ao sinal analógico e depois subtrair digitalmente (Dither), como descrito aqui:


Não entendi a lógica de como isso funciona!
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Sintetizador Synth Magic

Mensagempor eletroinf » 02 Set 2020 16:31

Pelo meu entendimento, uma das maneiras de usar o Dither é adicionar um ruído randômico com amplitude de 1/2 LSB do adc (pode ser gerado por um diodo). Este ruído faz com que o sinal oscile o suficiente para que o LSB seja ajustado de acordo com a média do ruído adicionado ao sinal que está sendo convertido. Por exemplo, se o sinal medido chega a 90 % do valor necessário para acionar o LSB, sem o ruído de 1/2 LSB, a ativação deste bit não ocorreria, enquanto com a técnica do Dither o LSB seria ativado.
Existe uma outra possibilidade, que é adicionar ruído com amplitude relativamente alta e depois subtrair ele digitalmente do sinal resultante da conversão ADC.


Seguem alguns links sobre o assunto, inclusive para documentação, neste excelente tópico!

ADC Input Noise: The Good, The Bad, and The Ugly. Is No Noise Good Noise?
https://www.analog.com/en/analog-dialog ... noise.html

Overcoming Converter Nonlinearities with Dither
https://www.analog.com/media/en/technic ... AN-410.pdf

How does Quantization Noise sound?
https://dspillustrations.com/pages/post ... sound.html

Dithering Explained: What it is, when to use it, and why it's important
http://darkroommastering.com/blog/dithering-explained/
"De cada um segundo sua capacidade a cada um segundo sua necessidade."
Avatar do usuário
eletroinf
Word
 
Mensagens: 948
Registrado em: 12 Out 2006 14:59
Localização: Santa Maria - RS

Re: Sintetizador Synth Magic

Mensagempor denis » 02 Set 2020 17:27

eletroinf
Muito bom este material sobre Dithering, vou aproveitar para estudar melhor esta técnica.



eletroinf escreveu:Pelo meu entendimento, uma das maneiras de usar o Dither é adicionar um ruído randômico com amplitude de 1/2 LSB do adc (pode ser gerado por um diodo). Este ruído faz com que o sinal oscile o suficiente para que o LSB seja ajustado de acordo com a média do ruído adicionado ao sinal que está sendo convertido. Por exemplo, se o sinal medido chega a 90 % do valor necessário para acionar o LSB, sem o ruído de 1/2 LSB, a ativação deste bit não ocorreria, enquanto com a técnica do Dither o LSB seria ativado.
Existe uma outra possibilidade, que é adicionar ruído com amplitude relativamente alta e depois subtrair ele digitalmente do sinal resultante da conversão ADC.


Seguem alguns links sobre o assunto, inclusive para documentação, neste excelente tópico!

ADC Input Noise: The Good, The Bad, and The Ugly. Is No Noise Good Noise?
https://www.analog.com/en/analog-dialog ... noise.html

Overcoming Converter Nonlinearities with Dither
https://www.analog.com/media/en/technic ... AN-410.pdf

How does Quantization Noise sound?
https://dspillustrations.com/pages/post ... sound.html

Dithering Explained: What it is, when to use it, and why it's important
http://darkroommastering.com/blog/dithering-explained/
denis
Byte
 
Mensagens: 257
Registrado em: 06 Mar 2007 12:29
Localização: Americana - SP

Re: Sintetizador Synth Magic

Mensagempor Guri » 02 Set 2020 23:35

Essa técnica eu não conhecia, achei interessante e vou tentar fazer um teste prático.

Outro detalhe interessante que tenho notado é que quanto maior for o nível de sinal menos perceptível é o ruído de quantização na hora de reproduzir.
Quanto ao DAC eletroinf, poderias utilizar um DAC por PWM, em meus testes tive bons resultados com PWM acima de 100khz, no meu caso específico utilizo 180khz e um PWM de 32bits, no meu caso uso um ARM. Mas estou pensando seriamente em migrar para um DSP da texas ou analog, o grande problema é o preço desses bichinhos.

Andei vendo algumas coisas sobre filtros digitais e achei interessante o filtro de média móvel para limpar o sinal de áudio, aplicações em áudio, se bem que ainda não testei nem sequer entrei no mérito dos filtros, mas estou curioso para mexer com isso.

Olhando rápidamente para o post da ANALOG, notei que eles mencionam a técnica de média móvel para melhorar o ruído de quantização...
Tô curioso para testar na prática esse recurso...vamos ver no que dá.
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Sintetizador Synth Magic

Mensagempor eletroinf » 03 Set 2020 10:35

Bom, eu nunca mexi com isso, por isso o que digo são algo como especulações, então:
Se estás usando um uC de 32 bit, porque não usar o ADC dele de 12 bit, fazer tudo em 16 bit? Poderia usar uma versão desses stm32103Rxxx que tem dois DAC de 12 bit.
Não imagino qual seria o racional de usar um DSP, considerando os teus relatos.

Segue mais um site que eu considero bom nesse assunto, inclusive tem um programa free para calcular filtros:
http://digitalfilter.com/enindex.html

E tem o IowaHills, que tem teoria e programas de cálculo dos filtros (tem os código fonte também):
http://www.iowahills.com/
"De cada um segundo sua capacidade a cada um segundo sua necessidade."
Avatar do usuário
eletroinf
Word
 
Mensagens: 948
Registrado em: 12 Out 2006 14:59
Localização: Santa Maria - RS

Re: Sintetizador Synth Magic

Mensagempor Guri » 03 Set 2020 10:52

eletroinf escreveu:Bom, eu nunca mexi com isso, por isso o que digo são algo como especulações, então:
Se estás usando um uC de 32 bit, porque não usar o ADC dele de 12 bit, fazer tudo em 16 bit? Poderia usar uma versão desses stm32103Rxxx que tem dois DAC de 12 bit.
Não imagino qual seria o racional de usar um DSP, considerando os teus relatos.

Segue mais um site que eu considero bom nesse assunto, inclusive tem um programa free para calcular filtros:
http://digitalfilter.com/enindex.html

E tem o IowaHills, que tem teoria e programas de cálculo dos filtros (tem os código fonte também):
http://www.iowahills.com/


Eu já estou utilizando 16bits, e o uso de um DSP é interessante devido a velocidade de processamento dos cálculos (Porém para mim no momento é inviável por questões de custos, mas é um SONHO). Isso é apenas uma cogitação, porque a minha tese é em fazer música com MCUs comuns. Quanto aos famigerados 8bits, me deu essa inspiração, pois tenho visto métodos de interpolação interessantes que aliviam o dhirt consideravelmente e isso me abriu uma curiosidade em ver o funcionamento dessa técnica. O post da analog device é muito interessante e estou analisando a viabilidade de entender isso e tentar por em ação. Valeu amigo. :D
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Sintetizador Synth Magic

Mensagempor Guri » 05 Set 2020 01:53

Depois de algumas longas horas de trabalho, desta vez brincando com 12bits de resolução DAC.
ADSR foi programado individualmente para cada timbre.
Os sons foram gravados diretamente da saida DAC (PWM ), efeitos apenas chorus ou sem efeito, alguns com sustain máximo e outros sem sustain.

Implementamos uma mesa em RAM para guardar as amostras que estão sendo executadas, a RAM pode ser carregada a qualquer tempo com um novo timbre, no momento deixei 100kbytes livres, portanto esse é o tamanho máximo da amostra atualmente, devido a utilizar a RAM interna do MCU arm. As amostras podem ficar em um cartão SD ou internamente na flash, tudo depende do tamanho disponível. Nesse caso, o MCU que estou utilizando tem 1megabyte de flash, onde estão alocados os 128 sons, sendo 35 midi, 65 de órgãos eletrônicos diversos e o restante são efeitos diversos.

Ainda estou intrigado com a interpolação em 8 bits, se alguém tiver alguma sugestão :D

Obrigado
https://soundcloud.com/musica-plena/syn ... eliminares
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Sintetizador Synth Magic

Mensagempor eletroinf » 05 Set 2020 16:40

Nesse site tem uma artigo sobre interpolação, com vários métodos, comparativos e códigos C

http://yehar.com/blog/?p=197

Eu tenho o livro do Lyons e nele tem alguma coisa sobre o assunto, mas a abordagem dele é usando filtros FIR.

Aqui um artigo do próprio Lyons mostrando um método, bem explicado:
https://www.dsprelated.com/showarticle/1123.php

Vou anotar aqui para fazer um vídeo sobre interpolação.
"De cada um segundo sua capacidade a cada um segundo sua necessidade."
Avatar do usuário
eletroinf
Word
 
Mensagens: 948
Registrado em: 12 Out 2006 14:59
Localização: Santa Maria - RS

Re: Sintetizador Synth Magic

Mensagempor eletroinf » 05 Set 2020 17:37

Eu fiz aqui um teste com o método apresentado pelo Lyons no link que postei acima.
Veja o resultado, amostrando uma senóide com resolução de 8 bit. Código em Matlab abaixo.

Código: Selecionar todos
% Interpolation method by Richard Lyons - DSP Related
% https://www.dsprelated.com/showarticle/1123.php
% Ricardo B. Morim
% 05/09/2020

clc
clear all
close all

N = 100;

L = 4;

x = int8(zeros(1, N));

u = zeros(1, N*L);

v = zeros(1, N*L);

y = zeros(1, N*L);

xp = zeros(1, N*L);

fs = 4000;
Ts = 1/fs;

% Build a signal for the example
t(1) = 0;
x(1) = sin(Ts*60*2*pi*1);
for k=2:N
    t(k) = (k-1)*Ts;
   
    x(k) = 20*sin(Ts*60*2*pi*k);   
   
    t1 = double(x(k));
    t2 = double(x(k-1));
   
    %u(k) = (x(k) - x(k-1))/L;
    u(k) = (t1 - t2)/L;
end


t1(1) = 0;
ut = 0;
for k = 2:L*N
   
   t1(k) = (k-1)*Ts;
   
   tmp = rem(k, L);
   
   if tmp == 0
       v(k) = u(k/L);
       ut = v(k);
       xp(k) = x(k/L);
   else
       v(k) = ut;
       xp(k) = xp(k-1);
   end
   
   y(k) = v(k) + y(k-1);
   
end



figure;
plot(t1, xp, t1, y);
legend('sampled 8 bit', 'Interpolated 4*f_0');
title('Happy Interpolation Guri');

Você não está autorizado a ver ou baixar esse anexo.
"De cada um segundo sua capacidade a cada um segundo sua necessidade."
Avatar do usuário
eletroinf
Word
 
Mensagens: 948
Registrado em: 12 Out 2006 14:59
Localização: Santa Maria - RS

Re: Sintetizador Synth Magic

Mensagempor Guri » 08 Set 2020 12:22

Meu Deus, eletroinf....

Vou tentar entender o conceito do que você fez, e tentar, tentar traduzir isso para o mikroc dentro de um F407.
:D
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Sintetizador Synth Magic

Mensagempor denis » 09 Set 2020 11:27

Eu vi num Application Notes da Agilent um método de interpolação que era o seguinte:

- adiciona-se "zeros" entre as amostras [3, 2, 7, 4] --> [3, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 4, 0, 0, 0]
- em seguida passa este vetor num filtro passa-baixa.



eletroinf escreveu:Eu fiz aqui um teste com o método apresentado pelo Lyons no link que postei acima.
Veja o resultado, amostrando uma senóide com resolução de 8 bit. Código em Matlab abaixo.

Código: Selecionar todos
% Interpolation method by Richard Lyons - DSP Related
% https://www.dsprelated.com/showarticle/1123.php
% Ricardo B. Morim
% 05/09/2020

clc
clear all
close all

N = 100;

L = 4;

x = int8(zeros(1, N));

u = zeros(1, N*L);

v = zeros(1, N*L);

y = zeros(1, N*L);

xp = zeros(1, N*L);

fs = 4000;
Ts = 1/fs;

% Build a signal for the example
t(1) = 0;
x(1) = sin(Ts*60*2*pi*1);
for k=2:N
    t(k) = (k-1)*Ts;
   
    x(k) = 20*sin(Ts*60*2*pi*k);   
   
    t1 = double(x(k));
    t2 = double(x(k-1));
   
    %u(k) = (x(k) - x(k-1))/L;
    u(k) = (t1 - t2)/L;
end


t1(1) = 0;
ut = 0;
for k = 2:L*N
   
   t1(k) = (k-1)*Ts;
   
   tmp = rem(k, L);
   
   if tmp == 0
       v(k) = u(k/L);
       ut = v(k);
       xp(k) = x(k/L);
   else
       v(k) = ut;
       xp(k) = xp(k-1);
   end
   
   y(k) = v(k) + y(k-1);
   
end



figure;
plot(t1, xp, t1, y);
legend('sampled 8 bit', 'Interpolated 4*f_0');
title('Happy Interpolation Guri');

denis
Byte
 
Mensagens: 257
Registrado em: 06 Mar 2007 12:29
Localização: Americana - SP

Re: Sintetizador Synth Magic

Mensagempor Guri » 12 Set 2020 08:26

[quote="denis"]Eu vi num Application Notes da Agilent um método de interpolação que era o seguinte:

- adiciona-se "zeros" entre as amostras [3, 2, 7, 4] --> [3, 0, 0, 0, 2, 0, 0, 0, 7, 0, 0, 0, 4, 0, 0, 0]
- em seguida passa este vetor num filtro passa-baixa.



Eu não consegui entender o fato de adicionar 4 zeros entre cada amostra...
Se não me engano, o fato de fazer isso iria sobreamostrar a amostra atual, multiplicando seu fator para 4x.
Teria-se que levar em conta esse fator de 4x e elevar o sample rate em 4x, caso contrário o sample seria dividido por 4x.

Me corrijam se eu entendi errado. :)
DEUS SEJA LOUVADO
GURI (VonNilmam)
Guri
Byte
 
Mensagens: 457
Registrado em: 25 Abr 2010 09:05
Localização: Minas Gerais

Re: Sintetizador Synth Magic

Mensagempor sync » 12 Set 2020 15:07

Amigo
Relendo este tópico vi que você mencionou "uso as ondas da transformada de Fourier", eu não entendi bem o que você quis dizer com isso mas se você está usando FFT então existe um método simples de interpolação chamado "zero padding" ou "zero filling" que é muito usado para "suavizar" funções em algumas áreas. Aqui tem uma breve descrição

https://dspguru.com/dsp/howtos/how-to-i ... cy-domain/

se não estiver usando FFT, por favor, ignore.
sync
Byte
 
Mensagens: 195
Registrado em: 04 Mai 2020 16:11

AnteriorPróximo

Voltar para STMicroelectronics

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x