Moderadores: andre_luis, 51, guest2003, Renie
unsigned int y1,y2,y3;
unsigned k1;
start_tone(unsigned f, unsigned fs)
{
float k2;
k2 = 2*PI*f/fs;
k1 = cos(k2)*65536;
y1 = sin(k2)*32768;
y2 = 0;
set_timer(fs); /* configura timer para frequencia fs */
}
timer_interrupt()
{
y3 = (k1*y2)/32768-y1;
y1 = y2;
y2 = y3;
set_dac(y3); /* joga valor no dac */
}
int main()
{
start_tone(800,8000); /* inicia gerador de tom com 800Hz e sample rate de 8KHz */
while(1);
}
#include <math.h>
#include <stdio.h>
long k1;
long x1, x2;
long long x3;
start_tone(unsigned f, unsigned fs)
{
double k2;
k2 = (2 * M_PI * f) / fs;
k1 = cos(k2)*2*(1<<30);
x1 = sin(k2)*(1<<30);
x1 = -x1;
x2 = 0;
}
timer_interrupt()
{
x3 = k1;
x3 *= x2;
x3 >>= 30;
x3 -= x1;
printf("%d\n", x2);
x1 = x2;
x2 = x3;
}
int
main()
{
start_tone(1, 80000);
while (1)
timer_interrupt();
}
#include <math.h>
#include <stdio.h>
char table[256];
make_table()
{
int i;
for(i=0;i!=256;i++)
{
table[i]=(char)(127.0*sin((i*M_PI*2.0)/255.0));
}
}
int main()
{
int i, raster[4], width[4], value[4],
frequency[4]={ 1, 2, 4, 8 },
sample_rate = 200;
make_table();
for(i=0;i!=4;i++)
{
width[i] = sample_rate/frequency[i];
value[0] = raster[i] = 0;
}
while(1)
{
for(i=0;i!=4;i++)
{
value[i] = table[raster[i]*256/width[i]];
raster[i]++;
if(raster[i]==width[i])
{
raster[i]=0;
}
}
printf("%d\n",(value[0]+value[1]+value[2]+value[3])/4);
}
}
width = sample_rate/frequency
se vc tem 22Khz de taxa de amostragem e quer, por exemplo, 1Hz, o comprimento de onda sera de 22000 unidades.
o segundo truque eh varrer a tabela proporcionalmente ao numero de unidades, seria algo como:
for(raster = 0; raster != width ; raster++)
{
value = table[raster * 256 / width];
}
barboza escreveu:...Neste caso como como é senoide, periódica, pode controlar a fase e dividir esta tabela por 2 ou ate mesmo por 4... .
rate(int *in, int *out)
{
for(i=0;i!=4;i++)
{
out[i] = in[i*11/4];
}
}
fabim escreveu:tchelo..
ME adiscurpa pela intromissão,,,
Mais me explica que P%$#A é essa...
- Código: Selecionar todos
width = sample_rate/frequency
se vc tem 22Khz de taxa de amostragem e quer, por exemplo, 1Hz, o comprimento de onda sera de 22000 unidades.
o segundo truque eh varrer a tabela proporcionalmente ao numero de unidades, seria algo como:
for(raster = 0; raster != width ; raster++)
{
value = table[raster * 256 / width];
}
Se me fiz entender, é pra saber quantas amostragens maximas para dentro de um ciclo inteiro de uma determinada frequencia ?
tipo 22KSPS em 16 bits.
22K / (F=T1+T2).
22k / 500 = 44 amostras por ciclo de 500hz..
Só por curiosidade mesmo, é que tu explicou sem explicar...rsrs
abraços
fabim
Usuários navegando neste fórum: Google [Bot] e 1 visitante