打印

DSP的数字滤波器的实现

[复制链接]
491|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Varus|  楼主 | 2016-7-27 08:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   数字滤波器由数字乘法器、加法器和延时单元组成的一种算法或装置。数字滤波器的功能是对输入离散信号的数字代码进行运算处理,以达到改变信号频谱的目的。
       巴特沃斯滤波器是电子滤波器的一种。巴特沃斯滤波器的特点是通频带的频率响应曲线最平滑。
       切比雪夫滤波器是在通带或阻带上频率响应幅度等波纹波动的滤波器。
       设计过程
v1. 在Matlab语言中确定滤波器的各种参数
v2. 将Matlab语言转换成通用语言形式
v3. DSP.com/forum.php?mod=forumdisplay&fid=58" target="_blank" class="relatedlink">CCS中编写实际模拟运行的程序,采用DSP语言(C54xx和C6x)
v4. 在硬件系统中调试程序
复制代码
      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))
复制代码
      将一些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)
复制代码
      可以编写一个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

相关帖子

沙发
lefeng| | 2016-7-27 09:01 | 只看该作者
MATLAB的程序怎么转化成C或者C++,可读性比较高的?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

155

主题

703

帖子

1

粉丝