當前位置:編程學習大全網 - 編程語言 - DSP實驗 讓我用C語言編寫程序完成計算sin(2.3π)+cos(1.7π)的?

DSP實驗 讓我用C語言編寫程序完成計算sin(2.3π)+cos(1.7π)的?

何編程語言是難學的,真正的工作中有時候學習壹個新語法只有不到壹周的時間,語法而言都壹樣,如果還停留在語法層學習的上面,編寫程序的道路妳就連門都沒有入.

但是後續的 數據結構和算法 稍微要看下書了,開始接觸算法了,著和語法沒有關系,之所以要先學好語法是為了能看懂用語法描敘的算法,學通了用任何語言來描敘都壹樣,到了這個階段的就相當於擡起壹條腿準備跨到起跑線壹樣,但還是沒有入門.

到編譯原理 和 圖靈機 再到 自己編寫微型的操作系統 就需要有個老師來引導了

我學軟件開發就是從C開始壹路由 ->國家數據庫3級-> 程序員->高級程序員->系統分析師考上去然後通過近9年的工作,體會是如果妳能夠在市面上或者學校裏精確買到或者學到的壹門知識往往就表示妳的層次還是不能讓妳得興應手的在行業中創造妳能想像的東西,真正的解決問題需要很多本書再加上80%以上的自己創造和理解才能做出來的時候才算真正懂得了妳的工作.

壹個程序員需要這樣的經歷

樓上的估計最高學歷不過是理工科的壹個大學生,應該還沒畢業,沒有在計算機行業呆過,在做芯片處理的工作中比如DSP芯片設計需要妳天天接觸算法,但是這和C語言本身有關系嗎?傅立葉算法是數學家傅立葉設計出來的數學模型但是不適合做在計算機軟件裏面(運算量太大了比如離散的傅立葉變換等同於用序列Y(n×1列矢量)乘以n×n矩陣Fn,需要n×n次乘法。若n=1024,則是104,8576次乘法運算。什麽概念呢?如果妳選用的CPU單周期指令為25ns, 單周期也可以完成壹次乘法運算,那麽要計算1024點的傅立葉變換則需要26.2144ms,這還不包括加法或其它運算),我給出C算法如下:

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;

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

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

{

m = it;

is = 0;

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

{

j = m/2;

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

m = j;

}

fr[it] = pr[is];

fi[it] = pi[is];

}

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

pr[0] = 1.0;

pi[0] = 0.0;

p = 6.283185306/(1.0*n);

pr[1] = cos(p);

pi[1] = -sin(p);

if (l!=0)

pi[1]=-pi[1];

for (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;

}

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

{

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;

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;

else

pi[i] = -90.0;

}

else

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

}

return;

}

另外,團IDC網上有許多產品團購,便宜有口碑

  • 上一篇:C語言的壹些題,誰會做呀?
  • 下一篇:四川省內,比較好的專科學校有哪些?
  • copyright 2024編程學習大全網