dsp高速數字處理系統設計總結與實驗報告
(2017-2018 學年第 1 學期) 題 目 :_高速數字處理系統設計__ 專業班級 :___電子15-2班_______ 學生姓名 :________ 王 宇_________ 學 號 :__ 1505020223_______ 指導教師 :____宋華軍、周衛東_____ 設計成績 :_________________________
一設計目的通過對基于TMS320VC5416的信號采集處理與控制系統的設計掌握PCB設計軟件AD(Altium Designer) 的使用方法,以及卷積、FFT、FIR 濾波器等數字信號處理算法并熟悉 TI 的 DSP 集成開發環境 CCS軟件的使用,掌握基于 DSP的系統設計流程。
二系統分析2.1 設計要求①設計一個功能完備,能夠獨立運行的精簡 DSP 硬件系統。繪制出系統的功能框圖、使用AD(Altium Designer)繪制出系統的原理圖和PCB 版圖。 ②利用實驗箱的模擬信號產生單元產生不同頻率的信號,或者產生兩個頻率的信號的疊加。在 DSP 中采集信號,并且對信號進行頻譜分析,濾波等。通過鍵盤或者串口命令選擇算法的功能,將計算的信號頻率或者濾波后信號的頻率在LCD 上顯示。 主要功能如下: 一、 對外部輸入的模擬信號采集到DSP 內存,會用CCS 軟件顯示采集的數據波形。 二、 對采集的數據進行如下算法分析: (1) 頻譜分析:使用fft 算法計算信號的頻率。 (2) 對信號進行IIR 濾波或FIR 濾波,并且計算濾波前后信號的頻率。 三、 外部鍵盤或者從計算機來的串口命令選擇算法功能,并且將結果在LCD 上顯示。 2.2 主要任務①繪制出DSP系統的功能框圖、使用AD(Altium Designer)繪制出系統的原理圖和PCB 版圖。 ②在 DSP 中采集信號,用CCS 軟件顯示采集的數據波形,以及對采集的數據進行算法分析。 三 硬件設計3.1 硬件總體結構


3.2 DSP 模塊設計
3.3 電源模塊設計

將5V電源電壓轉換為3.3V和1.6V電源
3.4 時鐘模塊設計此處由外部晶振提供時鐘信號  3.5 存儲器模塊設計 3.6 JTAG模塊設計
3.7 TMS320VC5416 最小系統 PCB 版圖
板上包括了支持TMS320VC5416獨立運行的時鐘電路、復位電路、Flash模塊、JTAG仿真接口電路以及電源模塊等。 四軟件設計4.1 軟件總體流程 
4.3 程序運行效果①:采集的數據及其FFT計算結果: 
②:51階濾波器波形: 
③:濾波前后信號頻譜圖: 
④:采集數據波形和濾后波形比較: 

LCD顯示結果: 
五課程設計總結 為期兩周的課程設計結束了。此次課程設計包含硬件設計以及軟件設計兩個方面,從PCB板的繪制,到CCS軟件的使用,利用軟件實現卷積,FFT算法,濾波器等實驗。 首先,感謝兩位老師:宋老師,周老師的辛勤付出。 在此次課程設計中,在硬件設計部分,首先從硬件整體模塊的設計,到PCB板原理圖的繪制,再到最后PCB板的繪制,收獲頗豐。真正的理解了實際中做一件東西的具體流程,也學會了些許步驟。在拿到一項設計任務時,首先應當了解實際目的,設計要求,從最終的要求出發,一步一步的去完成,同時也要查閱各種資料,找到對應的參照項目,這樣會省去很多的時間。而一個典型的硬件設計應當包括復位電路,時鐘電路,存儲器接口,模數接口,通訊接口。在硬件設計的第一步整體模塊的設計中,我們應當確定整體的芯片需求以及外圍電路的設計,選擇合適的芯片,設計恰當的外圍電路已達到設計的最終要求。而在畫PCB板原理圖時,應當詳細的畫出各個模塊,細節部分不能忽視,包括一個電阻,電容,學會新建元器件庫,會畫部分器件的封裝,打到最后的編譯無錯誤。在最后的繪制PCB板的過程中,首先確定元器件的封裝無錯誤,然后進行元器件的擺放以及鏈接。而在此過程中,要注意規則的設置,以及層數的設計,到達利用最少的層數去完成所需的硬件。 在軟件部分的設計中,從剛開始的熟悉CCS編譯環境,到AD采樣,再到對采樣的數據進行快速傅里葉運算,進行頻譜分析,以及后來的對采樣的信號進行濾波,設計IIR和FIR濾波器對AD采樣的信號進行處理,觀察處理后的信號的頻譜,掌握利用軟件進行卷積運算,FFT運算,FIR濾波器的設計等。在這一部分的設計過程中,發現由于自己的C語言知識不夠牢固,對軟件部分的實現產生了很大的阻礙,一定的編程能力本來對于電子的學生來說是很重要的,但是在長期的學習中很多人只側重于理論知識的學習,而忽略的實際的動手能力,我們都是這一群人中的一個,導致了最后的動手能力,編程能力急劇下降。 在這次的課程設計中,由于自己比較喜歡干貨,不太喜歡理論知識的學習,所以在動手這一方面,自己是較為感興趣的,也真正的全身心的投入進去,同時又學到了很多東西,接觸之前未曾接觸過的知識,不斷地提升自己,在實踐中成長。同時在此次設計中,發現了自己的許多不足,雖然自己對于動手方面比較感興趣,但是自己的理論知識的儲備不夠完善,編程能力較為低下等,這都是對于自身發展的很大的阻礙,希望在今后的學習生活中能夠不斷地完善自己,充實自己,學習更多的知識,更大程度的增強自己的動手能力。最后,再次感謝兩位老師的辛勤付出。 六參考文獻【1】 吳鎮揚.數字信號處理[J] 2009,(第1期). 【2】 鄒理和.數字信號處理.上冊.北京:國防工業出版社,1985. 【3】 張雄偉,曹鐵勇.DSP芯片的原理與開發應用.第二版.北京:電子工業出版社 2000. 4.2 核心模塊及實現代碼FFT算法程序: - void kfft(double pr[LEN],double pi[LEN],int n,int k,double fr[LEN],double fi[LEN],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;
- }
- }
復制代碼
卷積程序:
- void Convolveok( //卷積函數
- double *x, // 原始輸入數據
- double *h, // 沖擊響應
- double *y, // 卷積輸出結果
- UINT16 Leng, // 序列長度
- UINT16 h_Len)
- {
- UINT16 m,p,j;
- double r,rm;
- double xmean = 0.0;
- double xmid[100];
- for(m=0;m<h_Len;m++)
- {
- xmid[m] = 0.0;
- }
- for (m=0; m<Leng; m++)
- {
- xmean = x[m] + xmean;
- }
- xmean = 1.0*xmean/Length;
-
- for (m=0; m<Leng; m++)
- {
- x[m] = x[m] - xmean;
- }
- for (m=0; m<Leng; m++)
- {
- for (p=0; p<h_Len; p++)
- {
- xmid[h_Len-p-1] = xmid[h_Len-p-2];
- }
- xmid[0] = x[m];
- r = 0.0;
- rm= 0.0;
- for (j=0; j<h_Len; j++)
- {
- r = xmid[j] * h[j];
- rm = rm + r;
- }
- y[m] = rm;
- }
- }
復制代碼
頻譜函數,求最大值和次大值函數:
- void pinpu(double pr[Length])
- {
- num1=0;
- num2=0;
- v=0;
- for(k=0;k<128;k++)
- {
- value[k]=0;
- number[k]=0;
- }
- for(k=1;k<127;k++)
- {
- if(pr[k]>=pr[k-1]&&pr[k]>=pr[k+1])
- {
- value[v]=pr[k];
- number[v]=k;
- v++;
- }
- }
- max1=value[0];
- max2=value[0];
- for(k=1;k<=127;k++)
- {
- if(value[k]>=max1)
- {
- max2=max1;
- max1=value[k];
- num2=num1;
- num1=number[k];
- }
- else if(value[k]>=max2)
- {
- max2=value[k];
- num2=number[k];
- }
- fk1=250000/256*num1;
- fk2=250000/256*num2;
- if(fk1>fk2)
- {
- fk3=fk1;
- fk1=fk2;
- fk2=fk3;
- }
- }
- }
復制代碼
FIR濾波器設計函數
void firdes(double npass) //FIR濾波器子程序
{
int t;
for (t=0; t<51; t++)
{
if (t == ((51-1)/2))
h[t]=2*npass;
else
h[t] = sin((t-(51-1)/2.0)*npass*2*pii)/(pii*(t-(51-1)/2.0));
}
}
LCD顯示函數:
外部中斷2服務函數(包含歸一化函數):
- interrupt void ExtInt2() //中斷2中斷子程序
- {
-
- *(unsigned int*)IFR=0xFFFF; //清除所有中斷標志,"寫1清0" ,這個語句可以省略,響應中斷自動清除中斷標志
-
- //----讀AD7822的轉換結果----------------
-
- data_buff[i] = port8002 & 0x00ff;
-
- i++;
-
- if(i == 256)
- {sum=0;
- for(i2=0;i2<256;i2++) //歸一化函數
- {sum=sum+data_buff[i2];}
- ave=sum/256;
- for(i3=0;i3<256;i3++)
- {pr[i3]=data_buff[i3]-ave;
- data_buff[i3]=pr[i3];
- pi[i3]=0.0;
- fr[i3]=0.0;
- fi[i3]=0.0;}
- kfft(pr,pi,256,8, fr, fi,0,1);
- pinpu(pr);
- npass=(fk1+fk2)/500000;
- firdes(npass);
- Convolvevok(data_buff,h,y,256,51);
- for(j=0;j<256;j++)
- {
- pi[j]=0;
- }
- kfft(y,pi,256,8,fr,fi,0,1);
- display();
- i = 0; //在此設斷點
- }
- return;
- }
復制代碼
完整的Word格式文檔51黑下載地址:
DSP設計總結報告_電子1502王宇1505020223.docx
(941.1 KB, 下載次數: 96)
2018-1-12 15:04 上傳
點擊文件名下載附件
中國石油大學(華東)DSP系統設計總結報告
|