你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】基于STM32f3的FIR应用测试分析

[复制链接]
STMCU小助手 发布时间:2021-12-6 10:03
工具和简介' v6 t: ]: N$ W0 e
目的:利用MATLAB仿真软件系统结合窗函数法设计一个数字带通FIR滤波器。通过STM32F3的DSP模块实现移植应用,测试分析其运行效率等,并将其运行结果同MATLAB运行结果比较,分析其可靠性。4 T) @; c+ R3 |9 v
测试数据:声波笔捕捉帧数据(f:80KHz;fs:2.5MHz)并混合入高频和低频噪声。. C; ?, S" M% t
测试MATLAB版本:R2008a;: M! k$ c3 J  Q# `$ K( l; C( P: d
测试单片机:STM32F303VCT6
1 i: G7 K* E3 _: M; P    Keil版本:Keil uVision V5.10.0.24 k2 O0 K1 }4 k. G! D/ b0 D6 Y
    STM32CubeMx版本:uVision V4.16.0
: q+ c/ L: L4 z) K: qSTM32库版本:STM32Cube_FW_F3_V1.6.0
# u& F7 M$ Z$ WMCU工作频率:72MHz
  w, z& C; [' e& h% A) G& A7 N7 T& V4 b6 j4 j: _" s* C* l! c8 t
: d- U; n' A* t1 e- `1 ~7 k, ^
内核设计/ @, U8 y1 b: N$ }& Q$ M
    如下图,运行MATLAB,在命令窗口输入fdatool,并回车启动fdatool。
- n. B6 O4 [; p# M& u0 U- ^
. Z  _5 B1 |" }8 r
2018122013532747.png

; J) S. n; I+ G  m) M$ @0 n, ^" T- E) R3 h/ T
MATLAB界面2 O0 {& L8 u- N  K- d8 x
Fdatool界面如下图所示,FDA Tool界面总共分两大部分,一部分是design filter,在界面的下半部,用来设置滤波器的设计参数,另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。design filter部分主要分为:
4 d+ p: a2 m& g5 x, G# K& wfilter type(滤波器类型)选项,包括lowpass(低通)、highpass(高通)、bandpass(带通)、bandstop(带阻)和特殊的fir滤波器。
4 G! }7 M$ L& B- M5 @5 [' m# Z/ }
design method(设计方法)选项,包括iir滤波器的butterworth(巴特沃思)法、chebyshev type i(切比雪夫i型)法、 chebyshev type ii(切比雪夫ii型) 法、elliptic(椭圆滤波器)法和fir滤波器的equiripple法、least-squares(最小乘方)法、window(窗函数)法。
! O+ x  u4 B1 z3 ?7 u9 R: m6 y7 d- l  x
: ?$ B5 h' j& I5 X  ^0 ]/ n9 F! D$ [# mfilter order(滤波器阶数)选项,定义滤波器的阶数,包括specify order(指定阶数)和minimum order(最小阶数)。在specify order中填入所要设计的滤波器的阶数(n阶滤波器,specify order=n-1),如果选择minimum order则matlab根据所选择的滤波器类型自动使用最小阶数。- f2 o1 |2 A, C. e' d* `

6 V5 \. B  h- R. ]+ P- \+ hfrenquency specifications选项,可以详细定义频带的各参数,包括采样频率fs和频带的截止频率。它的具体选项由filter type选项和design method选项决定,例如bandpass(带通)滤波器需要定义fstop1(下阻带截止频率)、fpass1(通带下限截止频率)、fpass2 (通带上限截止频率)、fstop2(上阻带截止频率),而lowpass(低通)滤波器只需要定义fstop1、fpass1。采用窗函数设计滤波器 时,由于过渡带是由窗函数的类型和阶数所决定的,所以只需要定义通带截止频率,而不必定义阻带参数。
# n0 C$ c7 _; imagnitude specifications选项,可以定义幅值衰减的情况。例如设计带通滤波器时,可以定义wstop1(频率fstop1处的幅值衰减)、wpass (通带范围内的幅值衰减)、wstop2(频率fstop2处的幅值衰减)。当采用窗函数设计时,通带截止频率处的幅值衰减固定为6db,所以不必定义。  V/ N+ A5 |* i) M9 I9 i
7 L' r  o3 [% s3 V* y# ?2 w
20181220135637810.png

6 A2 e9 T. g$ O+ }4 S' T: V
3 m! R5 @/ {+ T- w
Fdatool界面
  o" A+ D* d9 K/ Y. G( n/ w9 ?
# e" e- H; N* W1 s- g5 S, A( C( z
本设计中,首先在filter type中选择bandpass(带通滤波器);
. X# v1 f$ Q6 R' w* C9 A* V8 d(1)在design method选项中选择fir window(fir滤波器窗函数法),接着在window specifications选项中选取hamming;$ y& h( S7 ~/ E5 v! }, d( D, m
(2)指定filter order项中的specify order=100;8 H  C+ P( K* Y9 U
(3)由于采用窗函数法设计,只要给出通带下限截止频率fc1和通带上限截止频率fc2,选取fc1=79.999KHz,fc2=80.001 KHz。
9 e# e! x2 h3 W* W" K0 X(4)设置完以后点击design filter即可得到所设计的fir滤波器。7 T6 k. d( B+ b
(5)通过菜单选项analysis可以在特性区看到所设计滤波器的幅频响应、相频响应、零极点配置和滤波器系数等各种特性。设计完成后保存为“nh.fda”文件,并通过依次点击“File——Generate M-File”生成为M文件保存为“nh.m”,以便调用。, d* g; f: ^, w0 i$ k0 M
在设计过程中,可以对比滤波器幅频相频特性和设计要求,随时调整参数和滤波器类型,以便得到最佳效果,并通过第5部保存和生成M文件。其它类型的fir滤波器和iir滤波器也都可以使用fdatool来设计。) h' c7 A: d, C4 t6 Q

- `2 ]# F; W& \# f/ E
20181220135728282.png
& N6 y' t% F& a* {8 v, R# ^
通过Fdatool设计内核
( g7 T; j: }6 T  W6 c$ d. }; F7 e( ]
4 z: O8 M; a2 W6 u
其幅频曲线如下。+ v7 u5 n  l* ]8 r' v

4 r( G) D* B) m# `' t
20181220135806479.png
+ K8 h3 P4 r3 H
幅频曲线

% z5 W' d3 S: n# K: D7 z( ]9 T, w
- p( I7 L$ F' v: l; W3 e0 B& q其相频特性如下& {, f: D7 l9 l( ^8 M$ w) d/ h
  u4 w: Q# e$ L4 o
20181220135906353.png

4 ^3 n' s& z; B/ ~  B3 C) t) W  @# R
相频特性
" d. i* Y; |: |2 C0 `0 X
) G0 f) l8 p  }- W  b  g
Matlab内核调用和测试  g5 O' P# o8 r& S
5 ]) M6 ~' l% [& R8 G, ~/ g/ f
内核调用:在MATLAB中,按“Ctrl+N”新建M文件,编辑代码,本测试代码如下,具体见附件” fir3.m “。
  E# L, ?' x6 j/ u8 Q) i4 C
9 h; S$ `+ _1 E1 [7 }- o
20181220140108602.png

! }8 ^" g' s; m: ]! c
测试代码
4 `4 y, y9 h* z9 S
0 S. Q& y5 u: J
第一行中,”clc“清空命令窗口,”close all“ 清空多余窗口,clear清空工作空间,. C6 K8 m) _& e8 {  w/ [2 }% c
在导入输入信号中所导入的信号为声波笔捕捉帧数据(f:80KHz;fs:25MHz),从中选取一个通道数据。  a7 u2 p1 d7 m3 Y* W5 Y
所加高频噪声信号为200Khz,低频5Khz。6 O2 Q- a6 {" g. u
测试结果如下图所示
9 f4 ^5 y4 d; k8 `2 B3 W
; z% k( n% u& W6 H4 Q
20181220140310917.png

/ o; ?( \- ^0 H/ y6 d% J* K
测试结果
/ i: G$ S; R0 H0 q) c: T

, h0 k# v: g+ Y  STM32移植内核7 X3 u6 f* V5 Y$ U/ j
6 X0 U- J. z( l( o6 d' L' \
运用STM32CubeMX生成Keil工程,具体配置见“附件\firTest1.4\demo.ioc”,并用Keil打开所生成的工程“附件\firTest1.4\MDK-ARM\demo.uvprojx”," s9 v" n% C/ y

( F1 O/ Q# K2 {; {4 E& O+ l. o
20181220140419122.png

' Q! L, {4 M' d0 x( Y
Keil工程
& s% l) R; m+ L0 q* x

# m& a: i1 a' P 如上图所示,在“附件\firTest1.4\App\app.c”中,firCoeffs32常量为FIR滤波器内核,其来自MATLAB设计,运行测试文件” fir3.m “后,在工作空间中双击nucleus变量可在变量编辑器查看,在“附件\firTest1.4\App\arm_fir_data.c”中,a1常量为测试数据,其来自MATLAB设计中添加噪声后信号,运行测试文件” fir3.m “后,在工作空间中双击put变量可在变量编辑器查看。如下图所示。3 @0 O% K  ?" r/ `" j# t" m4 [

$ i; u9 ~+ Q+ J9 H- U
20181220140519952.png
3 K& W1 D' H5 y# l# S
内核和测试数据
( y3 t0 F! Z. u! y+ e/ C( s0 @

' y' A3 C) m3 Y2 F2 c% V$ z0 E 整个程序运行流程如下图所示
; q) d0 ~9 H" }
; [' G. H, c7 q; }
20181220141648678.png
9 A0 n4 Q( [* S8 P4 V
7 N6 j$ z. g6 _; h# v, _  u- l
STM32程序运行流程
6 o7 c1 Q+ D4 O, z6 [; L
3 S& U0 {+ H: \& X
运行结果通过串口输出,如下图所示,运行结果6418us。2 ?% O) O) H: k: }
! Q" n% e% P5 y0 ^( H6 J* g% w; T
20181220141755837.png
' N" X5 u: G" d0 O& S
串口输出结果

/ Y7 w: k1 w) |: z1 ~9 ?1 z- G3 _. i' k* T
可通过发送“@IN#”、 “@OUT#”、 “@HE#”,分别获取输入测试波形、输出滤波结果、内核数据,再将其导入MATLAB生成波形同MATLAB结果比较。其结果如下图所示
" q+ I; n# M( [  X& O
( D% S, N2 t% M( U2 q; m
20181220141848539.png
9 O& U' d8 h( [2 H
Stm32执行结果MATLAB分析

( x9 n* d& J2 s% }) V! i
3 \+ }3 L* V0 B; p* H3 u7 z8 C! l3 x+ b1 f. W5 r
" ^% J8 Z0 G" k" r
赞 收藏 评论0 发布时间:2021-12-6 10:03

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版