【嵌入式】STM32利用arm-dsp库进行FIR滤波
目錄
- 一、Matlab中的FIR實驗
- 1.搭建原始信號
- 2.設計FIR濾波器
- 3.FIR濾波
- 4.濾波前后對比
- 二、嵌入式平臺FIR濾波移植
- 1.arm-dsp庫移植
- 2.獲得FIR濾波系數
- 3.基于arm-dsp的FIR程序
- 4.濾波結果-與Matlab比對
- 三、總結
電力電子應用中,往往需要對電流、電壓信號進行采樣,濾除干擾頻段的信號,或者保留、提取感興趣的頻段的信號。通過模擬濾波往往難以達到較好的效果,因此需要采用數字濾波器。
常用的數字濾波器有IIR、FIR濾波器兩種。FIR 濾波器最重要的優點就是由于不存在系統極點,FIR 濾波器是絕對穩定的系統。FIR 濾波器還確保了線性相位,這在信號處理中也非常重要。此外,由于不需要反饋,FIR 濾波器的實現也比 IIR 濾波器簡單。FIR 濾波器的缺點在于它的性能不如同樣階數的 IIR 濾波器,不過由于數字計算硬件的飛速發展,這一點已經不成為問題。再加上引入計算機輔助設計,FIR 濾波器的設計也得到極大的簡化。基于上述原因,FIR 濾波器比 IIR 濾波器的應用更廣泛。
這篇博文就通過Matlab仿真來直觀的介紹FIR濾波器的用途,并將FIR濾波器移植到以STM32F4為基礎的嵌入式平臺中。
一、Matlab中的FIR實驗
通過一個簡單的實驗來使用FIR濾波器:將200Hz正弦信號疊加到基波50Hz的正弦信號上,然后利用FIR濾波器提取200Hz信號。采樣率設置為6400Hz。
1.搭建原始信號
在simulink搭建簡易混合電路,將幅值為1的50Hz正弦波與幅值為1的200Hz正弦波混合。
首先設置simulink的仿真步長為固定步長,1/6400,那么就相當于采樣率為6400Hz,如圖所示。
搭建電路如下圖所示。其中1為多路復合,為了在scope中分別查看50Hz和200Hz的原始信號,2為信號疊加混合,即50Hz混合200Hz的信號。
運行0.2秒,即10個50Hz周波,查看scope窗口如下圖所示。可以看到上方為50Hz、200Hz的原始信號,下方為混合后的信號。我們現在要做的就是利用FIR濾波器將200Hz信號從下方的信號中提取出來。將scope數據導出到workspace待用。
2.設計FIR濾波器
在matlab命令行輸入fdatool,打開濾波器設計工具。
1.選擇帶通濾波、FIR窗口濾波;
2.選擇常用的漢寧窗;
3.指定FIR階數,一般來講,階數越高,濾波效果越好,但運算量越大,需要在濾波效果和運行速度上做一個取舍,這里我們暫時設置為100階;
4.設置采樣頻率為6400Hz,要與simulink中的相符;
5.設置帶通范圍,這里我們設置為帶通范圍180~220Hz;
6.點擊Design Filter;
7.點擊Group Delay Response可以查看濾波器的相位延遲,這里是50,這個數要記住,后邊要用到。
生成濾波器后,我們將濾波器導出到workspace中。具體操作為:file->export->Export As選擇Objects。默認的濾波器名字為Hd。
3.FIR濾波
至此,worksapce中已經有了scope中導出的原始波形、混雜波形,以及設計好的濾波器Hd。
在命令行中對混雜信號進行濾波:
其中rawSignal為混雜信號,即scope中下方的波形。運行后,ans中就存儲了濾波后的波形。
4.濾波前后對比
將濾波后的波形與原始的200Hz信號進行比對:
plot(1:200,ans(51:250),1:200,raw200Hz(1:200))其中,濾波后的信號要從51開始,因為濾波器在設計時的FIR相位延遲為50,即第51個點才為濾波后的數據起始點。raw200Hz為從scope中導出的200Hz信號數據。繪圖后如下圖所示。可以看出FIR濾波震蕩穩定后,能較好的帶通200Hz信號,幅值、相位均與原信號相同,50Hz信號被濾掉。
二、嵌入式平臺FIR濾波移植
1.arm-dsp庫移植
arm-dsp庫的移植可以參考我之前的博客【嵌入式】利用arm-DSP庫進行FFT計算,獲得信號的頻譜、幅值及相位(上)中的二-1節內容。
2.獲得FIR濾波系數
還是在fdatool中,當設計玩濾波器后,點擊Targets->Generate C Header.
打開生成的fdacoefs.h,里邊的BL即為FIR濾波器階數。B數組即為FIR濾波器系數,將前邊的數據類型real64_T改為float即可。
3.基于arm-dsp的FIR程序
1.將混雜信號采樣值復制到C數組raw中。
const float raw[1280] = {0,0.244157996343546,0.480700572694650,0.702300707474964,0.902197103202676,1.07444979220581,1.21416420976575,1.31767513379545,1.38268343236509,1.40834037383351, 1.39527626933728,1.34557235649577,1.26267701420615,1.15126953751204,1.01707671652874,0.866649276863147,0.707106781186548,0.545860803338831,0.390327020997647,0.247637298461043, 0.124362831115998,0.0262589976977269,-0.0419582681629318,-0.0767959872797872,-0.0761204674887133,-0.0392412152202096,0.0330608032209223,0.138561640891999,0.273678499216683,0.433606276945179, 0.612501294307107,0.803705134189045,1.00000000000000,1.19388577822130,1.37786815903729,1.54474674298438,1.68789206158978,1.80150086549709,1.88081986824350,1.92232934558625, 1.92387953251129,1.88477457352667,1.80580079685964,1.68919822230282,1.53857639348909,1.35877776450025,1.15569388572783,0.936041447371087,0.707106781186548,0.476468632830889, 0.251709851798556,0.0401290714728317,-0.151536548166946,-0.317366868109323,-0.452482795685290,-0.553230186972949,-0.617316567634911,-0.643895427011010,-0.633594855256824,-0.588489432399282, -0.512016459170419,-0.408839758564241,-0.284666292035529,-0.146022647688710,-3.67394039744206e-16,0.146022647688711,0.284666292035529,0.408839758564241,0.512016459170420,0.588489432399282, 0.633594855256825,0.643895427011010,0.617316567634910,0.553230186972948,0.452482795685289,0.317366868109324,0.151536548166945,-0.0401290714728307,-0.251709851798557,-0.476468632830890, -0.707106781186549,-0.936041447371088,-1.15569388572783,-1.35877776450025,-1.53857639348909,-1.68919822230282,-1.80580079685964,-1.88477457352667,-1.92387953251129,-1.92232934558625, -1.88081986824350,-1.80150086549709,-1.68789206158978,-1.54474674298438,-1.37786815903729,-1.19388577822130,-1.00000000000000,-0.803705134189046,-0.612501294307106,-0.433606276945178, -0.273678499216683,-0.138561640891999,-0.0330608032209226,0.0392412152202102,0.0761204674887134,0.0767959872797871,0.0419582681629319,-0.0262589976977280,-0.124362831115999,-0.247637298461043, -0.390327020997648,-0.545860803338834,-0.707106781186550,-0.866649276863148,-1.01707671652874,-1.15126953751204,-1.26267701420615,-1.34557235649577,-1.39527626933728,-1.40834037383351, -1.38268343236509,-1.31767513379545,-1.21416420976575,-1.07444979220581,-0.902197103202674,-0.702300707474963,-0.480700572694650,-0.244157996343547,-1.22464679914735e-15,0.244157996343549, 0.480700572694652,0.702300707474965,0.902197103202676,1.07444979220581,1.21416420976575,1.31767513379545,1.38268343236509,1.40834037383351,1.39527626933728,1.34557235649577, 1.26267701420615,1.15126953751204,1.01707671652874,0.866649276863147,0.707106781186549,0.545860803338832,0.390327020997646,0.247637298461042,0.124362831115998,0.0262589976977273, -0.0419582681629314,-0.0767959872797872,-0.0761204674887132,-0.0392412152202096,0.0330608032209218,0.138561640892000,0.273678499216684,0.433606276945180,0.612501294307107,0.803705134189047, 1.00000000000000,1.19388577822130,1.37786815903729,1.54474674298439,1.68789206158978,1.80150086549709,1.88081986824350,1.92232934558625,1.92387953251129,1.88477457352667, 1.80580079685964,1.68919822230282,1.53857639348909,1.35877776450025,1.15569388572782,0.936041447371084,0.707106781186545,0.476468632830888,0.251709851798555,0.0401290714728308, -0.151536548166945,-0.317366868109323,-0.452482795685288,-0.553230186972950,-0.617316567634911,-0.643895427011010,-0.633594855256824,-0.588489432399281,-0.512016459170419,-0.408839758564240, -0.284666292035529,-0.146022647688706,-1.10218211923262e-15,0.146022647688709,0.284666292035527,0.408839758564238,0.512016459170421,0.588489432399282,0.633594855256825,0.643895427011010, 0.617316567634910,0.553230186972946,0.452482795685290,0.317366868109319,0.151536548166948,-0.0401290714728279,-0.251709851798559,-0.476468632830885,-0.707106781186550,-0.936041447371081, -1.15569388572783,-1.35877776450025,-1.53857639348909,-1.68919822230282,-1.80580079685964,-1.88477457352667,-1.92387953251129,-1.92232934558625,-1.88081986824350,-1.80150086549709, -1.68789206158978,-1.54474674298438,-1.37786815903728,-1.19388577822130,-0.999999999999995,-0.803705134189046,-0.612501294307103,-0.433606276945176,-0.273678499216681,-0.138561640891998, -0.0330608032209183,0.0392412152202098,0.0761204674887133,0.0767959872797871,0.0419582681629321,-0.0262589976977290,-0.124362831115996,-0.247637298461045,-0.390327020997644,-0.545860803338833, -0.707106781186549,-0.866649276863148,-1.01707671652874,-1.15126953751204,-1.26267701420615,-1.34557235649577,-1.39527626933728,-1.40834037383351,-1.38268343236509,-1.31767513379545, -1.21416420976575,-1.07444979220581,-0.902197103202675,-0.702300707474956,-0.480700572694651,-0.244157996343539,-2.44929359829471e-15,0.244157996343543,0.480700572694655,0.702300707474960, 0.902197103202678,1.07444979220581,1.21416420976575,1.31767513379545,1.38268343236509,1.40834037383351,1.39527626933728,1.34557235649577,1.26267701420615,1.15126953751204, 1.01707671652873,0.866649276863145,0.707106781186546,0.545860803338830,0.390327020997642,0.247637298461043,0.124362831115994,0.0262589976977277,-0.0419582681629329,-0.0767959872797874, -0.0761204674887129,-0.0392412152202090,0.0330608032209198,0.138561640892000,0.273678499216683,0.433606276945179,0.612501294307106,0.803705134189050,0.999999999999998,1.19388577822130, 1.37786815903728,1.54474674298439,1.68789206158978,1.80150086549709,1.88081986824350,1.92232934558625,1.92387953251129,1.88477457352667,1.80580079685964,1.68919822230281, 1.53857639348910,1.35877776450024,1.15569388572782,0.936041447371085,0.707106781186546,0.476468632830881,0.251709851798556,0.0401290714728245,-0.151536548166944,-0.317366868109322, -0.452482795685292,-0.553230186972947,-0.617316567634911,-0.643895427011010,-0.633594855256824,-0.588489432399281,-0.512016459170419,-0.408839758564241,-0.284666292035525,-0.146022647688712, 3.49210031947972e-15,0.146022647688708,0.284666292035531,0.408839758564242,0.512016459170420,0.588489432399282,0.633594855256826,0.643895427011010,0.617316567634909,0.553230186972949, 0.452482795685286,0.317366868109326,0.151536548166942,-0.0401290714728269,-0.251709851798558,-0.476468632830900,-0.707106781186549,-0.936041447371096,-1.15569388572783,-1.35877776450025, -1.53857639348909,-1.68919822230282,-1.80580079685964,-1.88477457352667,-1.92387953251129,-1.92232934558625,-1.88081986824350,-1.80150086549709,-1.68789206158977,-1.54474674298438, -1.37786815903728,-1.19388577822130,-0.999999999999996,-0.803705134189033,-0.612501294307104,-0.433606276945171,-0.273678499216682,-0.138561640891994,-0.0330608032209219,0.0392412152202076, 0.0761204674887132,0.0767959872797880,0.0419582681629324,-0.0262589976977287,-0.124362831115996,-0.247637298461045,-0.390327020997654,-0.545860803338832,-0.707106781186554,-0.866649276863147, -1.01707671652874,-1.15126953751203,-1.26267701420615,-1.34557235649577,-1.39527626933728,-1.40834037383351,-1.38268343236509,-1.31767513379545,-1.21416420976575,-1.07444979220580, -0.902197103202676,-0.702300707474957,-0.480700572694636,-0.244157996343540,-3.67394039744206e-15,0.244157996343551,0.480700572694645,0.702300707474966,0.902197103202670,1.07444979220581, 1.21416420976574,1.31767513379545,1.38268343236509,1.40834037383351,1.39527626933728,1.34557235649576,1.26267701420615,1.15126953751203,1.01707671652873,0.866649276863140, 0.707106781186547,0.545860803338837,0.390327020997637,0.247637298461039,0.124362831115999,0.0262589976977311,-0.0419582681629346,-0.0767959872797873,-0.0761204674887137,-0.0392412152202092, 0.0330608032209192,0.138561640891999,0.273678499216688,0.433606276945178,0.612501294307099,0.803705134189056,1.00000000000000,1.19388577822130,1.37786815903728,1.54474674298439, 1.68789206158978,1.80150086549709,1.88081986824350,1.92232934558625,1.92387953251129,1.88477457352667,1.80580079685964,1.68919822230281,1.53857639348908,1.35877776450024, 1.15569388572783,0.936041447371070,0.707106781186539,0.476468632830891,0.251709851798565,0.0401290714728182,-0.151536548166950,-0.317366868109321,-0.452482795685291,-0.553230186972947, -0.617316567634911,-0.643895427011011,-0.633594855256824,-0.588489432399284,-0.512016459170413,-0.408839758564237,-0.284666292035531,-0.146022647688717,8.08638275819206e-15,0.146022647688712, 0.284666292035526,0.408839758564242,0.512016459170423,0.588489432399281,0.633594855256825,0.643895427011010,0.617316567634909,0.553230186972943,0.452482795685287,0.317366868109326, 0.151536548166930,-0.0401290714728405,-0.251709851798557,-0.476468632830883,-0.707106781186548,-0.936041447371095,-1.15569388572783,-1.35877776450025,-1.53857639348909,-1.68919822230282, -1.80580079685965,-1.88477457352667,-1.92387953251129,-1.92232934558625,-1.88081986824349,-1.80150086549709,-1.68789206158978,-1.54474674298437,-1.37786815903728,-1.19388577822130, -0.999999999999997,-0.803705134189034,-0.612501294307105,-0.433606276945171,-0.273678499216682,-0.138561640891994,-0.0330608032209160,0.0392412152202113,0.0761204674887130,0.0767959872797880, 0.0419582681629289,-0.0262589976977282,-0.124362831115995,-0.247637298461044,-0.390327020997654,-0.545860803338831,-0.707106781186553,-0.866649276863146,-1.01707671652874,-1.15126953751203, -1.26267701420615,-1.34557235649577,-1.39527626933728,-1.40834037383351,-1.38268343236509,-1.31767513379545,-1.21416420976574,-1.07444979220580,-0.902197103202677,-0.702300707474974, -0.480700572694637,-0.244157996343542,-4.89858719658941e-15,0.244157996343549,0.480700572694644,0.702300707474965,0.902197103202683,1.07444979220581,1.21416420976574,1.31767513379546, 1.38268343236509,1.40834037383351,1.39527626933729,1.34557235649576,1.26267701420615,1.15126953751204,1.01707671652873,0.866649276863141,0.707106781186548,0.545860803338826, 0.390327020997649,0.247637298461040,0.124362831115991,0.0262589976977254,-0.0419582681629305,-0.0767959872797885,-0.0761204674887125,-0.0392412152202095,0.0330608032209189,0.138561640891998, 0.273678499216687,0.433606276945177,0.612501294307111,0.803705134189041,1.00000000000000,1.19388577822131,1.37786815903729,1.54474674298438,1.68789206158979,1.80150086549709, 1.88081986824350,1.92232934558625,1.92387953251129,1.88477457352667,1.80580079685964,1.68919822230282,1.53857639348909,1.35877776450025,1.15569388572782,0.936041447371087, 0.707106781186540,0.476468632830875,0.251709851798550,0.0401290714728340,-0.151536548166936,-0.317366868109331,-0.452482795685291,-0.553230186972946,-0.617316567634910,-0.643895427011011, -0.633594855256825,-0.588489432399280,-0.512016459170420,-0.408839758564238,-0.284666292035522,-0.146022647688708,-3.30654635769785e-15,0.146022647688722,0.284666292035535,0.408839758564241, 0.512016459170416,0.588489432399286,0.633594855256825,0.643895427011011,0.617316567634909,0.553230186972944,0.452482795685287,0.317366868109316,0.151536548166944,-0.0401290714728249, -0.251709851798572,-0.476468632830898,-0.707106781186546,-0.936041447371077,-1.15569388572784,-1.35877776450025,-1.53857639348909,-1.68919822230282,-1.80580079685965,-1.88477457352667, -1.92387953251129,-1.92232934558625,-1.88081986824349,-1.80150086549709,-1.68789206158977,-1.54474674298439,-1.37786815903728,-1.19388577822129,-0.999999999999998,-0.803705134189049, -0.612501294307093,-0.433606276945172,-0.273678499216683,-0.138561640892004,-0.0330608032209163,0.0392412152202111,0.0761204674887129,0.0767959872797868,0.0419582681629329,-0.0262589976977278, -0.124362831116003,-0.247637298461043,-0.390327020997642,-0.545860803338842,-0.707106781186552,-0.866649276863145,-1.01707671652873,-1.15126953751204,-1.26267701420615,-1.34557235649577, -1.39527626933728,-1.40834037383351,-1.38268343236509,-1.31767513379545,-1.21416420976575,-1.07444979220580,-0.902197103202664,-0.702300707474959,-0.480700572694655,-0.244157996343525, 1.16403343982657e-14,0.244157996343548,0.480700572694643,0.702300707474964,0.902197103202682,1.07444979220581,1.21416420976575,1.31767513379545,1.38268343236509,1.40834037383351, 1.39527626933728,1.34557235649577,1.26267701420614,1.15126953751203,1.01707671652874,0.866649276863153,0.707106781186537,0.545860803338827,0.390327020997649,0.247637298461050, 0.124362831115992,0.0262589976977259,-0.0419582681629302,-0.0767959872797860,-0.0761204674887126,-0.0392412152202098,0.0330608032209184,0.138561640892006,0.273678499216686,0.433606276945176, 0.612501294307124,0.803705134189054,1.00000000000000,1.19388577822132,1.37786815903730,1.54474674298439,1.68789206158978,1.80150086549710,1.88081986824350,1.92232934558625, 1.92387953251129,1.88477457352667,1.80580079685964,1.68919822230282,1.53857639348910,1.35877776450023,1.15569388572782,0.936041447371089,0.707106781186558,0.476468632830876, 0.251709851798551,0.0401290714728351,-0.151536548166935,-0.317366868109331,-0.452482795685290,-0.553230186972946,-0.617316567634914,-0.643895427011011,-0.633594855256825,-0.588489432399284, -0.512016459170414,-0.408839758564238,-0.284666292035532,-0.146022647688698,6.61680659921524e-15,0.146022647688711,0.284666292035544,0.408839758564249,0.512016459170422,0.588489432399281, 0.633594855256827,0.643895427011010,0.617316567634910,0.553230186972950,0.452482795685279,0.317366868109317,0.151536548166945,-0.0401290714728239,-0.251709851798539,-0.476468632830897, -0.707106781186545,-0.936041447371076,-1.15569388572781,-1.35877776450025,-1.53857639348909,-1.68919822230281,-1.80580079685965,-1.88477457352667,-1.92387953251129,-1.92232934558625, -1.88081986824349,-1.80150086549709,-1.68789206158977,-1.54474674298437,-1.37786815903728,-1.19388577822128,-0.999999999999984,-0.803705134189036,-0.612501294307107,-0.433606276945161, -0.273678499216673,-0.138561640891996,-0.0330608032209233,0.0392412152202067,0.0761204674887143,0.0767959872797869,0.0419582681629331,-0.0262589976977213,-0.124362831116002,-0.247637298461043, -0.390327020997641,-0.545860803338818,-0.707106781186552,-0.866649276863144,-1.01707671652873,-1.15126953751204,-1.26267701420615,-1.34557235649577,-1.39527626933729,-1.40834037383351, -1.38268343236509,-1.31767513379544,-1.21416420976574,-1.07444979220581,-0.902197103202652,-0.702300707474945,-0.480700572694639,-0.244157996343544,-7.34788079488412e-15,0.244157996343564, 0.480700572694659,0.702300707474963,0.902197103202668,1.07444979220582,1.21416420976575,1.31767513379545,1.38268343236509,1.40834037383351,1.39527626933728,1.34557235649577, 1.26267701420616,1.15126953751203,1.01707671652874,0.866649276863154,0.707106781186538,0.545860803338828,0.390327020997650,0.247637298461031,0.124362831115993,0.0262589976977263, -0.0419582681629376,-0.0767959872797883,-0.0761204674887126,-0.0392412152202022,0.0330608032209309,0.138561640892006,0.273678499216686,0.433606276945175,0.612501294307123,0.803705134189053, 1.00000000000000,1.19388577822129,1.37786815903727,1.54474674298437,1.68789206158980,1.80150086549710,1.88081986824350,1.92232934558625,1.92387953251129,1.88477457352668, 1.80580079685965,1.68919822230282,1.53857639348907,1.35877776450023,1.15569388572782,0.936041447371090,0.707106781186559,0.476468632830878,0.251709851798552,0.0401290714728360, -0.151536548166934,-0.317366868109330,-0.452482795685289,-0.553230186972957,-0.617316567634913,-0.643895427011011,-0.633594855256825,-0.588489432399285,-0.512016459170428,-0.408839758564222, -0.284666292035513,-0.146022647688699,5.88201851972683e-15,0.146022647688710,0.284666292035524,0.408839758564231,0.512016459170409,0.588489432399289,0.633594855256827,0.643895427011010, 0.617316567634910,0.553230186972951,0.452482795685297,0.317366868109318,0.151536548166946,-0.0401290714728229,-0.251709851798570,-0.476468632830896,-0.707106781186544,-0.936041447371108, -1.15569388572784,-1.35877776450025,-1.53857639348909,-1.68919822230281,-1.80580079685965,-1.88477457352668,-1.92387953251129,-1.92232934558625,-1.88081986824349,-1.80150086549709, -1.68789206158979,-1.54474674298440,-1.37786815903726,-1.19388577822128,-0.999999999999985,-0.803705134189037,-0.612501294307108,-0.433606276945186,-0.273678499216695,-0.138561640891996, -0.0330608032209108,0.0392412152202144,0.0761204674887142,0.0767959872797869,0.0419582681629335,-0.0262589976977330,-0.124362831116002,-0.247637298461042,-0.390327020997640,-0.545860803338840, -0.707106781186551,-0.866649276863166,-1.01707671652875,-1.15126953751204,-1.26267701420615,-1.34557235649576,-1.39527626933728,-1.40834037383351,-1.38268343236508,-1.31767513379544, -1.21416420976574,-1.07444979220581,-0.902197103202680,-0.702300707474977,-0.480700572694674,-0.244157996343510,2.69546091939735e-14,0.244157996343563,0.480700572694657,0.702300707474962, 0.902197103202667,1.07444979220582,1.21416420976575,1.31767513379545,1.38268343236509,1.40834037383351,1.39527626933728,1.34557235649577,1.26267701420614,1.15126953751203, 1.01707671652874,0.866649276863155,0.707106781186539,0.545860803338829,0.390327020997629,0.247637298461032,0.124362831115993,0.0262589976977268,-0.0419582681629297,-0.0767959872797858, -0.0761204674887100,-0.0392412152202024,0.0330608032209304,0.138561640892005,0.273678499216685,0.433606276945174,0.612501294307095,0.803705134189024,1,1.19388577822132, 1.37786815903730,1.54474674298439,1.68789206158978,1.80150086549708,1.88081986824350,1.92232934558625,1.92387953251129,1.88477457352667,1.80580079685964,1.68919822230282, 1.53857639348908,1.35877776450023,1.15569388572782,0.936041447371091,0.707106781186560,0.476468632830879,0.251709851798522,0.0401290714728076,-0.151536548166959,-0.317366868109329, -0.452482795685289,-0.553230186972945,-0.617316567634907,-0.643895427011009,-0.633594855256821,-0.588489432399276,-0.512016459170415,-0.408839758564239,-0.284666292035533,-0.146022647688720, 5.14723044023841e-15,0.146022647688710,0.284666292035543,0.408839758564248,0.512016459170421,0.588489432399280,0.633594855256827,0.643895427011010,0.617316567634910,0.553230186972951, 0.452482795685281,0.317366868109318,0.151536548166920,-0.0401290714728512,-0.251709851798569,-0.476468632830895,-0.707106781186543,-0.936041447371074,-1.15569388572781,-1.35877776450028, -1.53857639348911,-1.68919822230283,-1.80580079685965,-1.88477457352667,-1.92387953251129,-1.92232934558625,-1.88081986824349,-1.80150086549708,-1.68789206158977,-1.54474674298438, -1.37786815903729,-1.19388577822131,-0.999999999999986,-0.803705134189038,-0.612501294307109,-0.433606276945162,-0.273678499216675,-0.138561640891997,-0.0330608032209242,0.0392412152202141, 0.0761204674887140,0.0767959872797871,0.0419582681629337,-0.0262589976977204,-0.124362831116001,-0.247637298461061,-0.390327020997661,-0.545860803338840,-0.707106781186550,-0.866649276863143, -1.01707671652873,-1.15126953751202,-1.26267701420616,-1.34557235649577,-1.39527626933729,-1.40834037383351,-1.38268343236509,-1.31767513379545,-1.21416420976576,-1.07444979220581, -0.902197103202654,-0.702300707474947,-0.480700572694641,-0.244157996343546,-9.79717439317883e-15,0.244157996343562,0.480700572694656,0.702300707474961,0.902197103202666,1.07444979220582, 1.21416420976575,1.31767513379546,1.38268343236509,1.40834037383351,1.39527626933728,1.34557235649577,1.26267701420616,1.15126953751201,1.01707671652872,0.866649276863133, 0.707106781186540,0.545860803338829,0.390327020997652,0.247637298461052,0.124362831116010,0.0262589976977150,-0.0419582681629370,-0.0767959872797882,-0.0761204674887128,-0.0392412152202106, 0.0330608032209170,0.138561640892005,0.273678499216684,0.433606276945174,0.612501294307121,0.803705134189051,0.999999999999999,1.19388577822132,1.37786815903730,1.54474674298439, 1.68789206158978,1.80150086549708,1.88081986824350,1.92232934558625,1.92387953251128,1.88477457352667,1.80580079685964,1.68919822230282,1.53857639348910,1.35877776450026, 1.15569388572779,0.936041447371059,0.707106781186528,0.476468632830880,0.251709851798555,0.0401290714728381,-0.151536548166932,-0.317366868109328,-0.452482795685288,-0.553230186972956, -0.617316567634913,-0.643895427011011,-0.633594855256825,-0.588489432399276,-0.512016459170415,-0.408839758564240,-0.284666292035534,-0.146022647688700,4.41244236075000e-15,0.146022647688730, 0.284666292035542,0.408839758564247,0.512016459170421,0.588489432399280,0.633594855256823,0.643895427011010,0.617316567634904,0.553230186972940,0.452482795685281,0.317366868109319, 0.151536548166947,-0.0401290714728209,-0.251709851798536,-0.476468632830893,-0.707106781186575,-0.936041447371106,-1.15569388572784,-1.35877776450025,-1.53857639348909,-1.68919822230281, -1.80580079685964,-1.88477457352667,-1.92387953251129,-1.92232934558625,-1.88081986824349,-1.80150086549709,-1.68789206158977,-1.54474674298438,-1.37786815903729,-1.19388577822131, -0.999999999999987,-0.803705134189039,-0.612501294307083,-0.433606276945163,-0.273678499216675,-0.138561640891997,-0.0330608032209246,0.0392412152202060,0.0761204674887113,0.0767959872797847, 0.0419582681629264,-0.0262589976977321,-0.124362831116000,-0.247637298461041,-0.390327020997639,-0.545860803338816,-0.707106781186549,-0.866649276863165,-1.01707671652875,-1.15126953751204, -1.26267701420615,-1.34557235649576,-1.39527626933729,-1.40834037383351,-1.38268343236509,-1.31767513379544,-1.21416420976574,-1.07444979220581,-0.902197103202655,-0.702300707474948, -0.480700572694643,-0.244157996343548,-1.10218211923262e-14,0.244157996343526,0.480700572694688,0.702300707474991,0.902197103202692,1.07444979220582,1.21416420976575,1.31767513379545, 1.38268343236509,1.40834037383351,1.39527626933728,1.34557235649576,1.26267701420614,1.15126953751203,1.01707671652874,0.866649276863156,0.707106781186540,0.545860803338830, 0.390327020997631,0.247637298461033,0.124362831115994,0.0262589976977276,-0.0419582681629368,-0.0767959872797881,-0.0761204674887129,-0.0392412152202110,0.0330608032209165,0.138561640892004, 0.273678499216705,0.433606276945197,0.612501294307120,0.803705134189050,0.999999999999998,1.19388577822129,1.37786815903727,1.54474674298441,1.68789206158979,1.80150086549710, 1.88081986824350,1.92232934558625,1.92387953251129,1.88477457352668,1.80580079685964,1.68919822230280,1.53857639348908,1.35877776450024,1.15569388572782,0.936041447371093, 0.707106781186563,0.476468632830881,0.251709851798556,0.0401290714728096,-0.151536548166957,-0.317366868109327,-0.452482795685288,-0.553230186972956,-0.617316567634913,-0.643895427011011, -0.633594855256825,-0.588489432399285,-0.512016459170416,-0.408839758564224,-0.284666292035515,-0.146022647688701,3.67765428126159e-15,0.146022647688708,0.284666292035522,0.408839758564230, 0.512016459170434,0.588489432399288,0.633594855256827,0.643895427011010,0.617316567634910,0.553230186972952,0.452482795685299,0.317366868109320,0.151536548166922,-0.0401290714728491, -0.251709851798567,-0.476468632830892,-0.707106781186541,-0.936041447371104,-1.15569388572783,-1.35877776450025,-1.53857639348909,-1.68919822230283,-1.80580079685964,-1.88477457352668, -1.92387953251129,-1.92232934558625,-1.88081986824350,-1.80150086549709,-1.68789206158979,-1.54474674298436,-1.37786815903726,-1.19388577822128,-0.999999999999988,-0.803705134189040, -0.612501294307111,-0.433606276945189,-0.273678499216698,-0.138561640891980,-0.0330608032209121,0.0392412152202136,0.0761204674887138,0.0767959872797873,0.0419582681629341,-0.0262589976977317, -0.124362831116000,-0.247637298461040,-0.390327020997660,-0.545860803338838,-0.707106781186548,-0.866649276863164,-1.01707671652875,-1.15126953751204,-1.26267701420615,-1.34557235649576, -1.39527626933729,-1.40834037383351,-1.38268343236508,-1.31767513379544,-1.21416420976574,-1.07444979220581,-0.902197103202683,-0.702300707474980,-0.480700572694610,-0.244157996343514};2.利用arm_fir_init_f32和arm_fir_f32進行FIR計算。
首先講解arm_fir_init_f32 FIR初始化函數,其函數原型為
其中:S為fir實例指針;numTaps為FIR階數;pCoeffs為FIR系數指針;pState為狀態數組指針,其實就是一個計算過程中需要開辟的緩存,用于計算,其長度為numTaps+blockSize-1;blockSize為計算塊的長度,大于1,小于等于原始數據的總長度即可。
配置好arm_fir_init_f32后,即可使用arm_fir_f32進行FIR計算,arm_fir_f32的函數原型為
void arm_fir_f32( const arm_fir_instance_f32 * S, float32_t * pSrc, float32_t * pDst, uint32_t blockSize)由于設置了blockSize,即每次調用arm_fir_f32計算的數據長度,如blockSize設置為128時,要對總長度為1280的原始數據進行計算,就要循環調用10次arm_fir_f32,其中pSrc和pDst指針也要隨著循環進行后移。
具體FIR程序如下所示:
其中,timePass保存了計算所需要的時間;output為FIR濾波后的數據輸出數組;設置blockSize為128,則numOfblock塊個數就是raw數組的長度1280除以128;pState為臨時使用內存池申請的緩存,如果你的程序中沒有內存池,可以直接開辟一個長度為1280的float數組,或者直接使用malloc動態申請。
運行后,timePass等于2,說明對1280個點進行100階的FIR濾波只需要2ms,速度已經非常快了。
4.濾波結果-與Matlab比對
將output數組數據導出,導入到matlab中,與matlab的FIR濾波結果進行比對,發現一模一樣完全重合,證明了stm32調用arm-dsp庫FIR濾波的準確性、可靠性和高效性。
plot(1:1280,ans(1:1280),1:1280,stm32out)三、總結
實際工程應用中,往往是單片機對信號進行采樣,將波形保存在一個數組中,然后再使用FIR進行濾波處理。一般的工程開發過程為:
1.分析原始信號,確定濾波目標;
2.導出單片機采樣數據,在matlab中設計合適的FIR濾波器;
3.導出Matlab濾波器系數到單片機程序;
4.利用arm-dsp庫進行FIR濾波計算。
總結
以上是生活随笔為你收集整理的【嵌入式】STM32利用arm-dsp库进行FIR滤波的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Python + Adb 实现对QQ
- 下一篇: bootice添加黑苹果引导_黑苹果去除