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

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

[复制链接]
STMCU小助手 发布时间:2021-12-6 10:03
工具和简介
; z* A- V$ s$ ^6 V  f. e目的:利用MATLAB仿真软件系统结合窗函数法设计一个数字带通FIR滤波器。通过STM32F3的DSP模块实现移植应用,测试分析其运行效率等,并将其运行结果同MATLAB运行结果比较,分析其可靠性。& I) d' c3 J/ v
测试数据:声波笔捕捉帧数据(f:80KHz;fs:2.5MHz)并混合入高频和低频噪声。7 O- s0 \$ K2 m# _6 Q
测试MATLAB版本:R2008a;) M, [; n; r" S% u
测试单片机:STM32F303VCT6  S) w8 B) [& X/ u$ k8 H  B3 X
    Keil版本:Keil uVision V5.10.0.2
4 z" {& J+ M# ~- R0 i/ B) a    STM32CubeMx版本:uVision V4.16.0
4 x$ ?$ x/ v9 X7 F" Z8 t% ySTM32库版本:STM32Cube_FW_F3_V1.6.0
$ Q+ j/ Y6 h: H4 Q$ \% M  |1 XMCU工作频率:72MHz
- X, `) I3 j$ a8 p1 l6 V* x) g$ g) A8 r
, ]+ t2 R6 C$ k
内核设计! k4 `: S) ^" [& k8 J# Z
    如下图,运行MATLAB,在命令窗口输入fdatool,并回车启动fdatool。
8 Q( X* b4 k6 w& t) q( \8 d, [* x) u) p# W3 x
2018122013532747.png
6 ~; [, v0 q+ e) ]; g2 S

" l% ~0 x7 ^. f* f7 M$ WMATLAB界面& {+ R! ~  S" r
Fdatool界面如下图所示,FDA Tool界面总共分两大部分,一部分是design filter,在界面的下半部,用来设置滤波器的设计参数,另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。design filter部分主要分为:
0 T, H$ D# z( R3 O, j# @. g' k# `filter type(滤波器类型)选项,包括lowpass(低通)、highpass(高通)、bandpass(带通)、bandstop(带阻)和特殊的fir滤波器。
5 Q  X/ O' }5 A* v, _& r  M# s- Z" |; p, S/ N" ?! m( Z1 l, ^$ [
design method(设计方法)选项,包括iir滤波器的butterworth(巴特沃思)法、chebyshev type i(切比雪夫i型)法、 chebyshev type ii(切比雪夫ii型) 法、elliptic(椭圆滤波器)法和fir滤波器的equiripple法、least-squares(最小乘方)法、window(窗函数)法。- d3 ~+ A7 ]% w$ z  V1 ~
3 G" k& `# m, U/ n7 {# R' K7 ^
filter order(滤波器阶数)选项,定义滤波器的阶数,包括specify order(指定阶数)和minimum order(最小阶数)。在specify order中填入所要设计的滤波器的阶数(n阶滤波器,specify order=n-1),如果选择minimum order则matlab根据所选择的滤波器类型自动使用最小阶数。
$ Q/ A$ N% o% R) L( Q' H
, u! o, t  I; O6 p9 z* X! ^+ }frenquency specifications选项,可以详细定义频带的各参数,包括采样频率fs和频带的截止频率。它的具体选项由filter type选项和design method选项决定,例如bandpass(带通)滤波器需要定义fstop1(下阻带截止频率)、fpass1(通带下限截止频率)、fpass2 (通带上限截止频率)、fstop2(上阻带截止频率),而lowpass(低通)滤波器只需要定义fstop1、fpass1。采用窗函数设计滤波器 时,由于过渡带是由窗函数的类型和阶数所决定的,所以只需要定义通带截止频率,而不必定义阻带参数。
) e9 n: g* g5 w9 gmagnitude specifications选项,可以定义幅值衰减的情况。例如设计带通滤波器时,可以定义wstop1(频率fstop1处的幅值衰减)、wpass (通带范围内的幅值衰减)、wstop2(频率fstop2处的幅值衰减)。当采用窗函数设计时,通带截止频率处的幅值衰减固定为6db,所以不必定义。/ Z# d' l* B  F8 k# x, [
2 z/ x1 a, k. u/ J- q
20181220135637810.png
% S! y6 q- V& S  y% Z  I
$ ]; b$ }1 A% Q
Fdatool界面
- W4 v! j& I( C) q8 Q

8 B/ N, f9 l1 W* e 本设计中,首先在filter type中选择bandpass(带通滤波器);% m9 u# l3 `+ P
(1)在design method选项中选择fir window(fir滤波器窗函数法),接着在window specifications选项中选取hamming;  [4 P( d% P# U
(2)指定filter order项中的specify order=100;
- n5 q9 x6 F* o& A6 b(3)由于采用窗函数法设计,只要给出通带下限截止频率fc1和通带上限截止频率fc2,选取fc1=79.999KHz,fc2=80.001 KHz。
. F2 [1 Q+ `' ]& A(4)设置完以后点击design filter即可得到所设计的fir滤波器。) s" ?! Q2 [! S
(5)通过菜单选项analysis可以在特性区看到所设计滤波器的幅频响应、相频响应、零极点配置和滤波器系数等各种特性。设计完成后保存为“nh.fda”文件,并通过依次点击“File——Generate M-File”生成为M文件保存为“nh.m”,以便调用。' K3 p3 |2 L; J4 r5 a; L
在设计过程中,可以对比滤波器幅频相频特性和设计要求,随时调整参数和滤波器类型,以便得到最佳效果,并通过第5部保存和生成M文件。其它类型的fir滤波器和iir滤波器也都可以使用fdatool来设计。
9 S) G* z0 z3 }" j! {) h
2 }/ ?/ v( h2 y0 k! Z& b2 O* H8 \+ \
20181220135728282.png

1 }$ {$ q0 h8 J! c1 E
通过Fdatool设计内核
' F; K/ e& t* s! i1 U( C

. d# M5 C% b  L 其幅频曲线如下。2 ?( Z' `" Q2 ?6 g- U  Y9 [8 S
0 R" c7 j  z. Y4 q8 |* K
20181220135806479.png

. l7 h  r2 v* _  m
幅频曲线

6 r% b4 r# d* w+ W3 `8 {2 L) n# S# |# C5 X
其相频特性如下1 `3 {/ e; {6 d* c" k4 _1 I9 a
+ M! _8 w$ p( A  D
20181220135906353.png
4 d# N; k# H$ M% W, Y! J1 N, w
相频特性

+ Z7 R1 Y0 F! d; a' n0 B
& d" |& E9 \* x8 R( \ Matlab内核调用和测试
; `: r+ W2 Y* ]! R, \/ P* ?7 \  P7 G* {6 T; e
内核调用:在MATLAB中,按“Ctrl+N”新建M文件,编辑代码,本测试代码如下,具体见附件” fir3.m “。
7 ]. U" _& b. K- u: W2 ?* H6 f  Q3 s7 m1 j: o
20181220140108602.png

, R/ v- P8 w+ w2 D
测试代码
; E8 g2 `9 s% `# b: l

( s1 U3 v3 {; v$ {3 n$ d$ G% K7 D 第一行中,”clc“清空命令窗口,”close all“ 清空多余窗口,clear清空工作空间,, C  G! v. _+ R. P1 j
在导入输入信号中所导入的信号为声波笔捕捉帧数据(f:80KHz;fs:25MHz),从中选取一个通道数据。, [! V6 P# T5 \  q' f- S
所加高频噪声信号为200Khz,低频5Khz。, {0 i/ x3 v6 i: J1 ]
测试结果如下图所示8 c* b! ~* y- `8 P) D4 J: f

) W' B, S) l# i& {
20181220140310917.png

. W' w; C" T/ E8 y2 p0 o
测试结果
  p. U' {: E8 l* e9 |
% {# c* J( T6 |6 D& Y  c
  STM32移植内核1 A$ R5 y9 O- M

& Y6 c# u# w+ S1 t- U0 G7 a; e7 y& k运用STM32CubeMX生成Keil工程,具体配置见“附件\firTest1.4\demo.ioc”,并用Keil打开所生成的工程“附件\firTest1.4\MDK-ARM\demo.uvprojx”,# |9 t# s5 |* a) J: o; r. {; Z. ~. t

6 D% z$ c, F% b
20181220140419122.png
" S3 D% K. `3 S0 t! N* d
Keil工程

" d0 L  x& M2 ]' G9 I8 w
5 G* T7 a2 d. l5 E$ a9 D 如上图所示,在“附件\firTest1.4\App\app.c”中,firCoeffs32常量为FIR滤波器内核,其来自MATLAB设计,运行测试文件” fir3.m “后,在工作空间中双击nucleus变量可在变量编辑器查看,在“附件\firTest1.4\App\arm_fir_data.c”中,a1常量为测试数据,其来自MATLAB设计中添加噪声后信号,运行测试文件” fir3.m “后,在工作空间中双击put变量可在变量编辑器查看。如下图所示。" I5 k: e4 _8 b* P/ g3 j5 l
% Z6 {# b* {2 y/ O9 d  Y/ P
20181220140519952.png
( n; A- a# E) |5 B3 Y% ~" l
内核和测试数据
; q  X" c# }: S0 I2 f  H
" i, s7 }8 ], S
整个程序运行流程如下图所示
+ Q: `) q5 a& ?& Q4 N# Y1 Q/ E6 y! x& z+ f0 s& x1 Z
20181220141648678.png
$ {' u0 T0 y# o8 y; N& a+ |
: l9 O0 x4 D/ g# v7 N( b5 l8 i
STM32程序运行流程

0 j9 e9 f+ q1 [5 x
+ |: E5 \; U$ N" V 运行结果通过串口输出,如下图所示,运行结果6418us。# |* ], }) k; h% ?

. N' M1 [2 r* \, a* F6 W# p! }& ~
20181220141755837.png

9 g$ t0 R3 L2 f; D' x/ r7 O
串口输出结果
0 j# Z% w- M( M

8 q( M' o+ _3 p( o3 [& W" X
可通过发送“@IN#”、 “@OUT#”、 “@HE#”,分别获取输入测试波形、输出滤波结果、内核数据,再将其导入MATLAB生成波形同MATLAB结果比较。其结果如下图所示

" B) X! W5 A* U, ], ?% _2 I
! K  k5 E8 u. h0 ]8 s
20181220141848539.png

: k5 g" J) I6 A4 t3 q- }
Stm32执行结果MATLAB分析
: c# h4 n% X8 W' e

; P" A, V# v  N# Z/ p) N3 ?' a
+ _% ?* D" w. J5 t: ^2 s( j3 P
! W5 U" h2 s) C8 p
赞 收藏 评论0 发布时间:2021-12-6 10:03

举报

0个回答

所属标签

相似技术帖

官网相关资源

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