IIR滤波器设计(调用MATLAB IIR函数来实现)
% IIR滤波器设计
% 目的:设计一个采样频率为1000Hz、通带截止频率为50Hz、阻带截止频率为100Hz的低通滤波器,并要求通带最大衰减为1dB,阻带最小衰减为60dB。 clc;clear;close all; % . 产生信号(频率为10Hz和100Hz的正弦波叠加)
Fs=; % 采样频率1000Hz
t=:/Fs:;
s10=sin(*pi*t); % 产生10Hz正弦波
s100=sin(*pi*t); % 产生100Hz正弦波
s=s10+s100; % 信号叠加 figure(); % 画图
subplot(,,);plot(s);grid;
title('原始信号'); % . FFT分析信号频谱
len = ;
y=fft(s,len); % 对信号做len点FFT变换
f=Fs*(:len/ - )/len; subplot(,,);plot(f,abs(y(:len/)));grid;
title('原始信号频谱')
xlabel('Hz');ylabel('幅值'); % . IIR滤波器设计
N=; % 阶数
Fp=; % 通带截止频率50Hz
Fc=; % 阻带截止频率100Hz
Rp=; % 通带波纹最大衰减为1dB
Rs=; % 阻带衰减为60dB % 3.0 计算最小滤波器阶数
na=sqrt(^(0.1*Rp)-);
ea=sqrt(^(0.1*Rs)-);
N=ceil(log10(ea/na)/log10(Fc/Fp)); % 3.1 巴特沃斯滤波器
Wn=Fp*/Fs;
[Bb Ba]=butter(N,Wn,'low'); % 调用MATLAB butter函数快速设计滤波器
[BH,BW]=freqz(Bb,Ba); % 绘制频率响应曲线
Bf=filter(Bb,Ba,s); % 进行低通滤波
By=fft(Bf,len); % 对信号f1做len点FFT变换 figure(); % 画图
subplot(,,);plot(t,s10,'blue',t,Bf,'red');grid;
legend('10Hz原始信号','巴特沃斯滤波器滤波后');
subplot(,,);plot(f,abs(By(:len/)));grid;
title('巴特沃斯低通滤波后信号频谱');
xlabel('Hz');ylabel('幅值'); % 3.2 切比雪夫I型滤波器
[C1b C1a]=cheby1(N,Rp,Wn,'low'); % 调用MATLAB cheby1函数快速设计低通滤波器
[C1H,C1W]=freqz(C1b,C1a); % 绘制频率响应曲线
C1f=filter(C1b,C1a,s); % 进行低通滤波
C1y=fft(C1f,len); % 对滤波后信号做len点FFT变换 figure(); % 画图
subplot(,,);plot(t,s10,'blue',t,C1f,'red');grid;
legend('10Hz原始信号','切比雪夫I型滤波器滤波后');
subplot(,,);plot(f,abs(C1y(:len/)));grid;
title('切比雪夫I型滤波后信号频谱');
xlabel('Hz');ylabel('幅值'); % 3.3 切比雪夫II型滤波器
[C2b C2a]=cheby2(N,Rs,Wn,'low'); % 调用MATLAB cheby2函数快速设计低通滤波器
[C2H,C2W]=freqz(C2b,C2a); % 绘制频率响应曲线
C2f=filter(C2b,C2a,s); % 进行低通滤波
C2y=fft(C2f,len); % 对滤波后信号做len点FFT变换 figure(); % 画图
subplot(,,);plot(t,s10,'blue',t,C2f,'red');grid;
legend('10Hz原始信号','切比雪夫II型滤波器滤波后');
subplot(,,);plot(f,abs(C2y(:len/)));grid;
title('切比雪夫II型滤波后信号频谱');
xlabel('Hz');ylabel('幅值'); % 3.4 椭圆滤波器
[Eb Ea]=ellip(N,Rp,Rs,Wn,'low'); % 调用MATLAB ellip函数快速设计低通滤波器
[EH,EW]=freqz(Eb,Ea); % 绘制频率响应曲线
Ef=filter(Eb,Ea,s); % 进行低通滤波
Ey=fft(Ef,len); % 对滤波后信号做len点FFT变换 figure(); % 画图
subplot(,,);plot(t,s10,'blue',t,Ef,'red');grid;
legend('10Hz原始信号','椭圆滤波器滤波后');
subplot(,,);plot(f,abs(Ey(:len/)));grid;
title('椭圆滤波后信号频谱');
xlabel('Hz');ylabel('幅值'); % 3.5 yulewalk滤波器
fyule=[ Wn Fc*/Fs ]; % 在此进行的是简单设计,实际需要多次仿真取最佳值
myule=[ ]; % 在此进行的是简单设计,实际需要多次仿真取最佳值
[Yb Ya]=yulewalk(N,fyule,myule); % 调用MATLAB yulewalk函数快速设计低通滤波器
[YH,YW]=freqz(Yb,Ya); % 绘制频率响应曲线
Yf=filter(Yb,Ya,s); % 进行低通滤波
Yy=fft(Yf,len); % 对滤波后信号做len点FFT变换 figure(); % 画图
subplot(,,);plot(t,s10,'blue',t,Yf,'red');grid;
legend('10Hz原始信号','yulewalk滤波器滤波后');
subplot(,,);plot(f,abs(Yy(:len/)));grid;
title('yulewalk滤波后信号频谱');
xlabel('Hz');ylabel('幅值'); % . 各个滤波器的幅频响应对比分析
A1 = BW*Fs/(*pi);
A2 = C1W*Fs/(*pi);
A3 = C2W*Fs/(*pi);
A4 = EW*Fs/(*pi);
A5 = YW*Fs/(*pi); figure(); % 画图
subplot(,,);plot(A1,abs(BH),A2,abs(C1H),A3,abs(C2H),A4,abs(EH),A5,abs(YH));grid;
xlabel('频率/Hz');
ylabel('频率响应幅度');
legend('butter','cheby1','cheby2','ellip','yulewalk');
转载请注明文章来源 – http://blog.csdn.net/v_hyx ,请勿用于任何商业用途
IIR滤波器设计(调用MATLAB IIR函数来实现)的更多相关文章
- MyEclipse调用Matlab打包函数
本文部分内容参考了http://www.360doc.com/content/15/1103/16/1180274_510463048.shtml 一.检查Java环境 对于已经装上JAVA环境的计算 ...
- 手把手教系列之IIR滤波器设计
[导读]:在嵌入式系统中经常需要采集模拟信号,采集模拟信号的信号链中难免引入干扰,那么如何滤除干扰呢?今天就来个一步一步描述如何设计部署一个IIR滤波器到你的系统. 何为IIR滤波器? 无限冲激响应( ...
- VS2015调用matlab Plot函数
最近经常采用Matlab仿真,然后C语言实现,最后需要将计算结果使用Qt的qwt或者matlab中的plot函数绘图. 因此想借用matlab的plot函数接口,使用VS2015来编写信号处理代码,最 ...
- 信号、系统与滤波器设计(matlab)
0. 基本概念 AWG:Additive White(zero-mean) Gaussian,可加白噪声: AWGN:Additive White(zero-mean) Gaussian Noise ...
- (转)JAVA 调用matlab
本文仅用于学习. 原文地址链接:http://blog.csdn.net/wannshan/article/details/5907877 前段时间摸索了java调用matlab东西,不说学的有多深, ...
- C++调用matlab编程
C++调用Matlab,实在是不得已的方法.原文链接: http://kylen314.blog.com/2012/12/11/matlab_for_cplusplus/ 这是个很善良的博客,只出现 ...
- 数字信号处理实验(五)——IIR滤波器的设计
一.使用自编函数设计IIR滤波器 1.冲激响应法 (1)注给出的数字滤波器指标先化成模拟指标 (2)设计出模拟滤波器: (3)使用冲激响应法转化成数字滤波器 (4)一个demo clear all; ...
- IIR滤波器软件实现(Matlab+C++)
使用C++来写一个IIR滤波器 我们首先要在MATLAB中设计一个IIR滤波器,并生成一个头文件,这个头文件中反映了IIR滤波器的频率响应特性 理论支持 IIR滤波叫做递归滤波器,它是一种具有反馈的滤 ...
- Matlab滤波器设计(转)
滤波器设计是一个创建满足指定滤波要求的滤波器参数的过程.滤波器的实现包括滤波器结构的选择和滤波器参数的计算.只有完成了滤波器的设计和实现,才能最终完成数据的滤波. 滤波器设计的目标是实现数据序列的频率 ...
随机推荐
- Spark调优秘诀
1.诊断内存的消耗 在Spark应用程序中,内存都消耗在哪了? 1.每个Java对象都有一个包含该对象元数据的对象头,其大小是16个Byte.由于在写代码时候,可能会出现这种情况:对象头比对象本身占有 ...
- 整数(质因子)分解(Pollard rho大整数分解)
整数分解,又称质因子分解.在数学中,整数分解问题是指:给出一个正整数,将其写成几个素数的乘积的形式. (每个合数都可以写成几个质数相乘的形式,这几个质数就都叫做这个合数的质因数.) .试除法(适用于范 ...
- PAT 1128 N Queens Puzzle[对角线判断]
1128 N Queens Puzzle(20 分) The "eight queens puzzle" is the problem of placing eight chess ...
- P4099 [HEOI2013]SAO(树形dp)
P4099 [HEOI2013]SAO 我们设$f[u][k]$表示以拓扑序编号为$k$的点$u$,以$u$为根的子树中的元素所组成的序列方案数 蓝后我们在找一个以$v$为根的子树. 我们的任务就是在 ...
- 20145307陈俊达《网络对抗》Exp4 恶意代码分析
20145307陈俊达<网络对抗>Exp4 恶意代码分析 基础问题回答 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪 ...
- When should I use OWIN Katana?
When should I use OWIN Katana? 解答1 In asp.net WebApi v2, the OWIN pipeline becomes the default. It i ...
- 【转载】hibernate缓存机制
一级缓存(session级别) 我们来看看hibernate提供的一级缓存 //此时会发出一条sql,将所有学生全部查询出来,并放到session的一级缓存当中.当再次查询学生信息时,会首先去缓存中看 ...
- SDN前瞻 该来的来了!SDN 软件定义网络
SDDC:Software Defined Data Center 软件定义数据中心,全数据中心软件化. 在我们接触SDN概念之前,服务器虚拟化,软件虚拟化技术已经是非常成熟了.如果网络能够被虚拟化, ...
- 最全android Demo
1.BeautifulRefreshLayout-漂亮的美食下拉刷新 https://github.com/android-cjj/BeautifulRefreshLayout/tree/Beauti ...
- thinkphp3.2笔记(5)创建项目 创建模型 实例化
一 创建项目 1 拷贝框架 目录 public thinkphp .htaccess index.php [application不用拷贝,会自动生成] 2 public 下面创 ...