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

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

[复制链接]
STMCU小助手 发布时间:2021-12-6 10:03
工具和简介
* {; A3 V1 q1 f目的:利用MATLAB仿真软件系统结合窗函数法设计一个数字带通FIR滤波器。通过STM32F3的DSP模块实现移植应用,测试分析其运行效率等,并将其运行结果同MATLAB运行结果比较,分析其可靠性。- h& A& ]" _% {$ _
测试数据:声波笔捕捉帧数据(f:80KHz;fs:2.5MHz)并混合入高频和低频噪声。
# L! a" G- }( N4 l+ K7 _测试MATLAB版本:R2008a;
' t9 Y5 ]  l6 g$ }% U/ U5 J测试单片机:STM32F303VCT6, W7 e. Y% T' }3 O
    Keil版本:Keil uVision V5.10.0.25 @  V. g- \- \* c3 S2 h
    STM32CubeMx版本:uVision V4.16.0: c  H5 @, r4 ]* E% s: I" I
STM32库版本:STM32Cube_FW_F3_V1.6.0
% k4 |5 x$ {# B9 ?MCU工作频率:72MHz
/ R3 c' C3 g! t% g
' \; _  q; r8 W4 L0 r7 v2 z
( F9 ^2 T! g: ~* {2 B/ D" Q内核设计
) S" r* r8 r; I  y    如下图,运行MATLAB,在命令窗口输入fdatool,并回车启动fdatool。
6 _# Z( @- E) i0 m" R7 ?4 q2 P. o) n* g' k) I
2018122013532747.png
- w4 v; x& r' x7 U. ]
0 T5 ~& Z5 {! n2 L( `0 a% ?, {
MATLAB界面5 s: P! F5 R: S
Fdatool界面如下图所示,FDA Tool界面总共分两大部分,一部分是design filter,在界面的下半部,用来设置滤波器的设计参数,另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。design filter部分主要分为:
) X" E" Z+ I2 {$ ^: l: cfilter type(滤波器类型)选项,包括lowpass(低通)、highpass(高通)、bandpass(带通)、bandstop(带阻)和特殊的fir滤波器。$ h+ B' q. |5 `1 }

3 v! X; V; H2 h! K: I4 s6 V# ydesign method(设计方法)选项,包括iir滤波器的butterworth(巴特沃思)法、chebyshev type i(切比雪夫i型)法、 chebyshev type ii(切比雪夫ii型) 法、elliptic(椭圆滤波器)法和fir滤波器的equiripple法、least-squares(最小乘方)法、window(窗函数)法。
! G, d9 _% A) C* W7 z: H" W1 y" w1 w! p: d5 f; ^
filter order(滤波器阶数)选项,定义滤波器的阶数,包括specify order(指定阶数)和minimum order(最小阶数)。在specify order中填入所要设计的滤波器的阶数(n阶滤波器,specify order=n-1),如果选择minimum order则matlab根据所选择的滤波器类型自动使用最小阶数。
0 m4 ~4 U  Q3 o0 w. {' y& P
) D' r/ s. M- n7 o# Q8 S; l' zfrenquency specifications选项,可以详细定义频带的各参数,包括采样频率fs和频带的截止频率。它的具体选项由filter type选项和design method选项决定,例如bandpass(带通)滤波器需要定义fstop1(下阻带截止频率)、fpass1(通带下限截止频率)、fpass2 (通带上限截止频率)、fstop2(上阻带截止频率),而lowpass(低通)滤波器只需要定义fstop1、fpass1。采用窗函数设计滤波器 时,由于过渡带是由窗函数的类型和阶数所决定的,所以只需要定义通带截止频率,而不必定义阻带参数。: e1 F* _/ @% h, X
magnitude specifications选项,可以定义幅值衰减的情况。例如设计带通滤波器时,可以定义wstop1(频率fstop1处的幅值衰减)、wpass (通带范围内的幅值衰减)、wstop2(频率fstop2处的幅值衰减)。当采用窗函数设计时,通带截止频率处的幅值衰减固定为6db,所以不必定义。
5 X/ l7 B. A* |# s3 X- O/ r, R& o2 C) p
20181220135637810.png

7 T& Q6 T- n( C1 ~) M9 ~$ F9 E+ y/ c' o
Fdatool界面

7 M2 a. z0 S. b; h' a% S. g2 D0 U# w0 r. v" J
本设计中,首先在filter type中选择bandpass(带通滤波器);
4 E0 ?# y# L* b# m9 w0 E/ v(1)在design method选项中选择fir window(fir滤波器窗函数法),接着在window specifications选项中选取hamming;* U& m: [6 L, X9 n
(2)指定filter order项中的specify order=100;
2 I1 p* R9 J7 a. \. }(3)由于采用窗函数法设计,只要给出通带下限截止频率fc1和通带上限截止频率fc2,选取fc1=79.999KHz,fc2=80.001 KHz。& A7 x  I" P( V1 u5 a4 W- a5 Z
(4)设置完以后点击design filter即可得到所设计的fir滤波器。, q) n. U/ C4 P/ i: L/ a. C
(5)通过菜单选项analysis可以在特性区看到所设计滤波器的幅频响应、相频响应、零极点配置和滤波器系数等各种特性。设计完成后保存为“nh.fda”文件,并通过依次点击“File——Generate M-File”生成为M文件保存为“nh.m”,以便调用。9 G& f2 V0 g1 V1 q; k
在设计过程中,可以对比滤波器幅频相频特性和设计要求,随时调整参数和滤波器类型,以便得到最佳效果,并通过第5部保存和生成M文件。其它类型的fir滤波器和iir滤波器也都可以使用fdatool来设计。
  b% k6 |5 A0 I2 D& r) z6 Q; h) y' @( t
20181220135728282.png

2 ?- r6 L  E: n9 F, C
通过Fdatool设计内核
9 K7 K8 h! K7 x( [
8 A) `( F) d  d; ?5 @/ ?7 l
其幅频曲线如下。
  v* O) p% d7 m( I0 _1 u: B5 g1 s! J  q: O: k' C
20181220135806479.png

! s7 Z' s1 s, b2 d6 b
幅频曲线
* M& I: T( \: V) ?

) E# K1 p% H" ~  G& a其相频特性如下
6 [" C( z1 h( T. x/ z1 M! `2 H# `6 h. u% @* C. _
20181220135906353.png
& l; X# j+ W2 `% w
相频特性
0 x# ~1 S3 E; K6 u1 U* y" \% t& M- b

) p3 F8 z* p* } Matlab内核调用和测试; D5 M7 y7 o6 X2 v7 L# [: j

4 f) ?6 z! M6 H9 y# \# U1 u内核调用:在MATLAB中,按“Ctrl+N”新建M文件,编辑代码,本测试代码如下,具体见附件” fir3.m “。
, r1 ]2 k  g/ V5 q/ J* ?
# P- n" h: ?0 a4 M( F
20181220140108602.png

: N1 e- z- y. u( N; c# W& C1 N& I
测试代码

2 F2 \. i+ ]+ j) r
1 I' Z7 Y$ v3 ^+ J6 V/ H$ |6 }& V 第一行中,”clc“清空命令窗口,”close all“ 清空多余窗口,clear清空工作空间,: G, u: r1 [- n; x8 b
在导入输入信号中所导入的信号为声波笔捕捉帧数据(f:80KHz;fs:25MHz),从中选取一个通道数据。
1 K, `' S5 A; g/ V% r所加高频噪声信号为200Khz,低频5Khz。
1 Z. i6 ~$ x9 @% p8 R/ s2 k测试结果如下图所示
$ Q. Y! }9 E* M( e( f: G* c% ^$ [9 w: H, i) G8 r7 y6 p' N5 k/ J
20181220140310917.png
# O7 m& G; J4 k2 H8 S2 x1 V# r+ [( o
测试结果

4 j8 ]$ f6 Y9 o+ p+ r" S# d. z: M' a* c- _2 J1 e" L7 d& w6 j
  STM32移植内核, d9 k  V' M: L. ?0 o( e

: V# H$ _8 j6 K3 o; ^9 ^运用STM32CubeMX生成Keil工程,具体配置见“附件\firTest1.4\demo.ioc”,并用Keil打开所生成的工程“附件\firTest1.4\MDK-ARM\demo.uvprojx”,
+ [3 _, x/ L, \* A+ O4 p
0 Y5 Z: r4 e; e8 M, K3 u! R
20181220140419122.png
+ H2 s+ Z+ f8 m" s, n
Keil工程

% I& `/ f: c6 w) ^6 Y7 e, P+ B
% ~, _& a: X/ G- A6 s* J2 b1 a8 a 如上图所示,在“附件\firTest1.4\App\app.c”中,firCoeffs32常量为FIR滤波器内核,其来自MATLAB设计,运行测试文件” fir3.m “后,在工作空间中双击nucleus变量可在变量编辑器查看,在“附件\firTest1.4\App\arm_fir_data.c”中,a1常量为测试数据,其来自MATLAB设计中添加噪声后信号,运行测试文件” fir3.m “后,在工作空间中双击put变量可在变量编辑器查看。如下图所示。
' v6 C; a. H& Q5 N# @4 l8 U, z, t1 z! {" \, u" F
20181220140519952.png

" a5 l, R) \( q' v# j; o/ |/ s6 e6 ^
内核和测试数据
# @3 d" Q: o% h+ @2 p! G

/ q5 K7 I8 T) X$ ?$ E 整个程序运行流程如下图所示
4 x% h' ?! |8 q2 ?* z0 B4 H" ~3 t0 N  u* A; u/ q: B
20181220141648678.png
0 ~0 Z5 N+ J0 v1 J5 y! X& n5 d
) ?8 E* c& K% N0 u' p
STM32程序运行流程
/ j# J8 h) j& C( o/ c

5 f; B" l# \7 H+ u4 E9 z# p3 p 运行结果通过串口输出,如下图所示,运行结果6418us。& Q& \; Q1 N8 b% f" J' `9 X
2 l6 ]( k+ \2 s& {
20181220141755837.png
# T4 g. i3 t* Q: l* K; ?
串口输出结果

. W& [) V+ b2 {% M% {& A9 \  y0 ?! c1 G+ M+ A" J
可通过发送“@IN#”、 “@OUT#”、 “@HE#”,分别获取输入测试波形、输出滤波结果、内核数据,再将其导入MATLAB生成波形同MATLAB结果比较。其结果如下图所示

4 P! h8 z. o, H; [/ a3 P
+ }3 V5 \# I1 n- d+ r% R
20181220141848539.png
. ?3 a$ Z# K' ~% [2 A
Stm32执行结果MATLAB分析
* }: A, y2 ^- K. u0 ~+ W
6 {) I$ ]$ r% v% y, ]6 e: `
+ k1 H# c; _+ e0 z$ Y# f

/ ]" s! Z7 K( F0 j
赞 收藏 评论0 发布时间:2021-12-6 10:03

举报

0个回答

所属标签

相似技术帖

官网相关资源

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