数字信号处理实验四(FIR数字滤波器设计)

  •  FIR数字滤波器设计(2学时)
    1. 要求:
      1. 设计一个最小阶次的低通FIR数字滤波器,性能指标为:通带0Hz~1500Hz,阻带截止频率2000Hz,通带波动不大于1%,阻带波动不大于1%,采样频率为8000Hz;
      2. 用一个仿真信号来验证滤波器的正确性(注意:要满足幅度要求和线性相位特性)。
    2. 目的:
      1. 利用学习到的数字信号处理知识解决实际问题;
      2. 了解线性相位滤波器的特殊结构;

实验报告:

一、实验内容

i.设计一个最小阶次的低通FIR数字滤波器,性能指标为:通带0Hz~1500Hz,阻带截止频率2000Hz,通带波动不大于1%,阻带波动不大于1%,采样频率为8000Hz;

ii.用一个仿真信号来验证滤波器的正确性(注意:要满足幅度要求和线性相位特性)。

二、实验目的

i.利用学习到的数字信号处理知识解决实际问题;

ii.了解线性相位滤波器的特殊结构;

三、涉及实验的相关情况介绍(包含使用软件或实验设备等情况)

Windows系统 Matlab 2022b

四、实验记录

1.原理基础

FIR(有限脉冲响应)滤波器是一种数字滤波器,其脉冲响应在有限的时间内衰减为零。FIR滤波器通过一系列加权系数的线性组合对输入信号进行卷积,以产生输出信号。对于低通FIR滤波器,它允许低频信号通过并抑制高频信号。

线性相位FIR滤波器具有对称或反对称的系数,这保证了滤波器在所有频率上具有相同的相位延迟,这对于避免信号失真非常重要。

设计FIR滤波器时,常用的方法有窗函数法、最小二乘法(如firls函数)和等波纹

法(如remez函数)。这些方法通过最小化通带和阻带内的误差来优化滤波器的性能。

2 实验流程

确定滤波器参数:

包括采样频率、通带和阻带截止频率、通带和阻带波动等。

设计FIR滤波器:

使用MATLAB的firls或remez函数设计满足性能要求的FIR滤波器。

生成仿真信号:

创建一个包含通带和阻带频率分量的仿真信号。

应用滤波器:

使用MATLAB的filter函数将设计的FIR滤波器应用于仿真信号。

分析滤波结果

绘制原始信号和滤波后信号的频谱图,检查通带和阻带的波动是否满足要求,并验证滤波器的线性相位特性。

3 源程序代码

%FIR 低通滤波器:1.设计低通滤波器并绘制图像 2.生成复合信号并绘制时域和频域 3.应用滤波器并绘制时域频域
%编辑人:贾雯爽
%目的:掌握模拟低通滤波器设计流程及影响参数
%最后更新时间:2024/06/05 %%1.设计低通滤波器并绘制图像
%%参数设置fs = 8000;        %设置采样频率 8k
Fp = 1500;       %通带截止频率
Fs = 2000;       %阻带截止频率
Rs = 0.01;       %阻带衰减
Rp = 0.01;       %通带波纹figure
[n, fo, mo, w]  = remezord([1500 2000], [1 0], [0.01 0.01], 8000);
b = remez(n, fo, mo, w);%[h w] = freqz(b, 1, 128);%plot(w/pi, abs(h));freqz(b, 1, 128);N=1024;                %采样点数      
n=0:N-1;          
t=0:1/fs:1-1/fs;          %时间序列
f=n*fs/N;               %频率序列%%2.生成复合信号并绘制时域和频域
Signal_Original=sin(2*pi*25*t);      %信号25Hz正弦波
Signal_Noise1=sin(2*pi*2000*t);      %噪声50Hz正弦波
Signal_Noise2=sin(2*pi*3000*t);      %噪声100Hz正弦波
Signal_Noise3=sin(2*pi*4500*t);      %噪声150Hz正弦波Mix_Signal=Signal_Original+Signal_Noise1+Signal_Noise2+Signal_Noise3;  %将信号Signal_Original和Signal_Original合成一个信号进行采样               figure
subplot(211);
plot(t, Mix_Signal);   %绘制信号Mix_Signal的波形                                                 
xlabel('时间');
ylabel('幅值');
title('原始信号');
grid on;f1 = Fs/N*(0:(N/2));
subplot(212);
y=fft(Mix_Signal, N);     %对信号 Mix_Signal做FFT 
P2 = abs(y/N);%取模值 根FFT公式
P1 = P2(1:N/2+1);%自变量只取前半部分
P1(2:end-1) = 2*P1(2:end-1);%单边频谱值为双边频谱值的两倍(除原点外,原点值不变)
plot(f1,P1);
xlabel('频率/Hz');
ylabel('振幅');
title('原始信号FFT');
grid on;%%3.应用滤波器并绘制时域频域% 绘制原始信号时域图
figure;  
subplot(3,1,1);  
plot(t, Mix_Signal);  
title('原始信号');  
xlabel('时间 (s)');  
ylabel('幅度');  
grid on;  %绘制滤波后时域图
Y =filter(b, 1, Mix_Signal);
subplot(3,1,2);  
plot(t, Y);  
title('滤波后的信号');  
xlabel('时间 (s)');  
ylabel('幅度');  
grid on;%绘制滤波后频域分布图
f1 = Fs/N*(0:(N/2));
subplot(313);
y=fft(Y, N); 
P2_2 = abs(y/N);%取模值 根FFT公式
P1_2 = P2_2(1:N/2+1);%自变量只取前半部分
P1_2(2:end-1) = 2*P1_2(2:end-1);%单边频谱值为双边频谱值的两倍(除原点外,原点值不变)
plot(f1,P1_2,"LineWidth",1) 
title("滤波后的频域分布图")
xlabel("f (Hz)")
ylabel("|P1_1(f)|")

4 实验结果

5实验结果分析

在分析实验结果时,滤波器的频率响应满足设计要求,特别是通带波动和阻带波动是否在给定的阈值内。同时,我们也验证了滤波后信号的波形或频谱如预期那样,通带内的信号得以保留,而阻带内的信号被抑制。此外,我们还验证了滤波器的线性相位特性,确保在所有频率上相位响应保持一致。

五、实验总结

通过本次实验,我们成功设计了一个满足性能指标的低通FIR数字滤波器,并通过仿真信号验证了其性能。实验结果表明,我们设计的滤波器能够有效地保留通带内的信号并抑制阻带内的信号,同时保持线性相位特性。这对于处理实际信号中的噪声和干扰具有重要意义。

然而,在实验过程中我们也发现了一些可以改进的地方。例如,滤波器的阶数对滤波性能有很大影响,我们需要通过尝试不同的阶数来找到最优解。此外,我们还可以尝试使用不同的设计方法或优化算法来进一步提高滤波器的性能。这些改进措施将为我们未来的实验和研究提供有价值的参考。


原创文章内容,学术不精恐有错漏之处,恳请各位批评指正。如有Matlab代码源文件或其他沟通需要,可通过邮箱(2642610289@qq.com)联系我,特情注意,学业繁忙难以及时回复,敬请理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/862813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见的反爬手段和解决思路(爬虫与反爬虫)

常见的反爬手段和解决思路(爬虫与反爬虫) 学习目标1 服务器反爬的原因2 服务器长反什么样的爬虫(1)十分低级的应届毕业生(2)十分低级的创业小公司(3)不小心写错了没人去停止的失控小…

安装Docker运行TensorFlow容器-《MCU嵌入式AI开发笔记》(第9集)搜索柔贝特三哥视频同步更新

安装Docker运行 TensorFlow 容器-《MCU嵌入式AI开发笔记》(第9集)。目标:在国产MCU上运行AI深度学习算法,实现识别、判断等功能。搜索柔贝特三哥,《MCU嵌入式AI开发笔记》视频同步更新。 安装Docker运行 TensorFlow 容…

[推荐]有安全一点的网贷大数据信用查询网站吗?

在互联网金融日益发展的今天,网贷大数据查询网站成为了许多人申贷前的必备工具。随着使用这些网站的人群越来越多,安全问题也逐渐浮出水面。最近,就有许多用户反馈自己的个人信息在网贷大数据查询网站上被泄露。为了解决这一问题,…

reactjs18 中使用路由技巧

react18 版本中,路由的用法发生了变化,react18 版本中,路由由 react-router-dom 包提供。与 react-router 包不同的是,react-router-dom 包提供了 createBrowserRouter 方法,该方法可以创建路由对象。总之,…

原码、反码、补码、移码的计算转换

文章目录 正数负数原码 & 反码反码 -> 补码原码 <-> 补码移码 <- Other 方法总结练习 正数 原码 和 反码 和 补码 都是一样的不会发生变化 因此&#xff0c;计算的时候先看第一位 符号位 &#xff0c;只要能发现是正数&#xff0c;三者都不变 移码 在补码基础…

飞凌嵌入式技术创新日(北京站)圆满落幕,共创嵌入式技术的美好未来

2024年6月25日下午&#xff0c;飞凌嵌入式技术创新日&#xff08;北京站&#xff09;在北京中关村皇冠假日酒店盛大举行。此次活动汇聚了近300位嵌入式技术领域的专家和企业代表&#xff0c;共享嵌入式技术的盛宴&#xff0c;共创嵌入式技术的美好未来&#xff01; 进入活动现场…

美国抗攻击服务器有哪些可靠的解决方案

美国抗攻击服务器在面对日益严重的网络安全威胁时&#xff0c;需要采取一系列可靠的解决方案来确保服务器的稳定运行和数据安全。以下是一些科普性质的抗攻击服务器解决方案&#xff1a; 一、流量清洗与过滤 流量清洗是美国抗攻击服务器应对DDoS攻击的重要措施。当检测到异常流…

DC-DC变换电路的研究与设计

通过使用MATLAB进行电路仿真以及通过制作实物进行验证&#xff0c;通过BUCK电路设计DC-DC来达到我们预期的效果&#xff0c;资料获取到咸&#x1f41f;&#xff1a;xy591215295250 \\\或者联系wechat 号&#xff1a;comprehensivable 设计要求&#xff1a;设计一个DC-DC 电源&a…

[Go Web] Kratos 使用的简单总结

文章目录 1.Kratos 简介2.传输协议3.日志4.错误处理5.配置管理6.wire 1.Kratos 简介 Kratos并不绑定于特定的基础设施&#xff0c;不限定于某种注册中心&#xff0c;或数据库ORM等&#xff0c;所以您可以十分轻松地将任意库集成进项目里&#xff0c;与Kratos共同运作。 API -&…

如何找合适的C++项目给自己的简历加分?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; C的工作多种多样&#x…

云原生之使用Docker部署RabbitMQ消息中间件

云原生之使用Docker部署RabbitMQ消息中间件 一、RabbitMQ介绍1.1 RabbitMQ简介1.2 RabbitMQ特点1.3 RabbitMQ使用场景 二、检查Docker环境2.1 检查Docker版本2.2 检查操作系统版本2.3 检查Docker状态 三、下载RabbitMQ镜像四、部署RabbitMQ服务4.1创建挂载目录4.2 运行RabbitMQ…

【Qt】QMessageBox 各种对话框的默认显示效果

1. 函数原型 void about(QWidget *parent, const QString &title, const QString &text)void aboutQt(QWidget *parent, const QString &title QString())QMessageBox::StandardButton critical(QWidget *parent, const QString &title, const QString &…

使用li标签实现数据列表效果(鼠标移动和选中时均有阴影效果)

文章目录 一、最终效果&#xff1a;二、完整页面代码 一、最终效果&#xff1a; 选中的数据有阴影效果&#xff0c;鼠标移动时也有阴影效果 二、完整页面代码 list-style-type: none是去掉无序标签前的点的样式 <template><div><div class"my-new-lis…

打造坚固的SSH防护网:端口敲门入门指南

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 打造坚固的SSH防护网&#xff1a;端口敲门入门指南 前言什么是端口敲门端口敲门的优点1. 增强安全…

React的Redux的状态管理

步骤 1.创建新项目 npx create-react-app react-redux 2.安装配套工具 npm i reduxjs/toolkit react-redux 3.启动项目 npm run start 4.在src目录下创建store文件夹 5.在store文件夹下创建modules文件夹 6.在store文件夹里创建index.js文件 7.在counterStore.js文件…

自动化代码规范检查--Sonarqube部署

参考文档 官方文档安装数据库 官方给出几种数据库: # 我们选用postgres, 拉取镜像 docker pull postgres:16.0# 创建存储卷 docker volume create postgresql-data# 运行容器 docker run -d --name sonarqube-postgres \-p 5432:5432 \-e POSTGRES_DB=sonar_DB \-e POSTGRE…

高性价比蓝牙耳机有哪些?2024超高性价比蓝牙耳机推荐

在2024移动互联网高速发展的时代&#xff0c;蓝牙耳机已成为我们生活中不可或缺的一部分。走在街头&#xff0c;低头看手机&#xff0c;滑动屏幕选歌&#xff0c;耳边传来清晰的旋律&#xff0c;这一幕已经成为现代生活的标配。但面对市场上琳琅满目的蓝牙耳机品牌和型号&#…

数据库同步最简单的方法

数据库同步到底有咩有简单的方法&#xff0c;有肯定是有的&#xff0c;就看你有咩有缘&#xff0c;看到这篇文章&#xff0c;你就是有缘人。众所周知&#xff0c;数据库同步向来都不是一件简单的事情&#xff0c;它很繁琐&#xff0c;很费精力&#xff0c;很考验经验&#xff0…

力扣 刷题 使用双指针进行数组去重分析

目录 双指针 一、26.删除有序数组中的重复项 题目 题解 二、80. 删除有序数组中的重复项 II 题目 题解 三、27. 移除元素 题目 题解 双指针 我们这里所说的双指针实际上并不是真正的指针&#xff0c;它只是两个变量&#xff0c;用于标识数组的索引等&#xff0c;因其…

vue3封装表格嵌套表单问题汇总

1.插槽嵌套多层数据ui组件怎么使用 思路&#xff1a;插槽具名【区分】后暴露传递&#xff0c;这个为神魔要区分&#xff0c;因为封装组件表格列表项也有插槽 步骤一&#xff1a;表单插槽暴露 <ElFormclass"form-search":model"formParams"ref"form…