当前位置: 首页 > news >正文

FIR数字滤波器设计

文章目录

  • 【 1. 具体实现 】
  • 【 2. 参考 】

  • 目标
    用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;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【 2. 参考 】

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

MATLAB 官方对 fir1() FIR滤波器函数的描述

相关文章:

  • 03 Redis之命令(基本命令+Key命令+String型Value命令与应用场景)
  • STM32+ESP8266 实现物联网设备节点
  • 使用IntelliJ IDEA快速搭建springboot 基础模板项目
  • 代码随想录算法刷题训练营day17
  • Windows11 鼠标拖动文件到CMD控制终端窗口无效,无法显示具体文件路径
  • python sqlite3 线程池封装
  • 【服务器】安装宝塔面板
  • 使用 Optional 优雅处理可能为null的值
  • LeetCode:376.摆动序列
  • 【VSAN数据恢复】VSAN数据重构迁移失败的数据恢复案例
  • 带延迟的随机逼近方案(Stochastic approximation schemes):在网络和机器学习中的应用
  • 各品牌主板快速启动热键对照表及CMOS进入方法
  • k8s 版本发布与回滚
  • Git(6)之使用HTTPS代理
  • Vite学习指南
  • @angular/forms 源码解析之双向绑定
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 【知识碎片】第三方登录弹窗效果
  • Codepen 每日精选(2018-3-25)
  • ES6语法详解(一)
  • java概述
  • js数组之filter
  • Koa2 之文件上传下载
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • python_bomb----数据类型总结
  • Redis字符串类型内部编码剖析
  • SpiderData 2019年2月16日 DApp数据排行榜
  • SpringBoot几种定时任务的实现方式
  • Spring核心 Bean的高级装配
  • vue2.0项目引入element-ui
  • 从输入URL到页面加载发生了什么
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 力扣(LeetCode)22
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 小试R空间处理新库sf
  • 学习JavaScript数据结构与算法 — 树
  • 1.Ext JS 建立web开发工程
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (23)Linux的软硬连接
  • (39)STM32——FLASH闪存
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .“空心村”成因分析及解决对策122344
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET 读取 JSON格式的数据
  • .net开发时的诡异问题,button的onclick事件无效
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @ModelAttribute使用详解
  • [04]Web前端进阶—JS伪数组
  • [383] 赎金信 js
  • [Angular 基础] - 数据绑定(databinding)
  • [AR Foundation] 人脸检测的流程