数字信号处理第五次试验:FIR数字滤波器设计与软件实现

2023-11-19

前言

为了帮助同学们完成痛苦的实验课程设计,本作者将其作出的实验结果及代码贴至CSDN中,供同学们学习参考。如有不足或描述不完善之处,敬请各位指出,欢迎各位的斧正!

一、实验目的

(1)掌握用窗函数法设计FIR数字滤波器的原理和方法。
(2)掌握用等波纹最佳逼近法设计FIR数字滤波器的原理和方法。
(3)掌握FIR滤波器的快速卷积实现原理。
(4)学会调用MATLAB函数设计与实现FIR滤波器。

二、实验原理与方法

(1)认真复习第七章中用窗函数法和等波纹最佳逼近法设计FIR数字滤波器的原理;
(2)调用信号产生函数xtg产生具有加性噪声的信号xt,并自动显示xt及其频谱,如图所示;
在这里插入图片描述
(3)请设计低通滤波器,从高频噪声中提取xt中的单频调幅信号,要求信号幅频失真小于0.1dB,将噪声频谱衰减60dB。先观察xt的频谱,确定滤波器指标参数。
(4)根据滤波器指标选择合适的窗函数,计算窗函数的长度N,调用MATLAB 函fir1设计一个FIR低通滤波器。并编写程序,调用MATLAB快速卷积函数fftfilt实现对xt的滤波。绘图显示滤波器的频响特性曲线、滤波器输出信号的幅频特性图和时域波形图。
(4)重复(3),滤波器指标不变,但改用等波纹最佳逼近法,调用MATLAB函数remezord和remez 设计FIR数字滤波器。并比较两种设计方法设计的滤波器阶数。
提示:
①MATLAB函数fir1和fftfilt的功能及其调用格式请查阅help;
②采样频率Fs=1000Hz,采样周期T=1/Fs;
③根据图和实验要求,可选择滤波器指标参数:通带截止频率fp=120Hz,阻带截至频率fs=150Hz,换算成数字频率,通带截止频率 ω p = 2 π f p T \omega_p=2\pi f_pT ωp=2πfpT,通带最大衰为0.1dB,阻带截至频率 ω s = 2 π f s T = 0.3 π \omega_s=2\pi f_sT=0.3\pi ωs=2πfsT=0.3π,阻带最小衰为60dB。
④实验程序框图如图所示,供读者参考。
在这里插入图片描述

三、实验环境

Matlab 7.0及Matlab 2018b

四、实验内容及步骤

滤波器参数及实验程序清单
1、滤波器参数选取
根据5.1节实验指导的提示③选择滤波器指标参数:通带截止频率fp=120Hz,阻带截至频率fs=150Hz。代入采样频率Fs=1000Hz,换算成数字频率,通带截止频率 ω p = 2 π f p T \omega_p=2\pi f_pT ωp=2πfpT,通带最大衰为0.1dB,阻带截至频率 ω s = 2 π f s T = 0.3 π \omega_s=2\pi f_sT=0.3\pi ωs=2πfsT=0.3π,阻带最小衰为60dB。所以选取blackman窗函数。与信号产生函数xtg相同,采样频率Fs=1000Hz。
2、实验程序清单

%FIR数字滤波器设计及软件实现
clear;close all;
%==调用xtg产生信号x,xt长度N=1000,并显示xt及其频谱=====
N=1000;xt=xtg(N);
fp=120;fs=150;Rp=0.2;As=60;Fs=1000;T=1/Fs%输入给定指标
%(1)用窗函数法设计滤波器
wc=(fp+fs)/Fs;%理想低通滤波器截止频率(关于pi归一化)
B=2*pi*(fs-fp)/Fs;%过渡带宽度指标
Nb=ceil(11*pi/B);%blackman窗的长度N
hn=fir1(Nb-1,wc,blackman(Nb));
Hw=abs(fft(hn,1024));%求设计的滤波器频率特性
ywt=fftfilt(hn,xt,N);%调用函数fftfilt对xt滤波
%以下为用窗函数法设计法的绘图部分
subplot(2,1,1);
myplot(hn,1);title('(a)低通滤波器幅频特性');
subplot(2,1,2);
yt='y_w(t)'; tplot(ywt,T,yt);
title('(b)滤除噪声后的声音波形')
%(2)用等波纹最佳逼近法设计滤波器
fb=[fp,fs];m=[1,0];%确定remezord函数所需参数f,m,dev
dev=[(10^(Rp/20)-1)/(10^(Rp/20)+1),10^(-As/20)];
[Ne,fo,mo,W]=remezord(fb,m,dev,Fs);%确定remez函数所需参数
hn=remez(Ne,fo,mo,W);%调用remez函数进行设计
Hw=abs(fft(hn,1024));%求设计的滤波器频率特性
yet=fftfilt(hn,xt,N);%调用函数ftfilt对xt滤波
%以下为用等波纹设计法的绘图部分
subplot(2,1,1);
myplot(hn,1);title('(c)低通滤波器幅频特性');
subplot(2,1,2);
yt='y_w(t)'; tplot(ywt,T,yt);
title('(d)滤除噪声后的声音波形')
function xt=xtg(N)
%实验五信号x(t)产生,并显示信号的幅频特性曲线
%xt=xtg(N)产生一个长度为N,有加性高频噪声的单频调幅信号xt,采样频率Fs=1000Hz
%载波频率f允=Fs/10=100Hz,调制正弦波频率f0=fc/10=10Hz.
Fs=1000;T=1/Fs;Tp=N*T;
t=0:T:(N-1)*T;
fc=Fs/10;f0=fc/10;%载波频率fc=Fs/10,单频调制信号频率为f0=Fc/10;
mt=cos(2*pi*f0*t);%产生单频正弦波调制信号mt,频率为f0
ct=cos(2*pi*fc*t);%产生载波正弦波信号ct,频率为fe
xt=mt.*ct;%相乘产生单频调制信号xt
nt=2*rand(1,N)-1;%产生随机噪声nt
%——设计高通滤波器hn,用于滤除噪声nt 中的低频成分,生成高通噪声==
fp=150;fs=200;Rp=0.1;As=70;%滤波器指标
fb=[fp,fs];m=[0,1];%计算remezord函数所需参数fm,dev
dev=[10^(-As/20),(10^(Rp/20)-1)/(10^(Rp/20)+1)];
[n,fo,mo,W]=remezord(fb,m,dev,Fs);%确定remez函数所需参数
hn=remez(n,fo,mo,W);%调用remez函数进行设计,用于滤除噪声nt中的低频成分
yt=filter(hn,1,10*nt);%滤除随机噪声中低频成分,生成高通噪声yt
xt=xt+yt;%噪声加信号
fst=fft(xt,N);k=0:N-1;f=k/Tp;
subplot(3,1,1);plot(t,xt);grid;xlabel('t/s');ylabel('x(t)');
axis([0,Tp/5,min(xt),max(xt)]);title('(c)信号加噪声波形')
subplot(3,1,2);plot(f,abs(fst)/max(abs(fst)));grid;title('(d)信号加噪声的频谱')
axis([0,Fs/2,0,1.2]);xlabel('f/Hz');ylabel('幅度');
function tplot(xn,T,yn)
n=0:length(xn)-1;
t=n*T;
plot(t,xn);
xlabel('t/s');
ylabel('y_e(t)');
axis([0,0.5,min(xn),1.2*max(xn)]);
function myplot(B,A)
[H,W]=freqz(B,A,1000);
m=abs(H);
plot(W/pi*500,20*log10(m/max(m)));
grid on;
xlabel('f/Hz');
ylabel('幅度(dB)')
axis([0,500,-80,10]);
title('损耗函数曲线');

五、实验结果截图(含分析)

实验程序运行结果
用窗函数法设计滤波器,滤波器长度Nb=184。滤波器损耗函数和滤波器输出 yw(nT)分别如图所示。
用等波纹最佳逼近法设计滤波器,滤波器长度Ne=83。滤波器损耗函数和滤波器输出ye(nT)分别如图所示。
两种方法设计的滤波器都能有效地从噪声中提取信号,但等波纹最佳逼近法设计的滤波器阶数低得多,当然滤波实现的运算量以及时延也小得多,从图可以直观地看出时延差别。
在这里插入图片描述
在这里插入图片描述

六、思考题

(1)如果给定通带截止频率和阻带截止频率以及阻带最小衰减,如何用窗函数法设计线性相位低通滤波器?请写出设计步骤。
(2)如果要求用窗函数法设计带通滤波器,且给定通带上、下截止频率为 ω p l \omega_{pl} ωpl ω p u \omega_{pu} ωpu,阻带上、下截止频率为 ω s l \omega_{sl} ωsl ω s u \omega_{su} ωsu,试求理想带通滤波器的截止频率 ω c l \omega_{cl} ωcl ω c u \omega_{cu} ωcu
(3)解释为什么对同样的技术指标,用等波纹最佳逼近法设计的滤波器阶数低?
答:(1)用窗函数法设计线性相位低通滤波器的设计步骤教材中有详细的介绍。
(2)希望逼近的理想带通滤波器的截止频率 ω c l \omega_{cl} ωcl ω c u \omega_{cu} ωcu分别为:
在这里插入图片描述
(3)解释为什么对同样的技术指标,用等波纹最佳逼近法设计的滤波器阶数低?
①用窗函数法设计的滤波器,如果在阻带截止频率附近刚好满足,则离开阻带截止频率越远,阻带衰减富裕量越大,即存在资源浪费;
② 几种常用的典型窗函数的通带最大衰减和阻带最小衰减固定,且差别较大,又不能分别控制。所以设计的滤波器的通带最大衰减和阻带最小衰减通常都存在较大富裕。如本实验所选的blackman窗函数,其阻带最小衰减为74dB,而指标仅为60dB。
③ 用等波纹最佳逼近法设计的滤波器,其通带和阻带均为等波纹特性,且通带最大衰减和阻带最小衰减可以分别控制,所以其指标均匀分布,没有资源浪费,所以期阶数低得多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数字信号处理第五次试验:FIR数字滤波器设计与软件实现 的相关文章

  • MATLAB 在 MATLAB 7.10.0 学生版中似乎找不到 csaps()

    我有一些代码使用csaps Matlab的三次平滑样条拟合函数 http www mathworks com help toolbox curvefit csaps html我想将其提供给使用 MATLAB 7 10 0 R2010a 的学
  • 在 matlab/octave 中将数据集分成两个子集 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 将数据集分为两个子集 例如 训练 和 测试 其中 训练集包含 80 的数据 测试集包含剩余的 20 分裂的意思是生成一个长度等于的逻辑索引
  • MATLAB 中的抗锯齿线和标记

    您好 我在 MATLAB 中有一张图像 我希望这条线是平滑的 看看从 0 4 到 0 8 的线 这太可怕了 当在图中使用 LineSmoothing on 运算符时 我得到了这个 我在线条上做得很好 但它也使标记变得平滑 而且它们太可怕了
  • 将 3d 矩阵重塑为 2d 矩阵

    我有一个 3d 矩阵 n by m by t 在 MATLAB 中表示n by m一段时间内网格中的测量值 我想要一个二维矩阵 其中空间信息消失了 只有n m随着时间的推移测量t剩下 即 n m by t 我怎样才能做到这一点 你需要命令r
  • 将组合字符串和数字输入的元胞数组写入文本文件

    考虑以下 DateTime 2007 01 01 00 00 2007 02 01 00 00 2007 03 01 00 00 Headers Datetime Data Dat 100 200 300 Data DateTime num
  • 估算缺失数据,同时强制相关系数保持不变

    考虑以下 excel 数据集 m r 2 0 3 3 0 8 4 0 1 3 2 1 5 2 2 3 1 9 2 5 1 2 3 0 2 0 2 6 我的目标是使用以下条件填充缺失值 将上述两列之间的成对相关性表示为 R 大约 0 68 将
  • 同时重新排序和旋转图像的高效方法

    为了快速加载 jpeg 我为turbojpeg 实现了一个 mex wrapper 以有效地将 大 jpeg 读入 MATLAB 对于 4000x3000px 的图像 实际解码只需要大约 120 毫秒 而不是 5 毫秒 然而 像素顺序是 R
  • 为什么matlab的mldivide比dgels好这么多?

    Solve Ax b 真正的双 A是超定的 Mx2 其中 M gt gt 2 b是MX1 我运行了大量的数据mldivide 并且结果非常好 我用 MKL 写了一个 mex 例程LAPACKE dgels但它远没有那么好 结果有大量噪音 并
  • MATLAB 图中轴标签与轴之间的距离

    我正在使用 MATLAB 绘制一些数据 我想调整轴标签与轴本身之间的距离 但是 只需向标签的 位置 属性添加一点即可使标签移出图窗窗口 是否有 保证金 属性或类似的东西 在上图中 我想增加数字和标签 Time s 之间的距离 同时自动扩展数
  • 频域和空间域的汉明滤波器

    我想通过在 MATLAB 中应用汉明滤波器来消除一维信号中的吉布斯伪影 我所拥有的是k1这是频域中的信号 我可以通过应用 DFT 来获取时域信号k1 s1 ifft ifftshift k1 该信号具有吉布斯伪影 现在 我想通过 A 乘以汉
  • 非模态 questdlg.m 提示

    我的代码绘制了一个图 然后提示用户是否想使用不同的参数绘制另一个图 问题是 当 questdlg m 打开时 用户无法查看绘图的详细信息 这是代码 while strcmp Cont Yes 1 Some code modifying da
  • 为什么 mex 文件中的 OpenMP 仅产生 1 个线程?

    我是 OpenMP 新手 我有以下代码 使用配置了 MSVS2010 的 Matlab mex 可以正常编译 计算机有 8 个可用处理器 我也使用 matlabpool 检查过 include mex h include
  • 使用 R2010b 中的符号工具箱来求解和/或 linsolve

    我前几天问了一个问题here https stackoverflow com questions 20317038 matlab linear congruence solver that supports a non prime modu
  • 从筛查乳腺 X 光检查数字数据库 (DDSM) 获取数据

    我正在尝试以可读格式获取 DDSM 数据集 有谁有 DDSM heathusf 程序的工作版本 可以在 Linux 或 Windows 上正常运行吗 我知道 DDSM 的 jpeg 程序有一个适用于 linux 的工作版本 位于http w
  • 动态调整自定义刻度数

    Taking SO 的一个例子 https stackoverflow com a 7139485 97160 我想根据当前视图调整轴刻度 这是默认行为 除非设置自定义的刻度数 下图展示了由此产生的行为 左侧是默认行为 右侧是带有自定义刻度
  • 在 MATLAB 中模拟 C++ 模板

    我试图找出创建 C 模板或 Java 通用对象的替代方案的最佳方法 出于多种不同的原因 我过去曾多次想这样做 但现在我想做的是为几个相关的类创建 saveobj 和 loadobj 函数 我的想法是 我想要一组通用的例程来创建默认结构 然后
  • 命令 A(~A) 在 matlab 中的真正作用是什么

    我一直在寻找找到矩阵非零最小值的最有效方法 并在论坛上找到了这个 设数据为矩阵A A A nan minNonZero min A 这是非常短且高效的 至少在代码行数方面 但我不明白当我们这样做时会发生什么 我找不到任何关于此的文档 因为它
  • MATLAB 编译器与 MATLAB 编码器

    两者有什么区别 据我了解 MATLAB Compiler将MATLAB代码包装成 exe文件 这样就可以在不安装MATLAB的情况下使用它 并且只需要MCR 除此之外 MATLAB Builder NE 还可以用于生成与 Net 框架一起使
  • Matlab:条形图中缺少标签

    使用 Matlab 2012 和 2013 我发现设置XTickLabel on a bar图表最多只能使用 15 个柱 如果条形较多 则标签会丢失 如下所示 绘制 15 个条形图 N 15 x 1 N labels num2str x d
  • 在matlab中,如何读取python pickle文件?

    在 python 中 我生成了一个 p 数据文件 pickle dump allData open myallData p wb 现在我想在Matlab中读取myallData p 我的Matlab安装在Windows 8下 其中没有Pyt

随机推荐

  • 英雄联盟英雄信息【python爬虫】

    文章目录 下面开始正式教学 思路分析 开始工作 这里要注意一下 实现 以下是全部代码 相信大家都知道撸啊撸这个游戏了吧 小时候偷偷跑去网吧和朋友们开黑的日子 那是我们逝去的青春 学了爬虫课后终于按捺不住了 决定自己手动编写爬虫程序 就把自己
  • html中input中加图片,css怎么在input中插图片

    css在input中插图片的方法 首先在包含input的div中设置子元素 然后设置外层div定位为relative 接着设置span定位为absolute 最后给input添加margin left属性即可 本教程操作环境 windows
  • 深聊测开领域之:三种高性价比测试方法

    高性价比测试 1 引言 2 单元测试 2 1 单元测试引入 2 2 投入产出比 3 冒烟测试 3 1 冒烟测试引入 3 2 投入产出比 4 灰度测试 4 1 软件的依赖 4 2 引入灰度环境 4 3 投入产出比 5 总结 1 引言 最近也是
  • C语言基础入门48篇_40_结构体指针(结构体指针定义与基本数据结构指针类似,使用*、指针用->引用成员,变量用.引用成员、当使用结构体时建议用结构体指针作为参数)

    1 结构体指针的定义 结构体指针的定义与基本数据结构的指针类似 使用 符号即可 include
  • java 图形用户界面

    目录 Swing与AWT概述 Swing概述 组件显示 框架与窗体 创建框架对象 框架Frame类结构 框架对象的创建及常用方法 创建Swing窗体对象 Swing窗体JFrame 类结构 Swing 窗体对象的创建 窗体对象常用属性 常用
  • 数据结构——计算节点个数和二叉树高度(C语言版)

    摘自 数据结构 计算节点个数和二叉树高度 C语言版 作者 正弦定理 发布时间 2020 12 12 23 27 09 网址 https blog csdn net chinesekobe article details 111086664
  • 【期末复习】软件工程

    结构化分析 数据流图 er图 状态转换图 数据字典 结构化设计 流程图 盒图 pad图 IPO图 判定表 判定树 软件结构图 面向对象分析 用例图 活动图 包图 类图 顺序图 协作图 状态图 面向对象设计 三层架构 构件图 部署图 软件生存
  • eclipse查看jar包源码(反编译)

    国际惯例 百度翻帖 法一 jar包右键 gt 打开方式 gt 但是 我失败了 没有任何反应 猜测可能是没有安装相关软件 下面就是软件的安装 法二 利用JD DUI查看源码 需要安装JD GUI 地址 https www softpedia
  • SAM 模型真的是强悍到可以“分割一切”了吗?

    关注公众号 发现CV技术之美 上周 Meta AI发布了 Segment Anything Model SAM 第一个图像分割基础模型 很多计算机视觉从业者惊呼 这下CV真的不存在了 快跑 但是SAM 模型真的是强悍到可以 分割一切 了吗
  • c++基础十三(二维数组)

    二维数组 1 定义 2 初始化 3 赋值和输出 4 二维数组名 理解 二维数组是一维数组的一种延伸 假如将一维数组比喻成一条由点构成的线 而二维就是由点构成的面 1 定义 数据类型 数组名 行数 列数 例 int arr 2 4 表示 1
  • bcnf分解算法_BCNF的保持无损连接的分解

    BCNF 的分解是数据库范式的内容 分解的算法是这样的 将关系模式R分解为一个BCNF的基本步骤是 1 检查R中关系模式是否符合BCNF 若都符合输出即可 2 若R中有关系模式S不符合BCNF 则必有X gt A的闭包不包含S的全部属性 把
  • 挑战IT达人35岁身体健康和工作效率焦虑(中年危机):生理年龄并非决定因素,行为习惯才是关键!

    文章目录 引言 1 生理年龄 vs 实际年龄 2 体能下滑的真相 3 新陈代谢变慢与体重增加 4 坐姿引发的健康问题 5 生活方式塑造健康 结论 作者问与答 你现在身体的体能状况如何 你有身体焦虑吗 如何保持规律性运动 你有哪些健康生活的好
  • 【授权mysql某一个用户只读权限以及回滚】

    GRANT SELECT ON FPSSATURN TO dbmonopr02 GRANT SELECT ON 数据库名 TO 用户名 注意 中间有 单引号 你提供的SQL查询是在数据库FPSSATURN中的所有表上授予用户 dbmonop
  • struts property escape 输出 html 标签

    有时 在数据取出一大段文字要输出到页面上 如果有回车符号 在页面会显示不出来 要显示要用到escape参数 escape false
  • Qt边框border概述

    border概述 每个边框有3个方面 样式 或外观 颜色 以及其宽度 粗细 下面我们分别重点解释这三项 边框样式 border style 设置元素所有边框的样式 或者单独地为各边设置边框样式 它有10个属性值 分别是 none 无样式 h
  • 程序员必备:一款知识管理利器+效率工具

    回复 1024 送你一个特别推送 今天给大家推荐一款知识管理利器 其实也是一个不错的效率工具 我自己感觉确实很方便 也不错 所以才推荐给大家的 我比较喜欢这款工具的亮点是 它可以把我们自己记得笔记自动生成思维导图 这款工具是什么呢 它就叫
  • 无监督和有监督算法的区别

    无监督和有监督的理解方法有很多 主要可以从以下几方面来理解 1 无监督与监督学习的区别在于一个无教学值 一个有教学值 但是 个人认为他们的区别在于无监督学习一般是采用聚簇等算法来分类不同样本 而监督学习一般是利用教学值与实际输出值产生的误差
  • 机器学习——贝叶斯网络

    贝叶斯网络 贝叶斯网络 Bayesian Networks 也被称为信念网络 Belif Networks 或者因果网络 Causal Networks 是描述数据变量之间依赖关系的一种图形模式 是一种用来进行推理的模型 贝叶斯网络为人们提
  • JavaScript对象——数学对象

    说到JavaScript对象首先需要说一下内置对象 1 内置对象 内置对象 就是js语言自带的一些对象 这些对象供开发者使用 并提供了一些常用的或是最基本而必要的功能 属性或者方法 内置对象的优点 就是帮助开发者更快的进行开发 2 数学对象
  • 数字信号处理第五次试验:FIR数字滤波器设计与软件实现

    数字信号处理第五次试验 FIR数字滤波器设计与软件实现 前言 一 实验目的 二 实验原理与方法 三 实验环境 四 实验内容及步骤 五 实验结果截图 含分析 六 思考题 前言 为了帮助同学们完成痛苦的实验课程设计 本作者将其作出的实验结果及代