|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 nuiga 于 2021-11-5 15:44 编辑 / f) }! z& i& x! Y
% _ ^: W2 }* z+ g# B7 E
数字滤波器由数字乘法器、加法器和延时单元组成的一种算法或装置。数字滤波器的功能是对输入离散信号的数字代码进行运算处理,以达到改变信号频谱的目的。
) A, |" _/ F) i n; k9 g! @8 T4 j# U
巴特沃斯滤波器是电子滤波器的一种。巴特沃斯滤波器的特点是通频带的频率响应曲线最平滑。
7 I- s7 y, Z/ O* f0 T8 e切比雪夫滤波器是在通带或阻带上频率响应幅度等波纹波动的滤波器。
' q. Z7 |- K. N1 \3 E, K: g( h) O% A* l, v) r
设计过程
# |" g. r k# A1 U- T8 ev1. 在Matlab语言中确定滤波器的各种参数
( c1 L1 C& J$ z) dv2. 将Matlab语言转换成通用语言形式4 P: Y' ^/ W# ]( h
v3. CCS中编写实际模拟运行的程序,采用DSP语言(C54xx和C6x)- {9 B5 E. i1 E1 h/ O+ V: @
v4. 在硬件系统中调试程序- Y) s: D7 O7 b3 t/ x
8 L [3 f0 |% l+ ?, ?1 G
MATLAB编程
+ `6 z; b- _- ?) a( mMATLAB由于具有数值计算功能、符号计算功能、数据可视化功能、建模仿真可视化功能使得在命题构思、模型建立、仿真研究、假想验证、数据可视化各个环节有着非凡的功能。使用MATLAB中的Cheby1型函数。下面是在MATLAB中设计的低通IIR型切比雪夫滤波器程序。
! K* m0 \% c' O! E" @9 `7 Y1 ?, b; N9 D/ {" N4 ~, P) X
N=256; 数据点数
9 s6 J5 H/ X+ t+ |v fs=600; 采样频率
& s. l0 k: K$ A# Ov dt=1/fs;
3 o j5 g7 i5 xv for k=1:N;
# j6 i- x# u. ev f1=100; f2=250; 信号频率" M# h2 V0 h& B
v y(k)=sin(2*pi*f1*k*dt)+sin(2*pi*f2*k*dt)+0.5*sin(2*pi*(f2
8 s$ n: n8 `! s) ]5 @" G+20)*k*dt);
4 ^9 N, y. Q. f) k; b' |8 U1 A8 f
v end
4 a6 c9 k/ k' w9 Q" ^v lp=200; 截止频率
$ l ~. W! u) O% J9 Yv wn1=2*lp/fs; 函数的参数
~1 S, d# o! v9 uv [z1,p1,k1] = CHEBY1(2,0.5,wn1);滤波器的极零点表示
0 ` P; A5 t) a4 u, C2 Cv [b1,a1] = CHEBY1(2,0.5,wn1);滤波器的传递函数表示1 t3 W# x/ k5 y
v b1=b1/(8*1.0711); 将参数按比例缩小9 H( @: y; Z# [3 P" P J
v a1=a1/(8*1.0711); 为了DSP做准备,MATLAB中不需要1 g$ X2 U8 F. Z2 m4 ~
4 m0 o: M3 W% Zv yy1=filter(b1,a1,y); 滤波0 q6 @9 @! y/ p1 ?
v y=fft(y,N); 将信号做FFT变换/ u: K- }8 s- O0 s
v pyy=y.*conj(y); 做功率谱分析
$ P0 R; D8 v; z; Nv f=(0N/2-1));
1 b3 l5 z. `4 Fv figure(1);
2 o& t. }8 Y7 _3 Q, x' `v plot(f,pyy(1:N/2))
* v5 k/ ~: `9 G% N0 `v y=fft(yy1,N); 将滤波后数据做功率谱分析
: n% g W) e$ {. e7 ]v pyy=y.*conj(y);
0 V$ X- J7 g0 @5 Nv f=(0N/2-1));5 R% \- O5 x3 {/ b/ J
v figure(2);, w8 k _9 n$ g$ H- V1 j
v plot(f,pyy(1:N/2))
, s8 e! B/ U6 O9 ]4 I
6 Q& |3 N) s4 U* D将一些Matlab中的函数替换成简单的形式,将原来的filter函数去掉,自己编写一段函数,使其功能与filter函数的功能是等同的,为了方便程序从$ u; D8 B" H) O$ E
MATLAB的平台转换到DSP汇编的平台上。
* m6 Y. ^% ]$ p+ E, f, D6 {
: h; D2 a3 S- {Y=FILTER[B,A,X]是以B,A系数对X输入进行滤波,以得到输出Y,它是由如下的数学表达式执行滤波功能,表达式如下: r' t' m* ]5 o
v a(1)*y(n)=b(1)*x(n)+b(2)*x(n-1)+…+b(nb+1)*x(n-nb)-a(2)*y(n-1)-…-a(na+1)*y(n-na)
% J% r' K `/ _3 I+ u- e4 K* A4 }
7 W3 W1 u/ N4 D/ s, S7 E可以编写一个for循环来实现上面的表达式,在上面程序中去掉yy1=filter(b1,a1,y),加入如下程序:
+ w3 J1 f5 ?, M }. \; W2 v; ]v yy1(1)=0;
7 A: b3 T' h+ uv yy1(2)=0;
& Q+ j! Q' s$ n. L1 f# y0 jv b(1)=0.0625; b(2)=0.1250; b(3)=0.0625;; {: c( V2 d5 m4 d% v
v a(1)=0.1167; a(2)=0.1033; a(3)=0.0448;
2 J5 m) [/ B! |1 nv n=254;, T+ j/ j- Z; L) H( ^2 B9 B6 c
v for i=1:n- ?% D+ B/ l6 c# `+ T; B
v yy1(i+2)=0.5*y(i+2)+y(i+1)+0.5*y(i)-# Y! I) a3 z8 j
v 0.83*yy1(i+1)-0.36*yy1(i);+ i" H7 v$ f i8 y9 D
v end2 t7 v# o: R6 m
% k+ q- k: U$ A% u/ _1 l1 u
4 g$ |9 U5 k( c6 ^* o7 J) x* c |
|