Red de conocimiento informático - Aprendizaje de programación - Experimento DSP. ¿Permítanme escribir un programa en lenguaje C para completar el cálculo de sin(2.3π)+cos(1.7π)?

Experimento DSP. ¿Permítanme escribir un programa en lenguaje C para completar el cálculo de sin(2.3π)+cos(1.7π)?

Cualquier lenguaje de programación es difícil de aprender. En el trabajo real, a veces solo lleva menos de una semana aprender una nueva sintaxis. La sintaxis es la misma si aún te quedas en el nivel de sintaxis. Ni siquiera has entrado en el camino.

Pero para las estructuras de datos y algoritmos posteriores, necesitas leer algunos libros y comenzar a entrar en contacto con los algoritmos. Esto no tiene nada que ver con la gramática. La razón por la que primero debes aprender bien la gramática es si puedes comprender el algoritmo descrito en la gramática y has aprendido a describirlo en cualquier idioma. En esta etapa, será equivalente a levantar una pierna. y preparándote para cruzar la línea de salida, pero todavía no has empezado.

Desde los principios de compilación y las máquinas de Turing hasta escribir tu propio micro sistema operativo, necesitas un profesor que te guíe

Aprendí desarrollo de software comenzando desde C y llegando hasta el final -> Base de datos nacional Nivel 3 -> Programador ->Programador senior->Analista de sistemas aprobé el examen y después de casi 9 años de trabajo, me di cuenta de que si Si puedes comprar o aprender con precisión un conocimiento en el mercado o en la escuela, a menudo significa que tu nivel aún no es lo suficientemente bueno. Puedes crear fácilmente cosas que puedas imaginar en la industria. La resolución de problemas reales requiere muchos libros y más. El 80% de tu propia creación y comprensión. Solo cuando puedas crearlo podrás comprender verdaderamente tu trabajo.

Un programador necesita este tipo de experiencia

Se estima que la persona de arriba la tiene. Tiene el más alto nivel de educación en ciencias e ingeniería. Probablemente aún no se haya graduado y nunca haya trabajado en la industria informática. Realiza trabajos como el diseño de chips DSP que requieren que esté expuesto a algoritmos todos los días, pero lo hace. ¿Esto tiene algo que ver con el lenguaje C en sí? El algoritmo de Fourier es un modelo matemático diseñado por el matemático Fourier, pero no es adecuado para su uso en software de computadora (la cantidad de cálculos es demasiado grande, como la transformada de Fourier discreta). equivalente a multiplicar la secuencia Y (n × 1 vector de columna) por la matriz n × n Fn, que requiere n × n multiplicaciones. Si n = 1024, son 104, 8576 operaciones de multiplicación.

¿Qué concepto? Si la CPU que elige tiene una instrucción de ciclo único de 25 ns y una operación de multiplicación se puede completar en un solo ciclo, se necesitarán 26,2144 ms para calcular la transformada de Fourier de 1024 puntos, que no incluye la suma ni otras operaciones) Le doy el algoritmo C de la siguiente manera:

void kkfft(double pr[], double pi[], int n, int k, double fr[], double fi[], int l, int il. )

{

int it,m,is,i,j,nv,l0;

doble p,q,s,vr,vi,poddr ,poddi;

for (it=0; it<=n-1; it++)

{

m =

> es = 0;

for(i=0; i<=k-1; i++)

{

j = m/2

es = 2* es+(m-2*j);

m = j;

}

fr[it] = pr [es];

fi[it] = pi[es];

}

//------------ --------- -------

pr[0] = 1.0

pi[0] = 0.0;

p = 6.283185306/(1.0*n );

pr[1] = cos(p);

pi[1] = -sin(p);

si (l!=0 )

pi[1]=-pi[1];

para (i=2; i<=n-1; i++)

{

p = pr[i-1]*pr[1]

q = pi[i-1]*pi[1];

s = (pr[i-1]+pi[i-1])*(pr[1]+pi[1]);

pr[i] = p-q ;

pi [i] = s-p-q;

}

para (it=0; it<=n-2; it=it+2)

{

p>

vr = fr[it];

vi = fi[it];

fr[it] ] = vr+fr[it+1];

fi[it] = vi+fi[it+1];

fr[it+1] = vr-fr[ it+1];

fi[ it+1] = vi-fi[it+1];

}

m = n/2; /p>

nv = 2;

for (l0=k-2; l0>=0; l0--)

{

m = m/2;

nv = 2*nv;

for(it=0; it<=(m-1)*nv; it=it+nv)

for (j=0; j<= (nv/2)-1; j++)

{

p = pr[m*j]*fr[ it+j+nv/2];

q = pi[m*j]*fi[it+j+nv/2];

s = pr[m*j]+pi[m*j];

s = s*(fr[it+j+nv/2]+fi[it+ j +nv/2]);

poddr = p-q;

poddi = s-p-q;

fr[it+j+nv/2] = fr[ it +j]-poddr;

fi[it+j+nv/2] = fi[it+j]-poddi;

fr[it+j] = fr[ it +j]+poddr;

fi[it+j] = fi[it+j]+poddi;

}

}

if(l!=0)

for(i=0; i<=n-1; i++)

{

fr[i ] = fr[i]/(1.0*n);

fi[i] = fi[i]/(1.0*n);

}

if(il!=0)

for(i=0; i<=n-1; i++)

{

pr[i] = sqrt (fr[i]*fr[i]+fi[i]*fi[i]);

if(fabs(fr[i])<0.000001*fabs(fi[i]))

{

if ((fi[i]*fr[i])>0)

pi[i] = 90.0;

más

pi[i] = -90.0;

}

más

pi[i] = atan(fi[ i ]/fr[i])*360.0/6.283185306;

}

return;

}

Además, Tuan IDC en línea Hay muchos productos disponibles para compra grupal, son baratos y tienen buena reputación