基于matlab的带通、带阻滤波器设计实例
基于matlab窗函数的FIR带通滤波器设计

X l a b e l ( ’ f r e q u e n c y i n p i u n i t s ’ ) ; Y l a b d( 。 Ma g n i t u d e R e s p o n s e i n d b ’ ) ; s e t ( g c a , ’ X T i c k Mo d e ' , ' ma n u a l ' , ' X t i c k ’ , [ 0 , 0 . 2 , 0 . 3 5 , 0 . 6 5 , 0 . 8 , 1 1 ) s e t ( g c a , ’ Y T i e k Mo d e ’ , ’ ma J 1 u a l ’ , ’ Y t i c k ’ , [ - 6 0 , o ] ) 2 结 果 分 析
程序运算结果 : M =7 5 , R p= O . 0 0 2 8 , A s =7 5 , 运算结果 图如图 1 所 示。由图可知 , 7 5阶 布 莱 克 曼 窗 的最 小 阻带 衰 减 为 7 5 d b ( > 6 0 d b ) , 通带最大衰减 O . O 0 2 8 d b ( < < l d b ) , 符合设计题 目的技 术指标
口
:
:
限长 F I R( i f n i t e i m p u l s e r e s p o n s e ) 滤波 器 和 无 限 长 l i B( i n f i n i t e i m — p u l s e r e s p o n s e ) 滤波器 。F I R数字 滤波器幅频特性精 度 比 I I R低 , 且 滤波器所 需阶次 比较 高 , 但是 它拥有很好 的线性相位 特性 , 即不 同 昱 . 印 频率分量的信号经过 F I R滤波器后 其时间差 不变 。 MA T L A B是美 国 Ma t h Wo r k s 公司推 出 的一 套用 于工程计算 的可 视化高 性能语 言 与 软 件环境 , 是 数字信号处理技术 实现的重要手段 。本 文采用 M A T _ L A B窗 函数法实现 F I R数字滤波器的设计 。 至 1程序设计及运行结果 I 根 据研究任务 , 需设计 带通数字滤 波器 的性 能指标如 下 : 低通 阻带边界频 率 : w s l = 0 . 2 * p i , 高端阻带边界频率 : w s 2 = 0 . 8 p i ; 阻带最小 口 衰减: A s = 6 0 d b 。低端通带边 界频率 : w p l = 0 . 3 5 " p i , 高端 通带边界 频 率: w p 2 = 0 . 6 5 " p i ; 通带最大衰减 :R p = l a b 。 根 据窗 函数最小 阻带衰减 的特性 表[ 2 1 , 可采用布莱 克曼 窗提供 大于6 0 d B的衰减 。设 计程序如下 : p l o t ( w / p i , d b ) ; d ; %数字滤波器的参数
使用MATLAB设计FIR滤波器

使⽤MATLAB设计FIR滤波器1. 采⽤fir1函数设计,fir1函数可以设计低通、带通、⾼通、带阻等多种类型的具有严格线性相位特性的FIR滤波器。
语法形式:b = fir1(n, wn)b = fir1(n, wn, ‘ftype’)b = fir1(n, wn, ‘ftype’, window)b = fir1(n, wn, ‘ftype’, window, ‘noscale’)参数的意义及作⽤:b:返回的FIR滤波器单位脉冲响应,脉冲响应为偶对称,长度为n+1;n:滤波器的介数;wn:滤波器的截⽌频率,取值范围为0<wn<1,1对应信号采样频率⼀半。
如果wn是单个数值,且ftype参数为low,则表⽰设计截⽌频率为wn的低通滤波器,如果ftype参数为high,则表⽰设计截⽌频率为wn的⾼通滤波器;如果wn是有两个数组成的向量[wn1wn2],ftype为stop,则表⽰设计带阻滤波器,ftype为bandpass,则表⽰设计带通滤波器;如果wn是由多个数组成的向量,则根据ftype的值设计多个通带或阻带范围的滤波器,ftype为DC-1,表⽰设计的第⼀个频带为通带,ftype为DC-0,表⽰设计的第⼀个频带为阻带;window:指定使⽤的窗函数,默认为海明窗;noscale:指定是否归⼀化滤波器的幅度。
⽰例:N=41; %滤波器长度fs=2000; %采样频率%各种滤波器的特征频率fc_lpf=200;fc_hpf=200;fp_bandpass=[200 400];fc_stop=[200 400];%以采样频率的⼀半,对频率进⾏归⼀化处理wn_lpf=fc_lpf*2/fs;wn_hpf=fc_hpf*2/fs;wn_bandpass=fp_bandpass*2/fs;wn_stop=fc_stop*2/fs;%采⽤fir1函数设计FIR滤波器b_lpf=fir1(N-1,wn_lpf);b_hpf=fir1(N-1,wn_hpf,'high');b_bandpass=fir1(N-1,wn_bandpass,'bandpass');b_stop=fir1(N-1,wn_stop,'stop');%求滤波器的幅频响应m_lpf=20*log(abs(fft(b_lpf)))/log(10);m_hpf=20*log(abs(fft(b_hpf)))/log(10);m_bandpass=20*log(abs(fft(b_bandpass)))/log(10);m_stop=20*log(abs(fft(b_stop)))/log(10);%设置幅频响应的横坐标单位为Hzx_f=0:(fs/length(m_lpf)):fs/2;%绘制单位脉冲响应%绘制单位脉冲响应subplot(421);stem(b_lpf);xlabel('n');ylabel('h(n)');subplot(423);stem(b_hpf);xlabel('n');ylabel('h(n)');subplot(425);stem(b_bandpass);xlabel('n');ylabel('h(n)');subplot(427);stem(b_stop);xlabel('n');ylabel('h(n)');%绘制幅频响应曲线subplot(422);plot(x_f,m_lpf(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);subplot(424);plot(x_f,m_hpf(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);subplot(426);plot(x_f,m_bandpass(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);subplot(428);plot(x_f,m_stop(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);2. 采⽤fir2函数设计,函数算法是:⾸先根据要求的幅频响应向量形式进⾏插值,然后进⾏傅⾥叶变换得到理想滤波器的单位脉冲响应,最后利⽤窗函数对理想滤波器的单位脉冲响应激进型截断处理,由此得到FIR滤波器系数。
matlab滤波器设计(源代码)

某合成信号,表达式如下:f=10cos(2pi*30t)+cos(2pi*150t)+5cos(2pi*600t),请设计三个滤波器,分别提取出信号中各频率分量,并分别绘制出通过这三个滤波器后信号的时域波形和频谱这个信号的频率分量分别为30、150和600Hz,因此可分别设计一个低通、带通和高通的滤波器来提取。
以FIR滤波器为例,程序如下:clear;fs=2000;t=(1:1000)/fs;x=10*cos(2*pi*30*t)+cos(2*pi*150*t)+5*cos(2*pi*600*t);L=length(x);N=2^(nextpow2(L));Hw=fft(x,N);figure(1);subplot(2,1,1);plot(t,x);grid on;title('滤波前信号x');xlabel('时间/s');% 原始信号subplot(2,1,2);plot((0:N-1)*fs/L,abs(Hw));% 查看信号频谱grid on;title('滤波前信号频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');%% x_1=10*cos(2*pi*30*t)Ap=1;As=60;% 定义通带及阻带衰减dev=[(10^(Ap/20)-1)/(10^(Ap/20)+1),10^(-As/20)];% 计算偏移量mags=[1,0];% 低通fcuts=[60,100];% 边界频率[N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,fs);% 估算FIR滤波器阶数hh1=fir1(N,Wn,ftype,kaiser(N+1,beta));% FIR滤波器设计x_1=filter(hh1,1,x);% 滤波x_1(1:ceil(N/2))=[];% 群延时N/2,删除无用信号部分L=length(x_1);N=2^(nextpow2(L));Hw_1=fft(x_1,N);figure(2);subplot(2,1,1);plot(t(1:L),x_1);grid on;title('x_1=10*cos(2*pi*30*t)');xlabel('时间/s');subplot(2,1,2);plot((0:N-1)*fs/L,abs(Hw_1));% 查看信号频谱grid on;title('滤波后信号x_1频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');%% x_2=cos(2*pi*150*t)Ap=1;As=60;% 定义通带及阻带衰减dev=[10^(-As/20),(10^(Ap/20)-1)/(10^(Ap/20)+1),10^(-As/20)];% 计算偏移量mags=[0,1,0];% 带通fcuts=[80,120,180,220];% 边界频率[N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,fs);% 估算FIR滤波器阶数hh2=fir1(N,Wn,ftype,kaiser(N+1,beta));% FIR滤波器设计x_2=filter(hh2,1,x);% 滤波x_2(1:ceil(N/2))=[];% 群延时N/2,删除无用信号部分L=length(x_2);N=2^(nextpow2(L));Hw_2=fft(x_2,N);figure(3);subplot(2,1,1);plot(t(1:L),x_2);grid on;title('x_2=cos(2*pi*150*t)');xlabel('时间/s');subplot(2,1,2);plot((0:N-1)*fs/L,abs(Hw_2));% 查看信号频谱grid on;title('滤波后信号x_2频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');%% x_3=5*cos(2*pi*600*t)Ap=1;As=60;% 定义通带及阻带衰减dev=[10^(-As/20),(10^(Ap/20)-1)/(10^(Ap/20)+1)];% 计算偏移量mags=[0,1];% 高通fcuts=[500,550];% 边界频率[N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,fs);% 估算FIR滤波器阶数hh2=fir1(N,Wn,ftype,kaiser(N+1,beta));% FIR滤波器设计x_3=filter(hh2,1,x);% 滤波x_3(1:ceil(N/2))=[];% 群延时N/2,删除无用信号部分L=length(x_3);N=2^(nextpow2(L));Hw_3=fft(x_3,N);figure(4);subplot(2,1,1);plot(t(1:L),x_3);grid on;title('x_3=5*cos(2*pi*600*t)');xlabel('时间/s');subplot(2,1,2);plot((0:N-1)*fs/L,abs(Hw_3));% 查看信号频谱grid on;title('滤波后信号x_3频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');。
基于MATLAB的IIR滤波器的设计及应用

基于MATLAB的IIR滤波器的设计及应用IIR滤波器是一种无限脉冲响应滤波器,其设计和应用常常基于MATLAB进行。
在设计IIR滤波器时,首先需要确定滤波器的规格要求,例如带通或带阻滤波器、截止频率以及通带和阻带的最大衰减要求等。
设计IIR滤波器常用的方法有Butterworth、Chebyshev和Elliptic 等。
其中,Butterworth滤波器在通带区具有最平坦的幅频特性,而Chebyshev和Elliptic滤波器在通带和阻带区的幅频特性则更陡峭。
选择滤波器的类型取决于应用的具体需求。
通过MATLAB可以使用“butter”函数设计Butterworth滤波器,使用“cheby1”或“cheby2”函数设计Chebyshev滤波器,使用“ellip”函数设计Elliptic滤波器。
这些函数可以指定滤波器的类型、阶数、截止频率和衰减要求等参数。
设计得到的滤波器系数可以用于滤波器的实施。
IIR滤波器在信号处理领域有广泛的应用。
其中,带通滤波器用于从原始信号中提取感兴趣的频率成分,例如心电图中的QRS波群。
带阻滤波器则用于去除原始信号中的频率成分,例如去除电源线频率的干扰。
此外,IIR滤波器还可用于音频信号处理、图像处理等领域。
MATLAB提供了多种方法来应用IIR滤波器。
可以使用“filter”函数对信号进行滤波处理,其中需指定滤波器的系数和待滤波的信号。
另外,MATLAB还提供了“filtfilt”函数进行无相位滤波,即正向和反向滤波,从而减小滤波器的相应延迟。
总之,基于MATLAB的IIR滤波器设计和应用是信号处理领域的常见任务。
通过选择适当的滤波器类型和参数,可以实现对信号的滤波处理,满足各种应用的需求。
MATLAB提供了丰富的函数和工具,便于设计、实施和应用IIR滤波器。
基于matlab的FIR低通,高通,带通,带阻滤波器设计

北京师范大学课程设计报告课程名称: DSP设计名称:FIR 低通、高通带通和带阻数字滤波器的设计姓名:学号:班级:指导教师:起止日期:课程设计任务书学生班级: 学生姓名: 学号:设计名称: FIR 低通、高通带通和带阻数字滤波器的设计 起止日期: 指导教师:设计目标:1、采用Kaiser 窗设计一个低通FIR 滤波器 要求:采样频率为8kHz ;通带:0Hz~1kHz ,带内波动小于5%; 阻带:1.5kHz ,带内最小衰减:Rs=40dB 。
2、采用hamming 窗设计一个高通FIR 滤波器 要求:通带截至频率wp=rad π6.0, 阻带截止频率ws=rad π4.0,通带最大衰减dB p 25.0=α,阻带最小衰减dB s 50=α3、采用hamming 设计一个带通滤波器低端阻带截止频率 wls = 0.2*pi ;低端通带截止频率 wlp = 0.35*pi ; 高端通带截止频率 whp = 0.65*pi ; 高端阻带截止频率 whs = 0.8*pi ;4、采用Hamming 窗设计一个带阻FIR 滤波器 要求:通带:0.35pi~0.65pi ,带内最小衰减Rs=50dB ; 阻带:0~0.2pi 和0.8pi~pi ,带内最大衰减:Rp=1dB 。
FIR 低通、高通带通和带阻数字滤波器的设计 一、 设计目的和意义1、熟练掌握使用窗函数的设计滤波器的方法,学会设计低通、带通、带阻滤波器。
2、通过对滤波器的设计,了解几种窗函数的性能,学会针对不同的指标选择不同的窗函数。
二、 设计原理一般,设计线性相位FIR 数字滤波器采用窗函数法或频率抽样法,本设计采用窗函数法,分别采用海明窗和凯泽窗设计带通、带阻和低通。
如果所希望的滤波器的理想频率响应函数为)(jw d e H ,如理想的低通,由信号系统的知识知道,在时域系统的冲击响应h d (n)将是无限长的,如图2、图3所示。
H d (w)-w c w c图2图3若时域响应是无限长的,则不可能实现,因此需要对其截断,即设计一个FIR 滤波器频率响应∑-=-=10)()(N n jwn jwe n h e H 来逼近)(jw d e H ,即用一个窗函数w(n)来截断h d (n),如式3所示:)()()(n w n h n h d =(式1)。
基于Matlab 的模拟滤波器仿真设计

Simulation experiments were carried out through Matlab to verify the function of the algorithm . The algorithm can
第 21 期
2022 年 11 月
无线互联科技·研究创新
No. 21
November,2022
[5] 杨斌,闫忠鹏. 基于扰动观察法及电导增量法的光伏 MPPT 控制研究[ J] . 喀什大学学报,2021(6) :40-46.
[6] 程若发,许立斌,杨嘉静,等. 基于 Boost 变换器的改进电导增量法 MPPT 仿真[ J] . 实验室研究与探索,2021(4) :103-107,123.
用 Matlab 软件 [1] ,对低通滤波器进行仿真设计,根据频
率变换的方法设计出其他类型的滤波器 [2] 。
1 滤波器
1. 1 滤波器的类型
滤波器可以按照通过的频率范围进行分类,可以
细化分为低通、高通、带通和带阻等。 低通的含义是指
能够通过低频分量的同时抑制高频分量;高通和低通
reduce the power output waveform oscillation in the control process of MPPT, so that the photovoltaic system can
Guo Shichu, Yin Hangshuai, Liu Dongdong ∗
带阻滤波器matlab代码

带阻滤波器(Bandstop Filter)是一种滤波器,它的作用是在频域上阻止特定频率的信号通过,而允许其他频率的信号通过。
在MATLAB中,你可以使用`iirnotch`函数设计带阻滤波器。
下面是一个简单的例子,说明如何使用`iirnotch`函数设计一个带阻滤波器:
1. 设定滤波器的参数。
在这个例子中,我们将设计一个中心频率为1000Hz,半带宽为500Hz的带阻滤波器:
```matlab
% 设定参数
fs = 1000; % 采样频率,单位Hz
fpass = 1000; % 通带频率,单位Hz
fstop = 1500; % 阻带频率1,单位Hz
Bandwidth = 500; % 阻带宽度,单位Hz
```
2. 设计滤波器:
```matlab
% 设计带阻滤波器
[N, Wn] = iirnotch(fstop, fpass, Bandwidth, fs);
```
3. 绘制滤波器的频率响应:
```matlab
% 绘制频率响应
[H, f] = freqz(N, Wn, fs);
plot(f, 20 * log10(abs(H)));
title('Bandstop Filter Frequency Response');
xlabel('Frequency (Hz)');
ylabel('Amplitude (dB)');
```
这个例子中的代码将设计一个带阻滤波器,并绘制其频率响应。
你可以根据你的具体需求调整参数。
matlab设计模拟带通滤波器

matlab设计模拟带通滤波器简单记录下在matlab上如何设计出模拟的带通滤波器,包括:巴特沃斯滤波器、切⽐雪夫I型滤波器、切⽐雪夫II型滤波器、椭圆型滤波器。
代码如下:%设计带通滤波器%巴特沃斯、切⽐雪夫I型、切⽐雪夫II型、椭圆型滤波器clear all;%wp和ws分别是通带和阻带的频率(截⽌频率)。
当wp和ws为⼆元⽮量时,为带通或带阻滤波器,这时求出的Wn也是⼆元⽮量;当wp和ws 为⼀元⽮量时,为低通或⾼通滤波器:当wp<ws时为低通滤波器,当wp>ws时为⾼通滤波器。
%wp和ws为⼆元⽮量wp=[0.1*2*pi 0.15*2*pi]; %设置通带频率ws=[0.05*2*pi 0.2*2*pi]; %设置阻带频率Rp=1; %设置通带波纹系数Rs=20; %设置阻带波纹系数%巴特沃斯滤波器设计[N,Wn]=buttord(wp,ws,Rp,Rs,'s'); %求巴特沃斯滤波器阶数,输出参数N代表满⾜设计要求的滤波器的最⼩阶数,Wn是等效低通滤波器的截⽌频率%⽆论是⾼通、带通和带阻滤波器,在设计中最终都等效于⼀个截⽌频率为Wn的低通滤波器(我现在也不是很理解为啥是这样,毕竟我也是刚接触滤波器)fprintf('巴特沃斯滤波器 N= %4d\n',N); %显⽰滤波器阶数[bb,ab]=butter(N,Wn,'s'); %求巴特沃斯滤波器系数,即求传输函数的分⼦和分母的系数向量W=0:0.01:2; %设置模拟频率[Hb,wb]=freqs(bb,ab,W); %求巴特沃斯滤波器频率响应plot(wb/pi,20*log10(abs(Hb)),'b'); %作图hold on%切⽐雪夫I型滤波器设计[N,Wn]=cheb1ord(wp,ws,Rp,Rs,'s'); %求切⽐雪夫I型滤波器阶数fprintf('切⽐雪夫I型滤波器 N= %4d\n',N); %显⽰滤波器阶数[bc1,ac1]=cheby1(N,Rp,Wn,'s'); %求切⽐雪夫I型滤波器系数,即求传输函数的分⼦和分母的系数向量[Hc1,wc1]=freqs(bc1,ac1,W); %求切⽐雪夫I型滤波器频率响应plot(wc1/pi,20*log10(abs(Hc1)),'k'); %作图%切⽐雪夫II型滤波器设计[N,Wn]=cheb2ord(wp,ws,Rp,Rs,'s'); %求切⽐雪夫II型滤波器阶数fprintf('切⽐雪夫II型滤波器 N= %4d\n',N);%显⽰滤波器阶数[bc2,ac2]=cheby2(N,Rs,Wn,'s'); %求切⽐雪夫II型滤波器系数,即求传输函数的分⼦和分母的系数向量[Hc2,wc2]=freqs(bc2,ac2,W); %求切⽐雪夫II型滤波器频率响应plot(wc2/pi,20*log10(abs(Hc2)),'r'); %作图%椭圆型滤波器设计[N,Wn]=ellipord(wp,ws,Rp,Rs,'s'); %求椭圆型滤波器阶数fprintf('椭圆型滤波器 N= %4d\n',N); %显⽰滤波器阶数[be,ae]=ellip(N,Rp,Rs,Wn,'s'); %求椭圆型滤波器系数,即求传输函数的分⼦和分母的系数向量[He,we]=freqs(be,ae,W); %求椭圆型滤波器频率响应%作图plot(we/pi,20*log10(abs(He)),'g');axis([0 max(we/pi) -30 2]);legend('巴特沃斯滤波器','切⽐雪夫I型滤波器','切⽐雪夫II型滤波器','椭圆型滤波器');xlabel('⾓频率{\omega}/{\pi}');ylabel('幅值/dB');line([0 max(we/pi)],[-20 -20],'color','k','linestyle','--');%在画布上画线line([0 max(we/pi)],[-1 -1],'color','k','linestyle','--');line([0.2 0.2],[-30 2],'color','k','linestyle','--');line([0.3 0.3],[-30 2],'color','k','linestyle','--');运⾏结果如下:巴特沃斯滤波器 N= 4切⽐雪夫I型滤波器 N= 3切⽐雪夫II型滤波器 N= 3椭圆型滤波器 N= 2注:1、求各种滤波器的传输函数的分⼦和分母向量系数的函数,例如:[bc1,ac1]=cheby1(N,Rp,Wn,'s'); %求切⽐雪夫I型滤波器系数,即求传输函数的分⼦和分母的系数向量这⾥的函数cheby1()中的参数为cheby1(N,Rp,Wn,'type','s');其中注意’type’可为⾼通:'high’或带阻:‘stop’,如果不填的话,默认是低通或者带通,⾄于是低通还是带通,主要看你前⾯的wp和ws是⼆元⽮量还是⼀元⽮量:⼆元⽮量对应带通,⼀元⽮量对应低通。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于matlab的带通、带阻滤波器设计实例
以下两个滤波器都是切比雪夫I型数字滤波器,不是巴特沃尔滤波器,请使用者注意!
1.带通滤波器
function y=bandp(x,f1,f3,fsl,fsh,rp,rs,Fs)
%带通滤波
%使用注意事项:通带或阻带的截止频率与采样率的选取范围是不能超过采样率的一半%即,f1,f3,fs1,fsh,的值小于 Fs/2
%x:需要带通滤波的序列
% f 1:通带左边界
% f 3:通带右边界
% fs1:衰减截止左边界
% fsh:衰变截止右边界
%rp:边带区衰减DB数设置
%rs:截止区衰减DB数设置
%FS:序列x的采样频率
% f1=300;f3=500;%通带截止频率上下限
% fsl=200;fsh=600;%阻带截止频率上下限
% rp=0.1;rs=30;%通带边衰减DB值和阻带边衰减DB值
% Fs=2000;%采样率
%
wp1=2*pi*f1/Fs;
wp3=2*pi*f3/Fs;
wsl=2*pi*fsl/Fs;
wsh=2*pi*fsh/Fs;
wp=[wp1 wp3];
ws=[wsl wsh];
%
% 设计切比雪夫滤波器;
[n,wn]=cheb1ord(ws/pi,wp/pi,rp,rs);
[bz1,az1]=cheby1(n,rp,wp/pi);
%查看设计滤波器的曲线
[h,w]=freqz(bz1,az1,256,Fs);
h=20*log10(abs(h));
figure;plot(w,h);title('所设计滤波器的通带曲线');grid on;
y=filter(bz1,az1,x);
end
带通滤波器使用例子
%--------------
%带通滤波器测试程序
fs=2000;
t=(1:fs)/fs;
ff1=100;
ff2=400;
ff3=700;
x=sin(2*pi*ff1*t)+sin(2*pi*ff2*t)+sin(2*pi*ff3*t);
figure;
subplot(211);plot(t,x);
subplot(212);hua_fft(x,fs,1);
% y=filter(bz1,az1,x);
y=bandp(x,300,500,200,600,0.1,30,fs);
figure;
subplot(211);plot(t,y);
subplot(212);hua_fft(y,fs,1);
%调用到的hua_fft()函数代码如下
function hua_fft(y,fs,style,varargin)
%当style=1,画幅值谱;当style=2,画功率谱;当style=其他的,那么花幅值谱和功率谱%当style=1时,还可以多输入2个可选参数
%可选输入参数是用来控制需要查看的频率段的
%第一个是需要查看的频率段起点
%第二个是需要查看的频率段的终点
%其他style不具备可选输入参数,如果输入发生位置错误
nfft= 2^nextpow2(length(y));%找出大于y的个数的最大的2的指数值(自动进算最佳FFT 步长nfft)
%nfft=1024;%人为设置FFT的步长nfft
y=y-mean(y);%去除直流分量
y_ft=fft(y,nfft);%对y信号进行DFT,得到频率的幅值分布
y_p=y_ft.*conj(y_ft)/nfft;%conj()函数是求y函数的共轭复数,实数的共轭复数是他本身。
y_f=fs*(0:nfft/2-1)/nfft;�T变换后对应的频率的序列
% y_p=y_ft.*conj(y_ft)/nfft;%conj()函数是求y函数的共轭复数,实数的共轭复数是他本身。
if style==1
if nargin==3
plot(y_f,2*abs(y_ft(1:nfft/2))/length(y));%matlab的帮助里画FFT的方法 %ylabel('幅值');xlabel('频率');title('信号幅值谱');
%plot(y_f,abs(y_ft(1:nfft/2)));%论坛上画FFT的方法
else
f1=varargin{1};
fn=varargin{2};
ni=round(f1 * nfft/fs+1);
na=round(fn * nfft/fs+1);
plot(y_f(ni:na),abs(y_ft(ni:na)*2/nfft));
end
elseif style==2
plot(y_f,y_p(1:nfft/2));
%ylabel('功率谱密度');xlabel('频率');title('信号功率谱');
else
subplot(211);plot(y_f,2*abs(y_ft(1:nfft/2))/length(y));
ylabel('幅值');xlabel('频率');title('信号幅值谱');
subplot(212);plot(y_f,y_p(1:nfft/2));
ylabel('功率谱密度');xlabel('频率');title('信号功率谱');
end
end
运行结果如下图,第一幅是滤波前测试信号的时频图,第二幅是滤波器的滤波曲线图,第三幅是经滤波后的测试信号时频图。
2.带阻滤波器
function y=bands(x,f1,f3,fsl,fsh,rp,rs,Fs)
%带阻滤波
%使用注意事项:通带或阻带的截止频率与采样率的选取范围是不能超过采样率的一半%即,f1,f3,fs1,fsh,的值小于 Fs/2
%x:需要带通滤波的序列
% f 1:通带左边界
% f 3:通带右边界
% fs1:衰减截止左边界
% fsh:衰变截止右边界
%rp:边带区衰减DB数设置
%rs:截止区衰减DB数设置
%FS:序列x的采样频率
% f1=300;f3=500;%通带截止频率上下限
% fsl=200;fsh=600;%阻带截止频率上下限
% rp=0.1;rs=30;%通带边衰减DB值和阻带边衰减DB值
% Fs=2000;%采样率
%
wp1=2*pi*f1/Fs;
wp3=2*pi*f3/Fs;
wsl=2*pi*fsl/Fs;
wsh=2*pi*fsh/Fs;
wp=[wp1 wp3];
ws=[wsl wsh];
%
% 设计切比雪夫滤波器;
[n,wn]=cheb1ord(ws/pi,wp/pi,rp,rs);
[bz1,az1]=cheby1(n,rp,wp/pi,'stop');
%查看设计滤波器的曲线
[h,w]=freqz(bz1,az1,256,Fs);
h=20*log10(abs(h));
figure;plot(w,h);title('所设计滤波器的通带曲线');grid on;
y=filter(bz1,az1,x);
end
使用例子
%带阻滤波器测试
fs=1000;
t=(1:fs)/fs;
y=sin(2*pi*100*t)+sin(2*pi*150*t)+sin(2*pi*200*t);
figure;hua_fft(y,fs,1);
z=bands(y,110,190,140,160,0.1,30,fs);
figure;hua_fft(z,fs,1);
运行结果如下图,第一幅是滤波前测试信号的频谱图,第二幅是滤波器的滤波曲线图,第三幅是经滤波后的测试信号频谱图。