義守大學電機系
授課教師:陳慶瀚
E-mail : pierre@isu.edu.tw
10. Filtering(濾波) |
1. 以下是訊號濾波的範例程式,採用上一章範例2的資料檔(存檔為signal.txt),驗證下列程式: #include <iostream.h> #include <fstream.h> void main() { ifstream myfile("signal.txt"); float m[128]; int i,j; for(i=0;i<128;i++) { myfile>>m[i]; } float f[5]={0.2,0.2,0.2,0.2,0.2}; float y[128]; for(i=0;i<128;i++)y[i]=m[i]; for(i=2;i<128-2;i++) { y[i]=0; for(j=0;j<5;j++) { y[i]=y[i]+f[j]*m[i+j-2]; } } ofstream out("filtering.txt"); for(i=0;i<128;i++) { out<<m[i]<<"\t"<<y[i]<<endl; } } 執行本程式,在Excel中把結果繪製成曲線如下: 2. 將上述濾波運算功能移植到Signal物件類別中,作為一個成員函式。 void
Filtering() 3. 請修改上述成員函式,將y[128]改成動態記憶體配置型態
4.請將濾波器長度改為7,即 float f[7]={0.14,0.14,0.14,0.14,0.140.140.14}; 修改成員函式對應的相關程式碼,並驗證結果。
5. 設計濾波器 #include <iostream.h> #include <fstream.h> #include <math.h> #define pi 3.141592653589793 #define wlc 1.88459 void main() { int i,N=10; float f[21]; ofstream out("filter.txt"); for(i=-N;i<=N;i++) { if(i==0) f[i+N]=sin(1E-20*wlc)/(pi*1E-20); else f[i+N]=sin(float(i)*wlc)/(pi*float(i)); cout<<f[i+N]<<endl; out<<f[i+N]<<endl; } } 以下是所得濾波器的圖形: 6. 請把第5題執行後得到的濾波器係數複製到成員函式中,取代原本的均值濾波器係數。
|
|
計算機程式
義守大學電機系
陳慶瀚
2004.10. 20更新