[讨论] DSP中数字滤波器是这样的

Jacktang   2016-1-28 21:02 楼主
数字滤波器由数字乘法器、加法器和延时单元组成的一种算法或装置。数字滤波器的功能是对输入离散信号的数字代码进行运算处理,以达到改变信号频谱的目的。
       巴特沃斯滤波器是电子滤波器的一种。巴特沃斯滤波器的特点是通频带的频率响应曲线最平滑。
       切比雪夫滤波器是在通带或阻带上频率响应幅度等波纹波动的滤波器。
       设计过程
  • v1. 在Matlab语言中确定滤波器的各种参数
  • v2. 将Matlab语言转换成通用语言形式
  • v3. DSP.com/forum.php?mod=forumdisplay&fid=58" target="_blank" class="relatedlink">CCS中编写实际模拟运行的程序,采用DSP语言(C54xx和C6x)
  • v4. 在硬件系统中调试程序

[color=rgb(51, 102, 153) !important]复制代码

      MATLAB编程
       MATLAB由于具有数值计算功能、符号计算功能、数据可视化功能、建模仿真可视化功能使得在命题构思、模型建立、仿真研究、假想验证、数据可视化各个环节有着非凡的功能。使用MATLAB中的Cheby1型函数。下面是在MATLAB中设计的低通IIR型切比雪夫滤波器程序。
  • N=256; 数据点数
  • v fs=600; 采样频率
  • v dt=1/fs;
  • v for k=1:N;
  • v f1=100; f2=250; 信号频率
  • v y(k)=sin(2*pi*f1*k*dt)+sin(2*pi*f2*k*dt)+0.5*sin(2*pi*(f2
  • +20)*k*dt);
  • v end
  • v lp=200; 截止频率
  • v wn1=2*lp/fs; 函数的参数
  • v [z1,p1,k1] = CHEBY1(2,0.5,wn1);滤波器的极零点表示
  • v [b1,a1] = CHEBY1(2,0.5,wn1);滤波器的传递函数表示
  • v b1=b1/(8*1.0711); 将参数按比例缩小
  • v a1=a1/(8*1.0711); 为了DSP做准备,MATLAB中不需要
  • v yy1=filter(b1,a1,y); 滤波
  • v y=fft(y,N); 将信号做FFT变换
  • v pyy=y.*conj(y); 做功率谱分析
  • v f=(0:(N/2-1));
  • v figure(1);
  • v plot(f,pyy(1:N/2))
  • v y=fft(yy1,N); 将滤波后数据做功率谱分析
  • v pyy=y.*conj(y);
  • v f=(0:(N/2-1));
  • v figure(2);
  • v plot(f,pyy(1:N/2))

[color=rgb(51, 102, 153) !important]复制代码

      将一些Matlab中的函数替换成简单的形式,将原来的filter函数去掉,自己编写一段函数,使其功能与filter函数的功能是等同的,为了方便程序从
MATLAB的平台转换到DSP汇编的平台上。
  • Y=FILTER[B,A,X]是以B,A系数对X输入进行滤波,以得到输出Y,它是由如下的数学表达式执行滤波功能,表达式如下:
  • 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)

[color=rgb(51, 102, 153) !important]复制代码

      可以编写一个for循环来实现上面的表达式,在上面程序中去掉yy1=filter(b1,a1,y),加入如下程序:
  • v yy1(1)=0;
  • v yy1(2)=0;
  • v b(1)=0.0625; b(2)=0.1250; b(3)=0.0625;
  • v a(1)=0.1167; a(2)=0.1033; a(3)=0.0448;
  • v n=254;
  • v for i=1:n
  • v yy1(i+2)=0.5*y(i+2)+y(i+1)+0.5*y(i)-
  • v 0.83*yy1(i+1)-0.36*yy1(i);
  • v end

[color=rgb(51, 102, 153) !important]复制代码


回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复