基于频率抽样法的FIR数字滤波器实现matlab仿真

Posted fpga和matlab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于频率抽样法的FIR数字滤波器实现matlab仿真相关的知识,希望对你有一定的参考价值。

目录

一、理论基础

二、案例背景

三、MATLAB核心代码

四、仿真结论分析


一、理论基础

       根据快速傅里叶变换的数学原理可知,对于一个任意长度的序列,通过对其频谱特性进行等间隔的数字抽烟操作,然后通过离散傅里叶反变换,便可获得一个有限长的数字序列。这个 有限长序列的周期性是原序列的主值序列,而且频率特性和原序列的频率特性相似。因此,对于一个理想的频率响应函数Hd(e),其响应的单位抽样响应函数为h(n),对频率响应函数Hd(e)所在的单位圆上做等间隔划分,即等间隔频率抽样,从而得到频率抽样值H(k),最后对H(k)进行离散傅里叶反变换,即:

 

 

二、案例背景

     滤波器的含义,就是指对输入信号有着消除噪声和平滑功能的系统[01]。根据处理信号种类的不同,将处理连续信号的滤波器称为模拟滤波器,将处理离散信号的滤波器称为数字滤波器。随着通信多媒体技术的飞速发展,数字滤波器成为数字信号处理领域中一个越来越重要的组成部分,其广泛应用在信息通信、语音传输、自适应控制等众多领域。从结构上分,数字滤波器可以分为FIR数字滤波器和IIR数字滤波器两种基本类型。其中,FIR滤波器的设计方法有许多种,如窗函数设计法、频率取样法和等波纹最佳逼近法,本文主要针对FIR滤波器的实现原理和设计方法进行了研究。

    数字滤波器本质上讲是一种通过有限精度算法来运算的线性时不变离散系统,其具有特定的传输选择性,数字滤波器的输入和输出信号均为离散数字信号。数字滤波器的工作原理为,通过一个离散数字系统,对输入的数字信号进行运算,处理,变换等各种数字信号操作,从而实现改变数字输入序列的频谱特性或者时域波形,将有用的信号频谱分量进行保留,消除无用的信号频谱分量。数字滤波器,在功能上可以分为低通数字滤波器、高通数字滤波器、带通数字滤波器以及带阻数字滤波器四种类型。相对于模拟滤波器,数字滤波器具有高精度,高稳定性,高灵活性等优势[02]。

三、MATLAB核心代码

clc;
clear;
close all;


N = 63;  
NN= 31; 
H =[ones(1,(N-NN)/2),zeros(1,NN),ones(1,(N-NN)/2)]; 


k = 0:(N-1)/2;k1=(N+1)/2:(N-1);  
A =[exp(-j*pi*k*(N-1)/N),exp(j*pi*(N-k1)*(N-1)/N)]; 
HK= H.*A; 
hn= ifft(HK); 

freqz(hn,1,512); 
figure;  
stem(real(hn),'.'); 
 
xlabel('n');
ylabel('h(n)'); 
clc;
clear;
close all;


N = 63;  
NN= 51; 
H =[ones(1,(N-NN)/2),zeros(1,NN),ones(1,(N-NN)/2)]; 
k = 0:(N-1)/2;k1=(N+1)/2:(N-1);  
A =[exp(-j*pi*k*(N-1)/N),exp(j*pi*(N-k1)*(N-1)/N)]; 
HK= H.*A; 
hn= ifft(HK); 

freqz(hn,1,512); 
figure;  
stem(real(hn),'.'); 
line([0 35],[0 0]);  
xlabel('n');
ylabel('h(n)'); 


Ts=1/1000  ;%设置采样频率
 

t=0:Ts:3*pi;
y=sin(2*pi*t)+cos(400*pi*t);
figure;
plotspec(y,Ts); 

y_Win=filter(hn,1,y);
figure;
plotspec(y_Win,Ts); 



四、仿真结论分析

     从图仿真结果可知,频率抽样法所设计的FIR滤波器,其滤波性能是随着滤波器阶数的增加而增加的,因此,当阶数较大的时候,其硬件实现难度较大。

A25-25

 

以上是关于基于频率抽样法的FIR数字滤波器实现matlab仿真的主要内容,如果未能解决你的问题,请参考以下文章

基于切比雪夫逼近法的滤波器的matlab设计与实现

基于窗函数法的FIR数字滤波器实现matlab仿真

我做“基于FFT算法与实现”和“FIR滤波器的设计与实现”的实验。。

数字信号处理相关4(FPGA实现FIR滤波器)

滤波器实现

用MATLAB怎么设计带通滤波器?那个firls函数好像没有约束采样频率,还有别的方法吗?万分谢谢啦!