赞
踩
本读书笔记为个人学习笔记,可以通过笔记了解这本书大概讲了些什么,如果对更具体内容感兴趣,请翻阅原书《数字滤波器的MATLAB和FPGA实现》。
滤波器简介、FPGA简介、FPGA器件、FPGA开发流程、MATLAB和ISE联合使用
数字滤波器分类
经典滤波器主要有低通滤波器(Low Pass Filter,LPF)、高通滤波器(High Pass Filter,HPF)、带通滤波器(Band Pass Filter,BPF)、带阻滤波器(Band Stop Filter,BSF)以及全通滤波器(All Pass Filter,APF)等。
现代滤波器把信号和噪声都视为随机信号,利用它们的统计特征(如自相关函数、功率谱函数等)推导出一套最佳的估值算法,然后用硬件或软件实现。现代滤波器主要有维纳滤波器(Wiener Filter)、卡尔曼滤波器(Kalman Filter)、线性预测器(Liner Predictor)、自适应滤波器(Adaptive Filter)等。一些专著将基于特征分解的频率估计及奇异值分解算法也归入现代滤波器的范畴。
从实现的网络结构或者单位脉冲响应来看,数字滤波器可以分成无限脉冲响应(Infinite Impulse Response,IIR)滤波器和有限脉冲响应(Finite Impulse Response,FIR)滤波器。
数的表示、FPGA中数的运算,有限字长效应、FPGA常用运算模块
浮点数相加
对阶操作:比较指数大小,对指数小的操作数的尾数进行移位,完成尾数的对阶操作。
尾数相加:对对阶后的尾数进行加(减)操作。
规格化:规格化有效位并且根据移位的方向和位数修改最终的阶码。
浮点数相乘
指数相加:完成两个操作数的指数相加运算。
尾数调整:将尾数f 调整为1.f 的补码格式。
尾数相乘:完成两个操作数的尾数相乘运算。
规格化:根据尾数运算结果调整指数位,并对尾数进行舍入截位操作,规格化输出结果。
有限字长效应:
AD转换时量化精度有限引入的量化误差。
滤波器系数有限字长导致零极点偏移,引起滤波器性能偏差。
运算时字长有限导致的舍入误差。
线性时不变系统,线性相位系统
线性系统是指满足叠加原理的一类系统。
时域离散系统的参数和特性不随时间变化。
线性相位系统保证所有通带内的输入信号的相位响应是线性的,即保证了输入信号的延时特性。
FIR滤波器特性
单位取样响应h(n)是一个N点长的有限长序列,0≤ n ≤N-1。滤波器的输出y(n)可表示为输入序列x(n)与单位取样响应h(n)的线性卷积。
系统函数
只有当FIR滤波器单位取样响应满足对称条件时,FIR滤波器才具有线性相位特性。
奇对称时,系统除具有M /2个群延时外,还产生了一个90°的相移。这种在所有频率上都产生90°相移的变换称为信号的正交变换,这种网络称为正交变换网络。
对于非线性相位的滤波器系统来讲,IIR滤波器要比FIR滤波器优越些,主要表现在占用的硬件资源及滤波性能上。
单位取样 相应特征 | 相位特性 | 幅度特性 | 滤波器种类 |
偶对称 偶整数 | 线性相位 | w=0,pi,2pi偶对称 | 各种 |
偶对称 奇整数 | 线性相位 | w=0,2pi偶对称 w=pi奇对称 w=pi为0 | 不适合高通、带阻 |
奇对称 偶整数 | 线性相位 90°相移 | w=0,pi,2pi奇对称 w=0,pi,2pi为0 | 只适合带通 |
奇对称 奇整数 | 线性相位 90°相移 | w=0,2pi奇数对称 w=pi偶对称 w=0,2pi为0 | 适合高通,带通 |
FIR滤波器设计方法
窗函数法、频率取样法、最优设计法
“对于工程设计来讲,要知道你所做的工作中有百分之九十都是别人已经做过的。因此,你在动手进行工程设计之前首要的工作是查阅资料,吸取前人的研究成果。”------------本章有意义的一句话
fir1 函数:
- %一般形式
- b=fir1(n,wn,'ftype',window);
- %归一化滤波器幅度
- b=fir1(XXXXXX,'noscale');
例:采用海明窗,分别设计长度为41(阶数为40)的低通(截止频率为200 Hz)、高通(截止频率为200 Hz)、带通(通带为200~400 Hz)、带阻滤波器(阻带为200~400 Hz)FIR滤波器,采样频率为2 000 Hz,画出其脉冲响应及幅频响应图。
- N=41;%滤波器长度
- fs=2000;%采样频率
- %各种滤波器的特征频率
- fc_lpf=200;
- fc_hpf=200;
- fp_bandpass=[200 400];
- fc_stop=[200 400];
- %以采样频率的一半,对频率进行归一化处理
- wn_lpf=fc_lpf*2/fs;
- wn_hpf=fc_hpf*2/fs;
- wn_bandpass=fp_bandpass*2/fs;
- wn_stop=fc_stop*2/fs;
- %采用 fir1 函数设计 FIR 滤波器
- b_lpf=fir1(N-1,wn_lpf);
- b_hpf=fir1(N-1,wn_hpf,'high');
- b_bandpass=fir1(N-1,wn_bandpass,'bandpass');
- b_stop=fir1(N-1,wn_stop,'stop');
- %求滤波器的幅频响应
- m_lpf=20*log(abs(fft(b_lpf)))/log(10);
- m_hpf=20*log(abs(fft(b_hpf)))/log(10);
- m_bandpass=20*log(abs(fft(b_bandpass)))/log(10);
- m_stop=20*log(abs(fft(b_stop)))/log(10);
- %设置幅频响应的横坐标单位为 Hz
- x_f=[0:(fs/length(m_lpf)):fs/2];
- %绘制单位脉冲响应
- subplot(421);stem(b_lpf);xlabel('n');ylabel('h(n)');
- subplot(423);stem(b_hpf);xlabel('n');ylabel('h(n)');
- subplot(425);stem(b_bandpass);xlabel('n');ylabel('h(n)');
- subplot(427);stem(b_stop);xlabel('n');ylabel('h(n)');
- %绘制幅频响应曲线
- subplot(422);plot(x_f,m_lpf(1:length(x_f)));
- xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);
- subplot(424);plot(x_f,m_hpf(1:length(x_f)));
- xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);
- subplot(426);plot(x_f,m_bandpass(1:length(x_f)));
- xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);
- subplot(428);plot(x_f,m_stop(1:length(x_f)));
- xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);
矩形窗的过渡带最窄,但其旁瓣峰值最高,阻带衰减最少;与汉宁窗相比,海明窗的过渡带与汉宁窗相同,但其旁瓣峰值更小,且阻带衰减更大,因此性能比汉宁窗更好;当凯塞窗函数的β 取7.856时,与布拉克曼窗相比,从过渡带、旁瓣峰值、阻带衰减等性能指标看,凯塞窗均表现出更好的性能。
Kaiserord函数
[n,wn,beta,filtype] =kaiserord(f,a,dev,fs);
fir2函数:
b=fir2(n,f,m,npt,lap,window);
例:利用fir2函数设计120阶的FIR滤波器,要求设计的滤波器在归一化频率0~0.125范围内幅度为1,在0.125~0.25范围内幅度为0.5,在0.25~0.5范围内幅度为0.25,在0.5~1范围内幅度为0.125。绘出滤波器的频率响应曲线。
- N=120; %滤波器阶数
- fc=[0 0.125 0.125 0.25 0.25 0.5 0.5 1]; %截止频率
- mag=[1 1 0.5 0.5 0.25 0.25 0.125 0.125 ]; %理想滤波器幅度
- b=fir2(N,fc,mag); %设计海明窗滤波器
- freqz(b); %绘制频率响应曲线
firpm函数
- b = firpm(n,f,a,w,'ftype');
- [b,delta] = firpm(...);
FDATOOL工具箱
根据图形化界面配置参数完成设计
FIR滤波器结构:
FPGA实现直接型结构的FIR滤波器,可以采用串行结构、并行结构、分布式结构,以及直接使用ISE提供的FIR滤波器核等方式。
分布式算法:
对于长度为N 的乘加运算,只需构造一个深度为N 的存储器查找表,通过M (M 为变量的数据长度)次查找表运算、M −1次移位运算及1次M 输入的加法运算即可完成整个乘加运算。
不同结构滤波器性能对比:
FIR核实现:
调用FIR核,选择合适的参数,实现FIR滤波器设计
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。