数字滤波器设计——Matlab实现数字信号处理<1>

目录

一.实验内容

二.代码分析

1.信号产生部分

2.利用傅立叶级数展开的方法,自由生成所需的x(t)

3.通过选择不同的采样间隔T(分别选T>或<1/2fc),从x(t)获得相应的x(n)

3.对获得的不同x(n)分别作傅立叶变换,分析其频率响应特性(给出幅频与相频特性曲线)

4.利用巴特沃思滤波器设计数字滤波器

<1>低通滤波器

<2>高通滤波器

<3>绘图

5.利用窗函数设计法或频率采样法设计数字滤波器

<1>高通滤波器

<2>低通滤波器

<3>绘图

三.实验结果


一.实验内容

1.利用傅立叶级数展开的方法,自由生成所需的x(t);

2.通过选择不同的采样间隔T(分别选T>或<1/2fc),从x(t)获得相应的x(n)(作出x(n)图形);

3.对获得的不同x(n)分别作傅立叶变换,分析其频率响应特性(给出幅频与相频特性曲线);

4.利用巴特沃思、切比雪夫或椭圆滤波器设计数字滤波器(滤波特性自定),要求通过改变滤波器参数或特性(低通、高通、带通或带阻)设计至少两种数字滤波器,分析所设计滤波器(画出频率特性曲线),并对上述给出的不同x(n)分别进行滤波(画出滤波结果),然后加以讨论;

5.利用窗函数设计法或频率采样法设计数字滤波器(滤波特性自定),要求通过改变滤波器参数或特性(低通、高通、带通或带阻等)设计至少两种数字滤波器,分析所设计滤波器(画出频率特性曲线),并对上述给出的不同x(n)分别进行滤波(画出滤波结果),然后加以讨论。

二.代码分析

1.信号产生部分
function [signal]=signal_xt(t_length,T,f,A,u)
%%  函数描述
%   功能:利用傅立叶级数展开的方法,自由生成所需的x(t)(不含直流量);
%   输入参数:产生序列的长度t_length;采样间隔T;f(t)的基波频率f;傅立叶级数展开的各项幅值和相位。故最高频率为fc=length(A)*f
%   使用举例:signal=signal_xt(3,0.01,1,[1,2,3,4],[0,1,0,1])
%%  t,y初始化并计算
t=0:T:t_length-T;
t_num=t_length/T;
signal=zeros(1,t_num);
max=0;
min=0;
for i=1:t_num  
    for k=1:length(A)
        %   计算函数值
        signal(i)= signal(i) + A(k)*cos(2*pi*k*t(i)*f+u(k));
        %   最大最小值记录
        if max<signal(i)
            max=signal(i);
        end
        if min>signal(i)
            min=signal(i);
        end
    end
end
%%  结果展示
figure;
subplot(2,1,1);
plot(t,signal);
%   x,y轴范围限制及标题
axis([0-0.1,t_length+0.1,min-0.5,max+0.5])
title('x(t)'); 
xlabel('t');
ylabel('x(t)'); 
grid on

subplot(2,1,2);
stem(t,signal,".");
%   x,y轴范围限制及标题
axis([0-0.1,t_length+0.1,min-0.5,max+0.5])
title('x(t)'); 
xlabel('t');
ylabel('x(t)'); 
grid on

function [signal]=signal_xt(t_length,T,f,A,u)
%%  函数描述
%   功能:利用傅立叶级数展开的方法,自由生成所需的x(t)(不含直流量);
%   输入参数:产生序列的长度t_length;采样间隔T;f(t)的基波频率f;傅立叶级数展开的各项幅值和相位。故最高频率为fc=length(A)*f
%   使用举例:signal=signal_xt(3,0.01,1,[1,2,3,4],[0,1,0,1])

2.利用傅立叶级数展开的方法,自由生成所需的x(t)
%%  利用傅立叶级数展开的方法,自由生成所需的x(t),即signal_origin;
t_length=1;     %生成长度
f=1;            %基础频率
A=[3,1,1,3];    %各项幅度
u=[-1,0,1,0];   %各项相位
signal_origin=signal_xt(t_length,0.01,f,A,u);
fc=f*length(A);
3.通过选择不同的采样间隔T(分别选T>或<1/2fc),从x(t)获得相应的x(n)
%%  通过选择不同的采样间隔T(分别选T>或<1/2fc),从x(t)获得相应的x(n);
T=[1/(2*fc+1),1/fc,1/(4*fc)];
N=zeros(1,length(T));
for i=1:length(T)
    N(i)=1/T(i);
end
x1=signal_xt(t_length,T(1),f,A,u);
x2=signal_xt(t_length,T(2),f,A,u);
x3=signal_xt(t_length,T(3),f,A,u);

选取频率分别为2fc+1、fc、4fc

3.对获得的不同x(n)分别作傅立叶变换,分析其频率响应特性(给出幅频与相频特性曲线)
%%  对获得的不同x(n)分别作傅立叶变换,分析其频率响应特性(给出幅频与相频特性曲线);
X1=fft(x1,N(1));
X2=fft(x2,N(2));
X3=fft(x3,N(3));

%   绘制
figure;
%   幅值绘制
subplot(2,3,1);
stem(0:N(1)-1,abs(X1),'.');
title("X1");
grid on

subplot(2,3,2);
stem(0:N(2)-1,abs(X2),'.');
title("X2");
grid on

subplot(2,3,3);
stem(0:N(3)-1,abs(X3),'.');
title("X3");
grid on

%   相位绘制
subplot(2,3,4);
stem(0:N(1)-1,angle(X1),'.');
title("X1");
grid on

subplot(2,3,5);
stem(0:N(2)-1,angle(X2),'.');
title("X2");
grid on

subplot(2,3,6);
stem(0:N(3)-1,angle(X3),'.');
title("X3");
grid on

使用 fft 函数进行 DFT,注意结果频率响应是复数,使用abs函数得其幅值,angle函数得其相位。

4.利用巴特沃思滤波器设计数字滤波器
<1>低通滤波器
%   设置低通滤波器参数
wp=0.35;    %通带边界频率
ws=0.7;     %阻带截止频率
Rp=3;
As=15;
%   计算滤波器阶数N和3dB截止频率wc
[Nc,wc]=buttord(wp,ws,Rp,As,'s');
%   计算滤波器系统函数分子分母多项式系数
[Bz,Az]=butter(Nc,wc,'low');
wk=64;
Hk=freqz(Bz,Az,wk);

参数设置及函数使用参考课本《数字信号处理》

<2>高通滤波器
%   设置高通滤波器参数
wp=0.75;
ws=0.5;
rp=3;
rs=15;
[Nc,wc]=buttord(wp,ws,rp,rs,'s');
[Bz,Az]=butter(Nc,wc,'high');
wk=64; 
Hk=freqz(Bz,Az,wk);
<3>绘图
%   绘图
figure;
subplot(2,3,1);
stem(0:1/63:1,abs(Hk),'.');
xlabel('频率');
ylabel('滤波器幅度/dB');
grid on

%   滤波后结果
m1=filter(Bz,Az,x1);
m2=filter(Bz,Az,x2);
m3=filter(Bz,Az,x3);
Y1=fft(m1,N(1));
Y2=fft(m2,N(2));
Y3=fft(m3,N(3));
%   绘图
subplot(2,3,4);
stem(0:N(1)-1,abs(Y1),'.');
title('滤波后Y频率特性');
grid on
subplot(2,3,5);
stem(0:N(2)-1,abs(Y2),'.');
title('滤波后Y频率特性');
grid on
subplot(2,3,6);
stem(0:N(3)-1,abs(Y3),'.');
title('滤波后Y频率特性');
grid on
5.利用窗函数设计法或频率采样法设计数字滤波器
<1>高通滤波器
%   设置高通滤波器参数
wp=pi/2;
ws=pi/4;
Bt=wp-ws;   %过渡带宽度
N0=ceil(6.2*pi/Bt); %汉宁窗计算所需h(n)长度N0
Nn=N0+mod(N0+1,2);  %确保h(n)长度为奇数
wc=(wp+ws)/2/pi;    %理想高通滤波器通带截止频率
hn=fir1(Nn-1,wc,'HIGH',hanning(Nn));
%   高通滤波器频率响应
Hk=fft(hn,length(hn));
<2>低通滤波器
%   设置低通滤波器参数
wp=pi/4;
ws=pi/2;
Bt=abs(wp-ws);   %过渡带宽度
N0=ceil(6.2*pi/Bt); %汉宁窗计算所需h(n)长度N0
Nn=N0+mod(N0+1,2);  %确保h(n)长度为奇数
wc=(wp+ws)/2/pi;    %理想高通滤波器通带截止频率
hn=fir1(Nn-1,wc,'LOW',hanning(Nn));
%   低通滤波器频率响应
Hk=fft(hn,length(hn));
<3>绘图
%   滤波结果
y1=conv(hn,x1);
y2=conv(hn,x2);
y3=conv(hn,x3);
n1=length(y1);
n2=length(y2);
n3=length(y3);
Y1=fft(y1,n1);
Y2=fft(y2,n2);
Y3=fft(y3,n3);
%   绘图
figure;
subplot(2,3,1);
stem(0:Nn-1,hn,'.');
xlabel('n');
ylabel('h(n)');
grid on
subplot(2,3,2);
stem(0:Nn-1,abs(Hk),'.');
xlabel('k');
ylabel('H(k)');
grid on
subplot(2,3,4);
stem(0:n1-1,abs(Y1),'.');
title('滤波后Y频率特性');
grid on
subplot(2,3,5);
stem(0:n2-1,abs(Y2),'.');
title('滤波后Y频率特性');
grid on
subplot(2,3,6);
stem(0:n3-1,abs(Y3),'.');
title('滤波后Y频率特性');
grid on

三.实验结果

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeedCode刷题---二分查找类问题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、二分查找 题目链接&#xff1a;二分查找 题目描述 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一…

刚入行的嵌入式新人是否值得坚持嵌入式方向?

今日话题&#xff0c;刚入行的嵌入式新人是否值得坚持嵌入式方向&#xff1f;如果你正在学习C语言或者嵌入式方向&#xff0c;坚持下去是一个明智的选择。嵌入式行业涉及硬件&#xff0c;技术更新相对较慢&#xff0c;但这为你积累宝贵的经验提供了机会&#xff0c;与纯软件相比…

JVM日常故障排查小结

前置知识 jstack简介 jstack是JVM自带的工具&#xff0c;用于追踪Java进程线程id的堆栈信息、锁信息&#xff0c;或者打印core file&#xff0c;远程调试Java堆栈信息等。 而我们常用的指令则是下面这条: # 打印对应java进程的堆栈信息 jstack [ option ] pid option常见选…

基于JAVA的天然气工程运维系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统角色分类2.2 核心功能2.2.1 流程 12.2.2 流程 22.3 各角色功能2.3.1 系统管理员功能2.3.2 用户服务部功能2.3.3 分公司&#xff08;施工单位&#xff09;功能2.3.3.1 技术员角色功能2.3.3.2 材料员角色功能 2.3.4 安…

SpringBoot之三层架构的详细解析

3. 分层解耦 3.1 三层架构 3.1.1 介绍 在我们进行程序设计以及程序开发时&#xff0c;尽可能让每一个接口、类、方法的职责更单一些&#xff08;单一职责原则&#xff09;。 单一职责原则&#xff1a;一个类或一个方法&#xff0c;就只做一件事情&#xff0c;只管一块功能。…

测试用例的修改更新

测试用例的修改更新是指测试过程中由于用户需求的改变&#xff0c;或者测试过程中发现有新的需求产生&#xff0c;使得测试用例需要进行修改。修改更新测试用例不仅是一种测试技术&#xff0c;更是一种质量保证的方法。但修改和更新测试用例的技术要点在于&#xff1a; 1、执行…

【数据结构】八大排序之直接插入排序算法

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 一.直接插入排序简介及思路 直接插入排序(Straight Insertion Sort)是一种简单直观的插入排序算法. 它的基本操作是: 将一个数据插入到已经排好的有序表中,从而得到一个新的,数…

Spring 原理(一)

Spring 原理 它是一个全面的、企业应用开发一站式的解决方案&#xff0c;贯穿表现层、业务层、持久层。但是 Spring仍然可以和其他的框架无缝整合。 Spring 特点 轻量级控制反转面向切面容器框架集合 Spring 核心组件 Spring 常用模块 Spring 主要包 Spring 常用注解 bean …

【期末复习向】走进循环神经网络系列-RNN,LSTM,GRU

RNN 上篇文章复习了最简单的神经网络MLP&#xff0c;它是由输入层&#xff0c;隐藏层和输出层构成的。当然这也是所有神经网络最基本的架构。但是MLP过于简单&#xff0c;存在的问题之一就是无法考虑全局的信息&#xff0c;也就是前后输入的信息&#xff0c;这对于解决时间序列…

【操作系统】实验四 进程调度

实验名称&#xff1a; 实验四 进程调度 实验目的&#xff1a; 1. 加深理解有关进程控制块、进程队列的概念 2. 体会和了解优先级和时间片轮转调度算法的具体实施办法 实验内容&#xff1a; 1. 设计进程控制块 PCB 表结构&#xff08;与实验一的结构相同&#xff09;&#xff…

【倒立摆】仿真、起摆

建模 在此示例中&#xff0c;我们将考虑带有推车的倒立摆系统的二维版本&#xff0c;其中摆锤位于 被限制在垂直平面内移动&#xff0c;如下图所示。对于该系统&#xff0c;控制输入是水平移动小车的力 F F F&#xff0c;输出是摆的角位置KaTeX parse error: Undefined contro…

计算机网络:数据链路层(广域网、PPP协议、HDLC协议)

今天又学会了一个知识&#xff0c;加油&#xff01; 目录 一、广域网 二、PPP协议 1、PPP协议应满足的要求 2、PPP协议无需满足的要求 3、PPP协议的三个组成部分 4、PPP协议的状态图 5、PPP协议的帧格式 三、HDLC协议 1、HDLC的站&#xff08;主站、从站、复合站&…

使用Kaptcha实现的验证码功能

目录 一.需求 二.验证码功能实现步骤 验证码 引入kaptcha依赖 完成application.yml配置文件 浏览器显示验证码 前端页面 登录页面 验证成功页面 后端 此验证码功能是以SpringBoot框架下基于kaptcha插件来实现的。 一.需求 1.页面生成验证码 2.输入验证码&#xff…

关于react native项目中使用react-native-wechat-lib@3.0.4

关于react native项目中使用react-native-wechat-lib3.0.4 插件官网安装依赖包&#xff08;Android和iOS下载插件完成后记得更新依赖&#xff0c;&#xff09;Android中配置1.在项目文件夹下面创建文件夹wxapi&#xff08;如上图&#xff09;2.在文件MainApplication.java中如下…

使用数组模拟栈的相关操作【栈1.1】

public class ArrayStackDemo {public static void main(String[] args) {ArrayStack arrayStack new ArrayStack(4);Scanner sc new Scanner(System.in);boolean loop true;char key ;while (loop) {System.out.println("栈操作菜单项");System.out.println(&q…

教育机构小程序管理系统的全方位优化

随着互联网的快速发展&#xff0c;线上教育也日益受到人们的关注和欢迎。为了满足广大学生和家长的需求&#xff0c;教育机构纷纷开发出自己的小程序管理系统。本文将详细介绍如何使用乔拓云平台&#xff0c;一键开发出自己的教育机构小程序管理系统。 1.进入乔拓云后台 首先&…

【SpringBoot】参数校验及异常处理

实现注册功能时经常遇到参数校验的问题。 参数校验 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>参数前添加注解&#xff0c;并指定校验规…

60V恒流IC SL8443B内置功率MOS 兼容PWM 降压LED恒流驱动芯片

以下是根据您的要求&#xff0c;按照知识经验类文章的特征所写的一篇关于“60V恒流IC 内置5V功率MOS 兼容PWM 降压LED恒流驱动芯片 SL8443B”的文章&#xff1a; 一、概述 SL8443B是一款60V恒流IC&#xff0c;内置5V功率MOS&#xff0c;兼容PWM降压LED恒流驱动芯片。它广泛应用…

Baumer工业相机堡盟工业相机如何通过BGAPISDK获取相机的各种信息如SN/ID等等(C++)

Baumer工业相机堡盟工业相机如何通过BGAPISDK获取相机的各种信息如SN/ID等等&#xff08;C&#xff09; Baumer工业相机Baumer工业相机通过SDK获取相关生产信息的技术背景通过SDK获取相机信息的代码分析获取Baumer工业相机相关信息Baumer工业相机相关参数信息获取的测试 Baumer…

neuq-acm预备队训练week 9 P8604 [蓝桥杯 2013 国 C] 危险系数

题目背景 抗日战争时期&#xff0c;冀中平原的地道战曾发挥重要作用。 题目限制 题目描述 地道的多个站点间有通道连接&#xff0c;形成了庞大的网络。但也有隐患&#xff0c;当敌人发现了某个站点后&#xff0c;其它站点间可能因此会失去联系。 我们来定义一个危险系数 DF…
最新文章