課程設(shè)計---信號分析與處理c語言編程_第1頁
已閱讀1頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  勘查技術(shù)課程設(shè)計:信號分析與處理基礎(chǔ)</p><p>  對于勘查技術(shù)與工程專業(yè)的學(xué)生來說,《信號分析與處理基礎(chǔ)》是一門專業(yè)基礎(chǔ)課,我是2010級的,我們是在大三第一學(xué)期上的,這門課數(shù)學(xué)與物理知識要求比較高,不過一開認(rèn)真仔細(xì)學(xué)的話,也會學(xué)的好的,起碼要比那空洞、生奧、蛋疼《彈性波動力學(xué)》好學(xué)些。</p><p>  隨著課程的結(jié)束,《信號分析與處理基礎(chǔ)》的課程設(shè)計也隨

2、之而來,我們是老師布置了4 個題目,分單號與雙號各自做2道,我是單號,做的是濾波與相關(guān)。</p><p>  這次課程設(shè)計,注意考驗(yàn)大家的編程能力,目前我們學(xué)過得就只有C語言,可以用Fortran,Matlab等等,Matlab可以現(xiàn)學(xué)現(xiàn)用,上手快。但是大家也可以挑戰(zhàn)下自己的C語言,提高下自己的編程能力,這是一次很好地機(jī)會,真正實(shí)用的時刻。我就是用C語言編的。</p><p>  其余2題

3、,我也把程序與結(jié)果圖收集到了這里,以供學(xué)弟、學(xué)妹們參考之用!我的QQ:593066480,有什么不懂的,或者好的見教,歡迎來信息交流!</p><p><b>  題目如下:</b></p><p><b>  濾波</b></p><p>  已知原始地震記錄x(t),要求:設(shè)計濾波器,消除x(t)中10Hz以下,80H

4、z以上的干擾信號。</p><p>  建議參數(shù): A1=1,A2=0.8,A3=0.5</p><p>  f1=25Hz,f2=45Hz,f3=5Hz,f4=80</p><p>  取樣點(diǎn)數(shù):N=200</p><p>  抽樣間隔:Δ=0.004,ß=100</p><p><b>  時域

5、濾波:</b></p><p>  由 (h(t)為濾波因子)</p><p>  建議參數(shù):第一參數(shù):ff1=20Hz,ff2=50Hz</p><p>  第二參數(shù):ff1=25Hz,ff2=45Hz</p><p><b>  抽樣點(diǎn)數(shù):M=60</b></p><p>  

6、抽樣間隔:Δ=0.004</p><p><b>  ,</b></p><p><b>  ,</b></p><p><b>  單獨(dú)計算: </b></p><p>  要求:畫出x(t),h(t),y(t)圖形,為了分析方便,也可以畫出有效波s(t),干擾波n(t)及

7、其頻譜進(jìn)行分析,如下圖: </p><p>  最后就是答辯,老師問問題,學(xué)生回答。主要注意幾點(diǎn)就行了</p><p>  熟悉課本濾波部分知識;</p><p>  第二參數(shù)要比第一參數(shù)濾波效果好,因?yàn)殚T第一參數(shù)開大了,進(jìn)來的干擾波也多了,從第一參數(shù):Fy、第二參數(shù)Fy圖形上可以看出來,干擾波頻譜被壓小了。</p><p>  第二

8、參數(shù)壓制了干擾波,突顯了有效波,所有好。</p><p><b>  頻域?yàn)V波</b></p><p><b>  由公式:</b></p><p>  對x(t)進(jìn)行補(bǔ)0,28或者29總之必須是2的次方,因?yàn)橐玫紽FT公式與IFFT公式,進(jìn)行FFT變換得到X(k);</p><p>  H(k)

9、的求法:H(k)也必須與X(k)點(diǎn)數(shù)相同</p><p><b>  ,</b></p><p><b>  單門:20, 50</b></p><p>  雙門:20, 50,=N-,=N-,</p><p>  3, 在用IFFT反變換得y(t),存在實(shí)部與虛部,需要分析與處理</p>

10、;<p>  要求:畫出H(k)、X(k)、Y(k)圖形,并且分析X(k)、Y(k)的區(qū)別,還有開單雙門的區(qū)別與差異,時域與頻域?yàn)V波誰好、為什么?</p><p>  分析:從單雙門實(shí)部圖形看出,與有效波是完全一樣的,但是幅值變大,這體現(xiàn)了濾波突顯有效波的特性;從圖形看出虛部對結(jié)果沒有影響;</p><p>  單雙門虛部完全不同,這是由于開單雙門效果不同引起的。單門虛部變化

11、大,而且幅值與起伏變化也大,而雙門幅值很小,小到可以忽略不計。按理說反變化IFFT后應(yīng)該只有實(shí)部,沒有虛部,至于為什么會產(chǎn)生虛部,希望讀者自己下去研究下,希望大家相互交流、交流!</p><p>  第一個注意問題:單門與雙門誰好?答案當(dāng)然是:雙門好。因?yàn)樵加行Р▁(t)是實(shí)數(shù)信號,對應(yīng)的頻譜是偶對稱的,單門時,只是讓一部分通過了;而雙門則全部通過,肯定效果要好!而且實(shí)部波形,明顯看出雙門是干擾部分起伏比單門時

12、要平緩,小得多了。</p><p>  第二個注意問題:時域與頻域哪個好?頻域要好,首先從兩者波形上可以看出,其次就是頻域?yàn)V波,只讓有效波通過,而之外的完全被濾掉,可謂是真正的理想狀態(tài)。</p><p>  第三個注意問題:頻域?yàn)V波y(t)實(shí)部圖200點(diǎn)以后,為什么有波形起伏?因?yàn)橛捎跁r域離散,必將導(dǎo)致頻域周期化,這是由于頻域周期化的結(jié)果。</p><p><

13、b>  相關(guān)</b></p><p>  建議參數(shù):1,30Hz,抽樣點(diǎn)數(shù):M=100</p><p>  0.8,50Hz,抽樣點(diǎn)數(shù):M=150</p><p>  抽樣間隔:Δ=0.004s</p><p>  要求:畫出,,的圖形并分析驗(yàn)證書上自互相關(guān)性質(zhì)的正確性!</p><p><b&

14、gt;  快速褶積</b></p><p>  建議參數(shù):1,25Hz,抽樣點(diǎn)數(shù):M=250</p><p>  0.7,55Hz,抽樣點(diǎn)數(shù):M=200</p><p>  抽樣間隔:Δ=0.004s</p><p>  地震記錄的生成和頻譜分析</p><p>  地震記錄的生成和頻譜分析、信噪比計算以及

15、補(bǔ)0對頻譜的影響,給定地震子波的數(shù)學(xué)表達(dá)式:</p><p>  和反射系數(shù)序列:0.2,0.4,0.15,0.5</p><p>  0.35, 0.1, 0.2</p><p>  產(chǎn)生一個含有隨機(jī)干擾信號的地震信號:</p><p> ?。ㄆ渲衝(t)可以用-0.4—+0.4之間的隨機(jī)數(shù)代替)</p><p>&

16、lt;b>  要求:</b></p><p>  制作合成地震記錄x(t),并對b(t)和s(t)做頻譜分析(用FFT),其中:b(t)(N=41,Δ=0.004s,f=35Hz,α=100,A1=1)反射序列和隨機(jī)干擾N=200;</p><p>  計算x(t)信噪比,改變n(t)(用-0.8—+0.8之間的隨機(jī)數(shù)代替)的大小再計算。</p><p

17、><b>  信噪比:</b></p><p>  分別對b(t)后邊、前邊、中間補(bǔ)0,計算補(bǔ)0前后頻譜的變化及補(bǔ)0多少對頻譜的影響。</p><p><b>  附帶程序:</b></p><p>  最麻煩的就是編程序了,開始的時候,是很麻煩,不過只有去啃,就一定會有收獲,比如:我開始編褶積程序的時候,整理了幾天

18、,上網(wǎng)查,翻圖書,后來突然明白,靠公式就可以編出來了。只是FFT需要些功夫,其余都很快!書上介紹的是基2FFT,這個代碼網(wǎng)上到處都有,想提升自己的編程能力,就去嘗試編基4FFT,以及考慮基nFFT吧,祝大家好運(yùn)。</p><p>  1、時域?yàn)V波程序代碼</p><p>  #include<stdio.h></p><p>  #include<

19、math.h></p><p>  #include"conv.cpp"</p><p>  #include"dft.cpp"</p><p>  #include"gyh.cpp"</p><p>  #define T 200//************T表示x(t)點(diǎn)數(shù)

20、,R表示n(t)點(diǎn)數(shù)</p><p>  #define R 60</p><p>  void main()</p><p><b>  {</b></p><p>  int i,j,B=100;//*********************B表示貝塔的值</p><p><b> 

21、 FILE *fp;</b></p><p>  double A1=1.0,A2=0.8,A3=0.5;//********產(chǎn)生x(t)</p><p>  double f1=25,f2=45,f3=5,f4=80;//******頻率取值</p><p>  double data=0.004;//******************取樣點(diǎn)數(shù)<

22、;/p><p>  double s[T],n[T], x[T],h[R],y[T+R-1];</p><p>  double si[T]={0},s1[T]={0},s1i[T]={0},Fs[T]={0};</p><p>  double ni[T]={0},n1[T]={0},n1i[T]={0},Fn[T]={0};</p><p>

23、  double xi[T]={0},x1[T]={0},x1i[T]={0},Fx[T]={0};</p><p>  double hi[T]={0},h1[T]={0},h1i[T]={0},Fh[T]={0};</p><p>  double y1[T+R-1]={0},yb[T+R-1]={0},yb1[T+R-1]={0},Fy[T+R-1]={0};</p>

24、<p>  for(i=0;i<T;i++)</p><p><b>  {</b></p><p>  s[i]=A1*exp(-B*pow((i*data),2)) * sin(2*PI*f1*i*data) + A2*exp(-B*pow((i*data),2)) * sin(2*PI*f2*i*data);</p><p&g

25、t;  n[i]=A3*(sin(2*PI*f3*i*data)+cos(2*PI*f4*i*data));</p><p>  x[i]=s[i]+n[i];</p><p><b>  }</b></p><p>  //對s(t)進(jìn)行頻譜分析,用DFT</p><p>  dft(s,si,s1,s1i,Fs,T,

26、1);</p><p>  dft(n,ni,n1,n1i,Fn,T,1);</p><p>  dft(x,ni,x1,x1i,Fx,T,1);</p><p><b>  //統(tǒng)一導(dǎo)出</b></p><p>  fp=fopen("D:\\sh\\time1\\snxFsFnFx1.txt",&

27、quot;w");</p><p>  for(i=0;i<T;i++)</p><p>  fprintf(fp,"%f\t%f\t%f\t%f\t%f\t%f\n",s[i],n[i],x[i],Fs[i],Fn[i],Fx[i]);</p><p>  fclose(fp);</p><p><

28、b>  //產(chǎn)生h(t)</b></p><p>  float ff1=20,ff2=50;//*****************可以修改的h(t)參數(shù)</p><p>  double w1,w2,dataw,w0;</p><p>  w1=2*PI*ff1,w2=2*PI*ff2;</p><p>  dataw=(

29、w2-w1)/2,w0=(w2+w1)/2;</p><p>  h[0]=2*dataw/PI;</p><p>  for(j=1;j<R;j++)</p><p><b>  {</b></p><p>  h[j]=(2.0/(PI*j*data))*cos(w0*j*data)*sin(dataw*j*d

30、ata);</p><p><b>  }</b></p><p>  dft(h,hi,h1,h1i,Fh,R,1);</p><p>  gyh(Fh,R);</p><p>  fp=fopen("D:\\sh\\time1\\hFh.txt","w");</p>

31、<p>  for(j=0;j<R;j++)</p><p>  fprintf(fp,"%f\t%f\n",h[j],Fh[j]);</p><p>  fclose(fp);</p><p>  //褶積濾波得到y(tǒng)(t)</p><p>  con(x,h,y,T,R);</p>&l

32、t;p>  //對y(t)作傅里葉變換</p><p>  dft(y,y1,yb,yb1,Fy,T+R-1,1);</p><p>  //導(dǎo)出y及頻譜Y(k)</p><p>  fp=fopen("D:\\sh\\time1\\yFy1.txt","w");</p><p>  for(i=

33、0;i<T+R-1;i++)</p><p>  fprintf(fp,"%f\t%f\n",y[i],Fy[i]);</p><p>  fclose(fp); </p><p>  printf("\nover\n\n");}</p><p><b>  頻域?yàn)V波程序代碼:</

34、b></p><p>  #include<stdio.h></p><p>  #include<math.h></p><p>  #include"fft.cpp"</p><p>  #include"ifft.cpp"</p><p>  

35、#define G 256</p><p>  void main()</p><p><b>  {</b></p><p>  int i,B=100;</p><p>  FILE *fp;//定義指針文件</p><p>  double A1=1.0,A2=0.8,A3=0.5;//產(chǎn)生

36、x(t)</p><p>  double f1=25,f2=45,f3=5,f4=80;//參數(shù)</p><p>  double data=0.004;//抽樣間隔</p><p>  double s[200],n[200];</p><p>  double x[G]={0},x1[G]={0},h[G]={0},h1[G]={0},

37、y[G]={0},y1[G]={0};</p><p>  double Fx[G]={0},Fh1[G]={0},Fh2[G]={0},Fy1[G]={0},Fy2[G]={0};</p><p>  double Y1[G]={0},Y1i[G]={0},Y2[G]={0},Y2i[G]={0};</p><p>  for(i=0;i<200;i++)&

38、lt;/p><p><b>  {</b></p><p>  s[i]=A1*exp(-B*pow((i*data),2)) * sin(2*PI*f1*i*data) + A2*exp(-B*pow((i*data),2)) * sin(2*PI*f2*i*data);</p><p>  n[i]=A3*(sin(2*PI*f3*i*data

39、)+cos(2*PI*f4*i*data));</p><p>  x[i]=s[i]+n[i];</p><p><b>  }</b></p><p><b>  //導(dǎo)出x[t]</b></p><p>  fp=fopen("D:\\sh\\py\\x.txt",&quo

40、t;w");</p><p>  for(i=0;i<G;i++)</p><p>  fprintf(fp,"%f\n",x[i]);</p><p>  fclose(fp);</p><p>  //x[t]頻譜計算</p><p>  fft(x,x1,Fx,G,1);<

41、;/p><p><b>  //導(dǎo)出X(k)</b></p><p>  fp=fopen("D:\\sh\\py\\Fx.txt","w");</p><p>  for(i=0;i<G;i++)</p><p>  fprintf(fp,"%f\n",Fx

42、[i]);</p><p>  fclose(fp);</p><p><b>  //處理h[t]</b></p><p>  double dataf;</p><p>  double m1,m2,m3,m4;</p><p>  dataf=1.0/(data*G);</p>

43、<p>  m1=20.0/dataf,m2=50.0/dataf;</p><p>  m3=G-m2,m4=G-m1;</p><p><b>  //計算,導(dǎo)出單門</b></p><p>  for(i=0;i<G;i++)</p><p><b>  {</b></

44、p><p>  if(i>=int(m1)&&i<=int(m2))</p><p><b>  Fh1[i]=1;</b></p><p>  else Fh1[i]=0;</p><p><b>  }</b></p><p><b> 

45、 //計算,導(dǎo)出雙門</b></p><p>  for(i=0;i<G;i++)</p><p><b>  {</b></p><p>  if((i>=int(m1)&&i<=int(m2))||(i>=int(m3)&&i<=int(m4)))</p>

46、<p><b>  Fh2[i]=1;</b></p><p>  else Fh2[i]=0;</p><p><b>  }</b></p><p>  fp=fopen("D:\\sh\\py\\Fh12.txt","w");</p><p&

47、gt;  for(i=0;i<256;i++)</p><p>  fprintf(fp,"%f\t%f\n",Fh1[i],Fh2[i]);</p><p>  fclose(fp);</p><p>  for(i=0;i<G;i++)//單門濾波</p><p><b>  {</b>

48、;</p><p>  Y1[i]=x[i]*Fh1[i];</p><p>  Y1i[i]=x1[i]*Fh1[i];</p><p>  Fy1[i]=sqrt(pow(Y1[i],2)+pow(Y1i[i],2));</p><p><b>  }</b></p><p>  for(i=

49、0;i<G;i++)//開雙門</p><p><b>  {</b></p><p>  Y2[i]=x[i]*Fh2[i];</p><p>  Y2i[i]=x1[i]*Fh2[i];</p><p>  Fy2[i]=sqrt(pow(Y2[i],2)+pow(Y2i[i],2));}</p>

50、<p>  fp=fopen("D:\\sh\\py\\Fy12.txt","w");//導(dǎo)出單雙門</p><p>  for(i=0;i<G;i++)</p><p>  fprintf(fp,"%f\t%f\n",Fy1[i],Fy2[i]);</p><p>  fclose(fp

51、);</p><p>  //Y[k]作反變換IFFT,并且導(dǎo)出實(shí)部,虛步</p><p>  ifft(Y1,Y1i,G,-1);</p><p>  ifft(Y2,Y2i,G,-1);</p><p>  fp=fopen("D:\\sh\\py\\yt12.txt","w");</p>

52、;<p>  for(i=0;i<G;i++)</p><p>  fprintf(fp,"%f\t%f\t%f\t%f\n",Y1[i],Y1i[i],Y2[i],Y2i[i]);</p><p>  fclose(fp);</p><p>  printf("\nover\n\n");}</p&g

53、t;<p><b>  相關(guān)程序代碼</b></p><p>  #include<stdio.h></p><p>  #include<math.h></p><p>  #include"correl.cpp"</p><p>  #define PI 3.

54、14159265</p><p>  void main()</p><p><b>  {</b></p><p><b>  int i,j;</b></p><p>  double A1=1.0,A2=0.8;</p><p>  double f1=30,f2=50

55、;</p><p>  double data=0.004,p=100;</p><p>  double x[100]={0},y[150]={0},xy[249]={0},yx[249]={0};</p><p>  double xx[199],yy[299],xyft[249];</p><p>  for(i=0;i<100;

56、i++)</p><p>  x[i]=A1*sin(2*PI*f1*i*data);</p><p>  for(j=0;j<150;j++)//計算y(t)</p><p>  y[j]=A2 * exp(-p*j*data*j*data)*sin(2*PI*f2*j*data);</p><p>  correl(x,y,100,

57、150,xy);</p><p>  correl(x,x,100,100,xx);</p><p>  correl(y,y,150,150,yy);</p><p>  correl(y,x,150,100,yx);</p><p>  FILE *fp,*fp1,*fp2,*fp3,*fp4,*fp5,*fp6;//導(dǎo)出數(shù)據(jù)</p

58、><p>  int i1,j1,k,l,m,n;</p><p>  fp1=fopen("D:\\sh\\data\\x.txt","w");</p><p>  fp2=fopen("D:\\sh\\data\\y.txt","w");</p><p>  fp

59、3=fopen("D:\\sh\\data\\xy.txt","w");</p><p>  fp4=fopen("D:\\sh\\data\\xx.txt","w");</p><p>  fp5=fopen("D:\\sh\\data\\yx.txt","w");&l

60、t;/p><p>  fp6=fopen("D:\\sh\\data\\yy.txt","w");</p><p>  for(i=0;i<249;i++)</p><p>  xyft[i]=yx[i];</p><p>  fp=fopen("D:\\sh\\data\\xyt.txt&

61、quot;,"w");</p><p>  for(i=0;i<249;i++)</p><p>  fprintf(fp,"%f\n",xyft[i]);</p><p>  fclose(fp);</p><p>  for(i1=0;i1<100;i1++)</p>&l

62、t;p>  fprintf(fp1,"%f\n",x[i1]);</p><p>  fclose(fp1);</p><p>  for(j1=0;j1<150;j1++)</p><p>  fprintf(fp2,"%f\n",y[j1]);</p><p>  fclose(fp2)

63、;</p><p>  for(k=0;k<249;k++)</p><p>  fprintf(fp3,"%f\n",xy[k]);</p><p>  fclose(fp3);</p><p>  for(l=0;l<199;l++)</p><p>  fprintf(fp4,&q

64、uot;%f\n",xx[l]);</p><p>  fclose(fp4);</p><p>  for(m=0;m<249;m++)</p><p>  fprintf(fp5,"%f\n",yx[m]);</p><p>  fclose(fp5);</p><p>  fo

65、r(n=0;n<299;n++)</p><p>  fprintf(fp6,"%f\n",yy[n]);</p><p>  fclose(fp6);}</p><p>  4、地震子波及頻譜分析</p><p>  #include<stdio.h></p><p>  #in

66、clude"conv.cpp"</p><p>  #include"fft.cpp"</p><p>  #include"uni.cpp"</p><p>  #define V 64//*********宏定義的參數(shù),可以修改的點(diǎn)數(shù)</p><p>  #define W 25

67、6</p><p>  void main()</p><p><b>  {</b></p><p><b>  int i;</b></p><p><b>  FILE *fp;</b></p><p>  double A1=1,f=35,a=1

68、00;//********************a代表阿爾法α</p><p>  double data=0.004;//************************* 抽樣間隔</p><p>  double b[V]={0},bi[V]={0},Fb[V]={0},ks[200]={0};</p><p>  double sz[W]={0},s[20

69、0]={0},szi[W]={0},Fsz[W]={0};</p><p>  double x[W]={0},xi[W]={0},Fx[W]={0},n[200]={0};</p><p>  double xwp[V];</p><p>  for(i=0;i<41;i++)</p><p>  b[i]=A1*exp(-a*i*d

70、ata)*sin(2*PI*f*i*data);</p><p>  //*****產(chǎn)生ξ(t)</p><p>  ks[29]=0.2,ks[64]=0.4,ks[80]=0.15,ks[102]=0.5,ks[114]=0.35,ks[145]=0.1,ks[156]=0.2;</p><p>  fp=fopen("D:\\da\\b.txt&qu

71、ot;,"w");</p><p>  for(i=0;i<V;i++)</p><p>  fprintf(fp,"%f\n",b[i]);</p><p>  fclose(fp);</p><p>  fp=fopen("D:\\da\\ks.txt","w&q

72、uot;);</p><p>  for(i=0;i<200;i++)</p><p>  fprintf(fp,"%f\n",ks[i]);</p><p>  fclose(fp);</p><p>  con(b,ks,sz,41,200);</p><p>  fp=fopen(&qu

73、ot;D:\\da\\s.txt","w");</p><p>  for(i=0;i<W;i++)</p><p>  fprintf(fp,"%f\n",sz[i]);</p><p>  fclose(fp);</p><p>  for(i=0;i<200;i++)//**

74、*****************甩掉后40個樣點(diǎn)</p><p>  s[i]=sz[i];</p><p>  uni(-0.4,0.4,200,n);//*****************產(chǎn)生隨機(jī)數(shù)</p><p>  fp=fopen("D:\\da\\n.txt","w");</p><p>

75、  for(i=0;i<200;i++)</p><p>  fprintf(fp,"%f\n",n[i]);</p><p>  fclose(fp);</p><p>  for(i=0;i<200;i++)</p><p>  x[i]=s[i]+n[i];</p><p>  f

76、p=fopen("D:\\da\\x.txt","w");</p><p>  for(i=0;i<W;i++)</p><p>  fprintf(fp,"%f\n",x[i]);</p><p>  fclose(fp);</p><p>  fft(sz,szi,Fsz,

77、W,1);//**********</p><p>  fft(b,bi,Fb,V,1);//************************用fft對b[t],x[t]頻譜分析</p><p>  fft(x,xi,Fx,W,1);</p><p>  fp=fopen("D:\\da\\Fs.txt","w");</

78、p><p>  for(i=0;i<W;i++)</p><p>  fprintf(fp,"%f\n",Fsz[i]);</p><p>  fclose(fp);</p><p>  fp=fopen("D:\\da\\Fb.txt","w");</p><

79、p>  for(i=0;i<V;i++)</p><p>  fprintf(fp,"%f\n",Fb[i]);</p><p>  fclose(fp);</p><p>  fp=fopen("D:\\da\\Fx.txt","w");</p><p>  for(i

80、=0;i<W;i++)</p><p>  fprintf(fp,"%f\n",Fx[i]);</p><p>  fclose(fp);</p><p>  for(i=0;i<V;i++)</p><p>  xwp[i]=atan(bi[i]/b[i]);</p><p>  fp

81、=fopen("D:\\da\\xw.txt","w");</p><p>  for(i=0;i<V;i++)</p><p>  fprintf(fp,"%f\n",xwp[i]);</p><p>  fclose(fp);}</p><p><b>  5、信

82、噪比</b></p><p>  #include<stdio.h></p><p>  #include<math.h></p><p>  #include"conv.cpp"</p><p>  #include"uni.cpp"</p><

83、p>  #define PI 3.14159265</p><p>  #define V 64</p><p>  #define W 256</p><p>  void main()</p><p><b>  {</b></p><p><b>  int i;</b

84、></p><p>  double A1=1,f=35,a=100;</p><p>  double data=0.004,Sr,tps=0,tpn=0;</p><p>  double b[V]={0},sz[240]={0},s[200]={0},ks[200]={0};</p><p>  double x[W]={0},n

85、[200]={0};</p><p>  for(i=0;i<41;i++)</p><p>  b[i]=A1*exp(-a*i*data)*sin(2*PI*f*i*data);</p><p>  ks[29]=0.2,ks[64]=0.4,ks[80]=0.15;</p><p>  ks[102]=0.5,ks[114]=0.

86、35,ks[145]=0.1,ks[156]=0.2;</p><p>  con(b,ks,sz,41,200);</p><p>  for(i=0;i<200;i++)//甩掉后40個樣點(diǎn)</p><p>  s[i]=sz[i];</p><p>  uni(-0.4,0.4,200,n);//隨機(jī)數(shù)</p>&l

87、t;p>  for(i=0;i<200;i++)</p><p>  x[i]=s[i]+n[i];</p><p>  for(i=0;i<200;i++)//信噪比計算</p><p><b>  {</b></p><p>  tps+=pow(s[i],2);</p><p&

88、gt;  tpn+=pow(n[i],2);</p><p><b>  }</b></p><p>  Sr=tps/tpn;</p><p>  printf("SNR1=%f\n",Sr);}</p><p><b>  補(bǔ)0影響</b></p><p&

89、gt;  #include<stdio.h></p><p>  #include"fft.cpp"</p><p>  #define V 64</p><p>  void main()</p><p><b>  {</b></p><p><b>

90、  int i;</b></p><p><b>  FILE *fp;</b></p><p>  double A1=1,f=35,a=100;</p><p>  double data=0.004;</p><p>  double b[V]={0},bi[V]={0},Fb[V]={0};</

91、p><p>  for(i=0;i<41;i++)</p><p>  b[i]=A1*exp(-a*i*data)*sin(2*PI*f*i*data);</p><p>  fp=fopen("D:\\daa\\b1.txt","w");</p><p>  for(i=0;i<V;i++)

92、</p><p>  fprintf(fp,"%f\n",b[i]);</p><p>  fclose(fp);</p><p>  fft(b,bi,Fb,V,1);//**************用fft對b[t]頻譜分析</p><p>  fp=fopen("D:\\daa\\Fb1.txt"

93、,"w");</p><p>  for(i=0;i<V;i++)</p><p>  fprintf(fp,"%f\n",Fb[i]);</p><p>  fclose(fp);</p><p><b>  }</b></p><p>  《最后》

94、所用到的子程序</p><p>  相關(guān):void correl(double x[],double y[],int N,int M,double z[])</p><p><b>  {</b></p><p>  int i,j,l,ts=0;//ts代表相關(guān)序列的第一個數(shù)的序列號</p><p>  double

95、t=0;</p><p><b>  l=1-M;</b></p><p>  for(i=-M+1;i<N;i++)</p><p><b>  {</b></p><p>  for(j=0;j<N;j++)</p><p>  if(j-i>=0 &a

96、mp;& (j-i)<M)</p><p>  t+=x[j]*y[j-i];</p><p>  z[i+M-1]=t;</p><p><b>  t=0;</b></p><p><b>  }</b></p><p>  printf("\

97、n**********\n");</p><p>  printf("ts=%d\n",l);</p><p>  printf("**********\n");}</p><p>  褶積://傳入數(shù)組1,2以及存儲數(shù)組3;1,2的長度</p><p>  void con(double a

98、[],double b[],double c[],int M,int L)</p><p><b>  {</b></p><p>  int i,j,N;</p><p><b>  N=M+L-1;</b></p><p>  for(i=0;i<N;i++)</p><

99、;p><b>  {</b></p><p>  double tp=0.0;</p><p>  for(j=0;j<M;j++)</p><p><b>  {</b></p><p>  if((i-j)>=0&&(i-j)<L)</p>

100、<p>  tp+=a[j]*b[i-j];</p><p><b>  }</b></p><p>  c[i]=tp,tp=0.0;</p><p><b>  }</b></p><p><b>  }</b></p><p>  DFT

101、://dft子函數(shù),傳遞實(shí)部,虛部,存儲sx數(shù)組,振幅數(shù)組。點(diǎn)數(shù),正反</p><p>  #include<math.h></p><p>  #define PI 3.14159265</p><p>  void dft(double x[],double y[],double x1[],double y1[],double Fn[],int N,

102、int sign)</p><p><b>  {</b></p><p><b>  int i,j;</b></p><p>  double Q,D,C,c,s;</p><p><b>  Q=2*PI/N;</b></p><p>  for(

103、i=0;i<N;i++)</p><p><b>  {</b></p><p>  for(j=0;j<N;j++)</p><p><b>  {</b></p><p><b>  D=Q*i*j;</b></p><p><b&

104、gt;  c=cos(D);</b></p><p>  s=sin(D)*sign;</p><p>  x1[i]+=c*x[j] + s*y[j];</p><p>  y1[i]+=c*y[j] - s*x[j];</p><p><b>  }</b></p><p><

105、;b>  }</b></p><p>  if(sign==-1)</p><p><b>  {</b></p><p><b>  C=1.0/N;</b></p><p>  for(i=0;i<N;i++)</p><p><b> 

106、 {</b></p><p>  x1[i]=C*x1[i],y1[i]=C*y1[i];</p><p><b>  }}</b></p><p>  for(i=0;i<N;i++)</p><p>  Fn[i]=sqrt(pow(x1[i],2) + pow(y1[i],2));</p&g

107、t;<p><b>  }</b></p><p>  FFT://fft子函數(shù),傳遞實(shí)部,虛部,存儲振幅數(shù)組,點(diǎn)數(shù),正反</p><p>  #include<math.h></p><p>  #define PI 3.14159265</p><p>  void fft(double x

108、[],double y[],double Fn[],int N,int sign)</p><p><b>  {</b></p><p>  int i,j,r,m1,m2,m3,m4,k1,k2,l,k;</p><p>  double u,v; //暫時存儲中間實(shí)部與虛部</p><p>  double

109、 c,s,tr,ti,C;</p><p>  l=(int)(log10(N)/log10(2));//計算l的值</p><p>  for(j=0,i=0;i<N-1;i++)//變址運(yùn)算,倒序,采用雷德SF</p><p><b>  {</b></p><p><b>  if(i<j)&

110、lt;/b></p><p><b>  {</b></p><p>  tr=x[j];ti=y[j];x[j]=x[i];y[j]=y[i];x[i]=tr;y[i]=ti;</p><p><b>  }</b></p><p><b>  k=N/2;</b>&l

111、t;/p><p>  while(k<(j+1))</p><p><b>  {</b></p><p><b>  j=j-k;</b></p><p><b>  k=k/2;</b></p><p><b>  }</b>

112、</p><p><b>  j=j+k;</b></p><p><b>  }</b></p><p>  for(i=1;i<=l;i++)//第一重循環(huán),遞推迭代次數(shù)</p><p><b>  {</b></p><p>  m1=int

113、(pow(2,i-1));</p><p><b>  m2=2*m1;</b></p><p><b>  m3=N/m2;</b></p><p>  for(j=0;j<m3;j++)</p><p><b>  {</b></p><p>

114、<b>  m4=j*m2;</b></p><p>  for(r=0;r<m1;r++)</p><p><b>  {</b></p><p><b>  k1=m4+r;</b></p><p><b>  k2=k1+m1;</b><

115、/p><p>  c=cos(2*PI*r/m2);</p><p>  s=sign*sin(2*PI*r/m2);</p><p>  u=x[k2]*c + y[k2]*s;</p><p>  v=y[k2]*c - x[k2]*s;</p><p>  x[k2]=x[k1]-u;y[k2]=y[k1]-v;&l

116、t;/p><p>  x[k1]=x[k1]+u;y[k1]=y[k1]+v;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(sign==-1)</p

117、><p><b>  {</b></p><p><b>  C=1.0/N;</b></p><p>  for(i=0;i<N;i++)</p><p><b>  {</b></p><p>  x[i]=C*x[i];</p>&

118、lt;p>  y[i]=C*y[i];</p><p><b>  }</b></p><p><b>  }</b></p><p>  for(i=0;i<N;i++)</p><p><b>  {</b></p><p>  Fn[i

119、]=sqrt(pow(x[i],2) + pow(y[i],2));</p><p><b>  } </b></p><p><b>  }</b></p><p>  void gyh(double x[],int N)</p><p><b>  {</b></p

120、><p><b>  int i,j;</b></p><p>  double t=0;</p><p>  for(i=0;i<N;i++)</p><p>  if(t<x[i])</p><p><b>  t=x[i];</b></p><

121、;p>  for(j=0;j<N;j++)</p><p>  {x[j]=x[j]/t;}}</p><p><b>  隨機(jī)數(shù):</b></p><p>  //隨機(jī)數(shù)子函數(shù),需要傳遞區(qū)間,產(chǎn)生個數(shù),以及存儲數(shù)組</p><p>  #include<stdlib.h></p>

122、<p>  #include<time.h></p><p>  void uni(double x,double y,int Z,double a[])</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  unsig

123、ned seed=time(NULL);</p><p>  printf("seed=%d\n",seed);</p><p>  printf("\n");</p><p>  srand(seed);</p><p>  for(i=0;i<Z;i++)</p><p&g

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論