主頁 >  其他 > 【嵌入式】STM32利用arm-dsp庫進行FIR濾波

【嵌入式】STM32利用arm-dsp庫進行FIR濾波

2021-04-30 18:55:47 其他

目錄

    • 一、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,
在命令列中對混雜信號進行濾波:

fileter(Hd,rawSignal)

其中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即可,

/*
 * Filter Coefficients (C Source) generated by the Filter Design and Analysis Tool
 * Generated by MATLAB(R) 8.3 and the Signal Processing Toolbox 6.21.
 * Generated on: 28-Apr-2021 15:33:18
 */

/*
 * Discrete-Time FIR Filter (real)
 * -------------------------------
 * Filter Structure  : Direct-Form FIR
 * Filter Length     : 101
 * Stable            : Yes
 * Linear Phase      : Yes (Type 1)
 */

/* General type conversion for MATLAB generated C-code  */
#include "tmwtypes.h"
/* 
 * Expected path to tmwtypes.h 
 * F:\MatLab\extern\include\tmwtypes.h 
 */
const int BL = 101;
const real64_T B[101] = {
  -0.002364379994766,-0.002555816813742, -0.00271143828077,-0.002821346700614,
  -0.002865814202786,-0.002816683118228,-0.002640000779638,-0.002299699197689,
  -0.001762028066288,-0.001000368319048,4.399291056296e-18, 0.001237622441001,
   0.002691519514449, 0.004319142530531, 0.006055934652271, 0.007816685262717,
   0.009498734985135,  0.01098694698435,  0.01216021777687,  0.01289916830821,
    0.01309454373426,  0.01265576722454,  0.01151904640175, 0.009654425543614,
   0.007071214384679, 0.003821304224151,-5.964020643576e-18,-0.004255853855223,
  -0.008772504883931, -0.01334655058446, -0.01775451146912, -0.02176424083345,
   -0.02514755140538, -0.02769333338392, -0.02922037668388,  -0.0295890978537,
   -0.02871141129903, -0.02655807388539, -0.02316296707884, -0.01862395375005,
   -0.01310014718858, -0.00680564532364,-1.977442795623e-17, 0.007024104515362,
    0.01395531112556,  0.02047939405639,  0.02629552027152,  0.03113204072429,
    0.03476090062898,  0.03700983073789,  0.03777160643401,  0.03700983073789,
    0.03476090062898,  0.03113204072429,  0.02629552027152,  0.02047939405639,
    0.01395531112556, 0.007024104515362,-1.977442795623e-17, -0.00680564532364,
   -0.01310014718858, -0.01862395375005, -0.02316296707884, -0.02655807388539,
   -0.02871141129903,  -0.0295890978537, -0.02922037668388, -0.02769333338392,
   -0.02514755140538, -0.02176424083345, -0.01775451146912, -0.01334655058446,
  -0.008772504883931,-0.004255853855223,-5.964020643576e-18, 0.003821304224151,
   0.007071214384679, 0.009654425543614,  0.01151904640175,  0.01265576722454,
    0.01309454373426,  0.01289916830821,  0.01216021777687,  0.01098694698435,
   0.009498734985135, 0.007816685262717, 0.006055934652271, 0.004319142530531,
   0.002691519514449, 0.001237622441001,4.399291056296e-18,-0.001000368319048,
  -0.001762028066288,-0.002299699197689,-0.002640000779638,-0.002816683118228,
  -0.002865814202786,-0.002821346700614, -0.00271143828077,-0.002555816813742,
  -0.002364379994766
};

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初始化函式,其函式原型為

void arm_fir_init_f32(
  arm_fir_instance_f32 * S,
  uint16_t numTaps,
  float32_t * pCoeffs,
  float32_t * pState,
  uint32_t blockSize)

其中: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程式如下所示:

float32_t output[1280] = {0};
void FIR()
{
	uint32_t timeTick = HAL_GetTick();		//函式進入時間戳
	uint32_t timePass = 0;					//計算用時
	uint32_t blockSize = 128;				//塊長度,原始資料長度為1280
	uint32_t numOfBlock = 1280 / blockSize;	//
	uint32_t i;
	arm_fir_instance_f32 S;

	float32_t *pState;
	
	pState = (float32_t *)Mem.malloc((blockSize + BL - 1) * sizeof(float32_t));

	if(pState != NULL)
	{
		arm_fir_init_f32(&S,BL,(float32_t *)B,pState,blockSize);
		for(int i=0; i < numOfBlock; i++)
		{
			arm_fir_f32(&S, raw + (i * blockSize), output + (i * blockSize), blockSize);
		}
	}

    timePass = HAL_GetTick() - timeTick;

	Mem.free(pState);
    
}

其中,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濾波計算,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/281714.html

標籤:其他

上一篇:藍橋杯STM32F103RB通用定時器(一)定時功能

下一篇:用于計算無線充電中LCC補償網路器件引數的小程式

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more