FIR数字滤波器设计

这篇具有很好参考价值的文章主要介绍了FIR数字滤波器设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 目标
    用Kaiser窗设计一个FIR数字带阻滤波器,对模拟信号 x a ( t ) = c o s ( 2 π f a t ) + c o s ( 2 π f b t ) + c o s ( 2 π f c t ) x_a(t) = cos (2\pi f_at) + cos (2\pi f_bt) + cos (2\pi f_ct) xa(t)=cos(2πfat)+cos(2πfbt)+cos(2πfct)
    f a = 6500 H z , f b = 7000 H z , f c = 9000 H z f_a = 6500 Hz,f_b = 7000 Hz,f_c = 9000 Hz fa=6500Hzfb=7000Hzfc=9000Hz 滤波,要求滤去7000Hz 的频率成分。
  • 参数
    系统采样频率为 f s f_s fs = 32000 Hz,采样点数 N=4096,滤波器的 通带衰减 R p R_p Rp = 0.25 dB,阻带衰减 α \alpha α = 50 dB,过渡带宽可以用模拟频率(例如200Hz)也可以用数字频率指定。

【 1. 具体实现 】

  • 旁瓣衰减为 α dB 且表示 FIR 滤波器的凯塞窗,此时的形状因子为:
    β = { 0.1102 ( α − 8.7 ) , α > 50 0.5842 ( α − 21 ) 0.4 + 0.07886 ( α − 21 ) , 50 ≥ α ≥ 21 0 , α < 21 \left.\beta=\left\{\begin{array}{ll}0.1102(\alpha-8.7),&\alpha>50\\ 0.5842(\alpha-21)^{0.4}+0.07886(\alpha-21),&50\geq\alpha\geq21\\ 0,&\alpha<21\end{array}\right.\right. β= 0.1102(α8.7),0.5842(α21)0.4+0.07886(α21),0,α>5050α21α<21
  • 阶数
    n = α s − 8 2.285 × Δ w n=\frac{\alpha _s-8}{2.285\times \Delta w} n=2.285×Δwαs8
  • MATLAB实现代码
clc;
clear;
close all;

%% 【1. 设定参数】
%%% 采样参数
fs = 32000; %采样频率
Ts = 1/fs;  %采样周期
N  = 4096;  %采样点数
t  = 0:Ts:(N-1)*Ts; %时间刻度
%%% 原信号参数
fa = 6500;
fb = 7000;
fc = 9000;
xa = cos(2*pi*fa*t)+cos(2*pi*fb*t)+cos(2*pi*fc*t);

%% 【3. 滤波前:fft频谱】
%%% FFT
M = 4096; %FFT的运算点数
Xa = fft(xa,M);   %FFT输出值
Xa = [Xa(1)/M,Xa(2:M)*2/M]; %幅度轴
Xa_fftshift = fftshift(Xa); %频域搬移
k = -M/2:M/2-1;  %频率点索引
f = fs*k/M;      %频率轴
%%% 画图
figure;
stem(f,abs(Xa_fftshift));
xlabel('频率');
ylabel('幅度');
title('滤波前的频谱');
grid;

%% 【4. 滤波器设计:加Kasier窗的FIR滤波器】
%%% 滤波器参数
Rp = 0.25; %通带衰减,单位dB,(未用到)
alpha  = 50;   %阻带衰减,单位dB
fstart = 6900; % 阻带起始频率
fstop  = 7100; % 阻带终止频率
beta = 0.1102*(alpha-8.7); % 形状因子beta
Wn   = [2*fstart/fs  2*fstop/fs];% 阻带带宽,两个截止角频率(归一化),截至范围:6900hz-7100hz
Wfs  = 2*pi*(fstop-fstart)/2/fs; % 归一化过渡带宽
n    = (alpha-8)/(2.285*Wfs); %阶数
n    = ceil(n);      % 向上取整
n    = n + mod(n,2); % 取偶
%%% 生成凯塞窗
Windows      = kaiser(n+1,beta); %凯撒窗
KasierFilter = fir1(n,Wn, 'stop', Windows);
%%% 画图
[H, W] = freqz(KasierFilter,1,4096,fs); %返回凯塞窗滤波器的频率响应H,角频率W
figure;
freqzplot(H,W); %频率响应
title("滤波器的频率响应");
ylabel('dB');

%% 【5. 信号输入滤波器:最终效果】
After_filter = filter(KasierFilter,1,xa);%把信号输入滤波器
Xa1 = fft(After_filter,M);   %FFT输出值
Xa1 = [Xa1(1)/M,Xa1(2:M)*2/M]; %幅度轴
Xa1_fftshift = fftshift(Xa1); %频域搬移
k = -M/2:M/2-1;  %频率点索引
f = fs*k/M;      %频率轴
%%% 画图
figure;
stem(f,abs(Xa1_fftshift));
xlabel('频率');
ylabel('幅度');
title('滤波后的频谱');
grid;

FIR数字滤波器设计,DSP 数字信号处理,数字信号处理,FIR滤波器,凯塞窗
FIR数字滤波器设计,DSP 数字信号处理,数字信号处理,FIR滤波器,凯塞窗
FIR数字滤波器设计,DSP 数字信号处理,数字信号处理,FIR滤波器,凯塞窗

【 2. 参考 】

MATLAB 官方对 kaiser() 凯塞窗函数的描述

MATLAB 官方对 fir1() FIR滤波器函数的描述文章来源地址https://www.toymoban.com/news/detail-820972.html

到了这里,关于FIR数字滤波器设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数字信号处理实验:数字滤波器的设计与应用

    一. 实验目的         1.掌握模拟滤波器的设计方法,以及脉冲响应不变法和双线性变换法设计IIR数字滤波 器的方法,针对实际信号能设计相应的 IIR 数字滤波器,并按要求进行滤波。         2.掌握用窗函数法设计FIR数字滤波器的方法,并通过实验了解各种窗函数对滤

    2024年02月03日
    浏览(47)
  • 【数字信号处理2】IIR 滤波器设计

    1.掌握冲激响应法和双线性变换法设计IIR滤波器的原理及具体设计方法,熟悉用双线性设计法设计低通、带通和高通IIR数字滤波器的计算机程序; 2.熟悉模拟Butterworth滤波器的设计,掌握冲激响应法和双线性变换法设计数字IIR滤波器的方法。 1、不同阶次模拟巴特沃兹滤波器的

    2024年02月05日
    浏览(49)
  • 数字信号处理实验:IIR数字滤波器设计及软件实现

    目录 一、实验目的 二、实验原理 三、实验设备 四、实验内容及步骤 五、实验结果及分析 六、实验主程序框图及程序清单 七、实验总结 熟悉用双线性变换法设计IIR数字滤波器的原理与方法; 学会调用MATLAB信号处理工具箱中滤波器设计函数(或滤波器设计分析工具FDATool)设

    2024年02月12日
    浏览(39)
  • 数字信号处理第四次试验:IIR数字滤波器设计及软件实现

    为了帮助同学们完成痛苦的实验课程设计,本作者将其作出的实验结果及代码贴至CSDN中,供同学们学习参考。如有不足或描述不完善之处,敬请各位指出,欢迎各位的斧正! (1)熟悉用双线性变换法设计IIR数字滤波器的原理与方法; (2)学会调用MATLAB信号处理工具箱中滤

    2024年02月08日
    浏览(43)
  • 数字信号处理|Matlab设计巴特沃斯低通滤波器(冲激响应不变法和双线性变换法)

    2.1频响图 系统函数 H 是一个复数,其图谱分为:幅度谱、相位谱 幅度谱 x轴:模拟频率f(数字频率w转化来)【 单位:赫兹Hz 】 y轴:|H1|幅度【一般用:20 * log10|H1|】【 单位:分贝dB 】  相位谱 x轴:模拟频率f(数字频率w转化来)【 单位:赫兹Hz 】 y轴:H1 的相位 2.2 各个频

    2023年04月08日
    浏览(40)
  • FIR数字滤波器设计

    目标 用Kaiser窗设计一个FIR数字带阻滤波器,对模拟信号 x a ( t ) = c o s ( 2 π f a t ) + c o s ( 2 π f b t ) + c o s ( 2 π f c t ) x_a(t) = cos (2pi f_at) + cos (2pi f_bt) + cos (2pi f_ct) x a ​ ( t ) = cos ( 2 π f a ​ t ) + cos ( 2 π f b ​ t ) + cos ( 2 π f c ​ t ) , f a = 6500 H z , f b = 7000 H z , f c = 9000 H z

    2024年01月24日
    浏览(34)
  • 窗函数法设计FIR数字滤波器

    一、   实验目的 1.1.1掌握用窗函数法设计FIR数字滤波器的原理和方法。 1.1.2熟悉线性相位FIR数字滤波器特性。 1.1.3了解各种窗函数对滤波特性的影响。 实验原理 窗函数设计法的基本原理是用有限长单位脉冲序列逼近与。由于往往是无限长序列,且是非因果的,所以用窗函数

    2024年02月05日
    浏览(50)
  • FIR数字滤波器设计——窗函数法

    本实验结合理论教材中FIR数字滤波器设计的教学内容中的窗函数设计法,学习和掌握窗函数法设计FIR数字滤波器的原理和实现过程,学习MATLAB设计FIR数字滤波器的相关函数的使用,掌握使用MATLAB设计FIR数字滤波器的过程与方法,从而加深对FIR数字滤波器常用指标和设计过程的

    2024年02月13日
    浏览(35)
  • FPGA 的 DSP:Verilog 中的简单 FIR 滤波器

    本项目介绍如何用 Verilog 实现一个带有预生成系数的简单 FIR 滤波器。 简陋的 FIR 滤波器是 FPGA 数字信号处理中最基本的构建模块之一,因此了解如何利用给定的抽头数和相应的系数值组装一个基本模块非常重要。因此,在这个关于在 FPGA 上入门 DSP 基础知识的实用方法迷你系

    2024年03月17日
    浏览(39)
  • STM32 FIR滤波器使用要点,STM32 DSP篇

    STM32搭配的CMSIS的DSP库已经写好了FIR,我们做的就是用好用稳定! 2.1使用MATLAB的Filter Designer生成滤波器的参数(直接在MATLAB命令中输入filterDesigner即可调出此工具,配置好参数后,选择Targets-Generate C header) 2.2调用arm_fir_init_f32或arm_fir_init_q31或arm_fir_init_q15等等视实际使用情况而

    2024年02月14日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包