窗函数性能分析——MATLAB

一、实验目的

1、掌握Matlah由各种窗数序列的生成方法;
2、掌握窗函数序列频率特性的计算与画图方法;
3、掌握窗函数的相关参数对窗函数频域性能的影响;
4、了解混合窗函数的定义、生成方法和频域性能特点;
5、对各种常用的窗函数序列的时域及频域性能特点有整体的认识;
6、了解窗函数序列实现频率响应的线性相位特性需要满足的基本条件。

二、实验原理

1、常用窗函数序列

加窗处理是信号处理中常用的一种处理方式,在数字滤波器的设计、信号的离散谱分析中都有很广泛的应用。常用的窗函数序列主要有:

(1)矩形窗函数序列

矩形窗序列是最基本形式的一种窗函数序列,其时域表示如
公式所示:
w(n)=R_N (n)={█(1    0≤N-1@1            其他n)┤

(2)汉宁窗函数序列

汉宁窗序列也称为升余弦窗,在矩形窗序列的基础上,增加一个余弦项,其时域表示如公式所示
w(n)=1/2[1-cos⁡[(2nΠ/(N-1))  lg⁡〖R_N 〗 (n)]]

(3)海明窗函数序列

海明窗序列和汉宁窗序列类似,只是窗函数的两部分的系数有所不同,其时域表示如公式所示:
w(n)=[0.54-0.46 cos⁡〖(2Πn/(N-1))  lg⁡〖R_N (n)〗 〗 ]

(4)布莱克曼窗序列

布莱克曼窗序列进一步增加一个余弦项,其时域表示如公式所示:
w(n)=[0.42-0.5cos⁡(2Πn/(N-1))-0.08 cos⁡〖(4Πn/(N-1))  lg⁡〖R_N (n)〗 〗 ]

(5)凯瑟窗序列

凯瑟窗序列和前面4种类型的窗函数序列在原理上有所不同,
其建立在第一类修正的零阶贝塞尔函数基础上,其时域表示如公式所示:
在这里插入图片描述
公式中,I0(g)是第一类修正的零阶贝塞尔函数,β为调整参数,用以调整窗函数序列的性能
在 Matlab中,各种窗函数序列的生成均有相对应的函数,对应上述的各窗函数序列的分别为;
(1)矩形窗序列:boxcar()
(2)汉宁窗序列:hanning()
(3)海明窗序列:hamming()(汉明窗)
(4)布莱克曼窗序列:blackman()
(5)凯瑟窗序列:kaiser()
这几个窗函数的调用格式比较简单,其中,前4个函数只要给出窗函数的长度N即可,如:

Window=hamming(N);

该函数产生一个长度为N的海明窗序列,结果保存在输出向量Window中。
kaiser()函数在使用中不仅要给出窗序列的长度N,还需给出窗函数的参数β,即其调用格式为:

Window=kaiser(N,belta);

其中,输入参数belta即为窗函数的参数β,一般在4~8之间取值,用以调整凯瑟窗序列的性能。

2、窗函数的频域特性

将各种窗函数的时域表示式进行离散时间傅里叶变换,即可得到窗函数的频域表示。各种窗函数的幅频特性一般都具有下图的形式:
在这里插入图片描述
衡量窗函数的性能,通常通过两个指标:

(1)主瓣宽度。

即窗函数幅频特性曲线第一至第二过零点之间的频带宽度。在滤波器设计中,主瓣越宽,则滤波器过渡带越宽;在频谱分析中,主瓣越宽,则频率分辨力越差。所以在实际应用中,总是希望窗函数有尽量窄的主瓣宽度。

(2)副瓣衰减。

一般用第一副瓣相对于主瓣的衰减进行表示。在滤波器设计中,副瓣衰减越大,则滤波器幅频响应在通带之内的平稳程度和阻带衰减特性就越好;在频谱分析中,副瓣衰减越大,则频谱泄漏效应就会减弱。所以在实际应用中,总是希望窗函数有尽量大的副瓣衰减。窗函数的主全宽度和副瓣衰减性能之间往往是相互矛盾的,提高了一个性能,另外一个性能就会有所下降。
在Matlab中,窗函数序列频率特性的计算可由 freqz)函数来实现。以下以汉宁窗序列为例,给出窗函数序列的频率特性计算及画图的仿真程序实现方法,如下:

N=10;%设置窗函数的宽度成汉宁窗
wn=hanning(N);%生成频率特性
[H,m] = freqz(wn, [1],1024,'whole');%计算窗函数的算幅度特性
mag = abs(H);
db =20*log10((mag"+eps)/max(mag));%将幅度特性转换为对数形式算相位特性
pha=angle(H);
subplot(121)%以下代码为绘制幅度特性曲线plot(m/pi,db); axis([01 -100 0]);
xlabel('w/pi');ylabel('dB');title('幅度特性); grid on;
subplot(122)%以下代码为绘制相位特性曲线plot(m/pi,pha); axis([0 1 -pi pi]);
xlabel ('w/pi');ylabel('rad');title('相位特性'); grid on

各种窗函数序列的相位特性一般都是线性的(或分段线性),即为频率的线性函数,也称为线性相位特性。但是,要保证窗函数的线性相位特性,需要保证窗函数序列是中心对称的,即需要满足:
w(n)=±w(N-1-n)

3、混合窗函数序列简介

混合窗函数序列是目前在信号处理、滤波器设计等领域经常提及的一种窗函数序列,其幅度特性较常用的窗函数序列更为理想一些。滤合窗承数序列的定义如下所示:
w(n)={█(α-β cos⁡(2Πn/(N-1))+γsin⁡〖(Πn/(N-1))     0≤n≤(N-1)/2〗@0.54-0.46cos⁡(2Πn/(N-1))                   (N+1)/2≤n≤N-1)┤
公式中,窗函数的前半部分为矩形窗利叠加,而后半部分则是标准的海明窗的后一半。α、β和γ是可调整系数,会影响窗函数的主那宽度和副瓣衰减, 这三个参数在实际应用中可根据实际需求进行调整,但需满足α+β+γ=1。由混称的,因而其相合窗函数的定义也可看出混合窗函数是非中心对位特性是非线性的,从本质上讲是一种以牺牲相位特性来提升幅度特性的窗函数序列

三、实验步骤、数据记录及处理

本实验以Matlab信号处理工具箱所提供的窗函数为基础,结合频率特性分析,对常用窗函数的时域和频域特性进行分析和对验内容和实验步比,并对相关的结论与参数进行验证。具体的步骤如下:
1、设置窗函数的长度N=15,分别生成矩形窗、汉宁窗、海明窗和布莱克曼窗序列,绘制各窗函数序列的时域图形,观察各种窗函数的时域性能。
2、利用频率响应计算的函数或傅立叶变换函数,分别计算实验内容1中所生成的各窗函数序列的频率特性,绘制幅频和相频时对各种窗函数响应曲线,验证理论课程中的相关性能指标,同的频域性能进行对比。
3、设置窗函数的长度N=33,重复上述过程, 分析窗序列的长度对窗函数频域性能的影响。
4、生成N=33,β分别为B=4,5,6,7,8的凯瑟窗,分别计算并绘制幅频特性曲线,分析调整参数β对窗函数频域性能的影响。
5、设置窗序列长度N=31,生成汉宁窗。设置N=31,a=0.42,,生成混合窗序列。画出这两个窗序列的时域图β=0.4,和y=0.18形,并进行对比。
6、计算并绘制5中生成的两个窗函数的幅度特性和相位特性,对两种窗函数的幅度性能进行对比。同时,观察两个窗函数的相位特性,验证窗函数取得线性相位特性需满足的条件。
实验程序:

clc;clear all;
N=15;%设置窗函数序列长度;
%矩形窗序列
window1=boxcar(N);%生成窗函数序列;
[H1,m1]=freqz(window1,[1],1024,'whole');%计算函数的频率特性
mag1=abs(H1);%计算函数的幅度特性;
pha1=angle(H1);%计算函数的相位特性;
db1=20*log10((mag1+eps)/max(mag1));%将幅度特性转换为对数形式
%绘制矩形窗频域波形
figure('name','矩形窗频域波形');
subplot(311);stem(window1);grid on;xlabel('n');ylabel('x(n)');title('N=15矩形窗函数时域图形');
subplot(312);plot(m1/(2*pi),db1);grid on;xlabel('w/(2*pi)');ylabel('ab');title('N=15矩形窗幅频响应');
subplot(313);plot(m1/(2*pi),pha1);grid on;xlabel('w/(2*pi)');ylabel('rad');title('N=15矩形窗相频响应');

%汉宁窗序列
window2=hanning(N);%生成窗函数序列;
[H2,m2]=freqz(window2,[1],1024,'whole');%计算函数的频率特性
mag2=abs(H2);%计算函数的幅度特性;
pha2=angle(H2);%计算函数的相位特性;
db2=20*log10((mag2+eps)/max(mag2));%将幅度特性转换为对数形式
%绘制汉宁窗频域波形
figure('name','汉宁窗频域波形');
subplot(311);stem(window2);grid on;xlabel('n');ylabel('x(n)');title('N=15汉宁窗函数时域图形');
subplot(312);plot(m2/(2*pi),db1);grid on;xlabel('w/(2*pi)');ylabel('ab');title('N=15汉宁窗幅频响应');
subplot(313);plot(m2/(2*pi),pha1);grid on;xlabel('w/(2*pi)');ylabel('rad');title('N=15汉宁窗相频响应');

%汉明窗序列
window3=hamming(N);%生成窗函数序列;
[H3,m3]=freqz(window3,[1],1024,'whole');%计算函数的频率特性
mag3=abs(H3);%计算函数的幅度特性;
pha3=angle(H3);%计算函数的相位特性;
db3=20*log10((mag3+eps)/max(mag3));%将幅度特性转换为对数形式
%绘制汉明窗频域波形
figure('name','汉明窗频域波形');
subplot(311);stem(window3);grid on;xlabel('n');ylabel('x(n)');title('N=15汉明窗函数时域图形');
subplot(312);plot(m3/(2*pi),db1);grid on;xlabel('w/(2*pi)');ylabel('ab');title('N=15汉明窗幅频响应');
subplot(313);plot(m3/(2*pi),pha1);grid on;xlabel('w/(2*pi)');ylabel('rad');title('N=15汉明窗相频响应');

%布莱克曼窗序列
window4=blackman(N);%生成窗函数序列;
[H4,m4]=freqz(window4,[1],1024,'whole');%计算函数的频率特性
mag4=abs(H4);%计算函数的幅度特性;
pha4=angle(H4);%计算函数的相位特性;
db4=20*log10((mag4+eps)/max(mag4));%将幅度特性转换为对数形式
%绘制布莱克曼频域波形
figure('name','布莱克曼频域波形');
subplot(311);stem(window4);grid on;xlabel('n');ylabel('x(n)');title('N=15布莱克曼窗函数时域图形');
subplot(312);plot(m4/(2*pi),db1);grid on;xlabel('w/(2*pi)');ylabel('ab');title('N=15布莱克曼窗幅频响应');
subplot(313);plot(m4/(2*pi),pha1);grid on;xlabel('w/(2*pi)');ylabel('rad');title('N=15布莱克曼窗相频响应');

在这里插入图片描述

clc;clear all;
N=33;%设置窗函数序列长度;
%矩形窗函数
window1=boxcar(N);%生成窗函数序列;
[H1,m1]=freqz(window1,[1],1024,'whole');%计算函数的频率特性
mag1=abs(H1);%计算函数的幅度特性;
pha1=angle(H1);%计算函数的相位特性;
db1=20*log10((mag1+eps)/max(mag1));%将幅度特性转换为对数形式
%绘制矩形窗频域波形
figure('name','矩形窗频域波形');
subplot(311);stem(window1);grid on;xlabel('n');ylabel('x(n)');title('N=33矩形窗时域图形');
subplot(312);plot(m1/(2*pi),pha1);grid on;xlabel('w/2pi');ylabel('ψ(w)');title('N=33矩形窗的相频特性');
subplot(313);plot(m1/(2*pi),db1);grid on;xlabel('w/2pi');ylabel('db');title('N=33矩形窗的幅度特性');

%汉宁窗函数
window2=hanning(N);%生成窗函数序列;
[H2,m2]=freqz(window2,[1],1024,'whole');%计算函数的频率特性
mag2=abs(H2);%计算函数的幅度特性;
pha2=angle(H2);%计算函数的相位特性;
db2=20*log10((mag2+eps)/max(mag2));%将幅度特性转换为对数形式
%绘制汉宁窗频域波形
figure('name','汉宁窗频域波形');
subplot(311);stem(window2);grid on;xlabel('n');ylabel('x(n)');title('N=33的汉宁窗函数时域图形');
subplot(312);plot(m2/(2*pi),pha2);grid on;xlabel('w/2pi');ylabel('ψ(w)');title('N=33的汉宁窗函数的相频特性');
subplot(313);plot(m2/(2*pi),db2);grid on;xlabel('w/2pi');ylabel('db');title('N=33的汉宁窗函数的幅度特性');

%汉明窗函数
window3=hamming(N);%生成窗函数序列;
[H3,m3]=freqz(window3,[1],1024,'whole');%计算函数的频率特性
mag3=abs(H3);%计算函数的幅度特性;
pha3=angle(H3);%计算函数的相位特性;
db3=20*log10((mag3+eps)/max(mag3));%将幅度特性转换为对数形式
%绘制汉明窗频域波形
figure('name','汉明窗频域波形');
subplot(311);stem(window3);grid on;xlabel('n');ylabel('x(n)');title('N=33的汉明窗函数时域图形');
subplot(312);plot(m3/(2*pi),pha3);grid on;xlabel('w/2pi');ylabel('ψ(w)');title('N=33的汉明窗函数的相频特性');
subplot(313);plot(m3/(2*pi),db3);grid on;xlabel('w/2pi');ylabel('db');title('N=33的汉明窗函数的幅度特性');

%布莱克曼窗函数
window4=blackman(N);%生成窗函数序列;
[H4,m4]=freqz(window4,[1],1024,'whole');%计算函数的频率特性
mag4=abs(H4);%计算函数的幅度特性;
pha4=angle(H4);%计算函数的相位特性;
db4=20*log10((mag4+eps)/max(mag4));%将幅度特性转换为对数形式
%绘制布莱克曼频域波形
figure('name','布莱克曼频域波形');
subplot(311);stem(window4);grid on;xlabel('n');ylabel('x(n)');title('N=33的布莱克曼窗函数时域图形');
subplot(312);plot(m4/(2*pi),pha4);grid on;xlabel('w/2pi');ylabel('ψ(w)');title('N=33的布莱克曼窗函数的相频特性');
subplot(313);plot(m4/(2*pi),db4);grid on;xlabel('w/2pi');ylabel('db');title('N=33的布莱克曼窗函数的幅度特性');

在这里插入图片描述

clc;clear all;
N=33;%设置窗函数序列长度;
belta1=4;
window1=kaiser(N,belta1);%凯瑟窗函数
[H1,m1]=freqz(window1,[1],1024,'whole');%计算函数的频率特性
mag1=abs(H1);%计算函数的幅度特性;
pha1=angle(H1);%计算函数的相位特性;
db1=20*log10((mag1+eps)/max(mag1));%将幅度特性转换为对数形式
figure('name','=4时凯瑟窗函数频域波形');
subplot(311);stem(window1);grid on;xlabel('n');ylabel('x(n)');title('β=4的凯瑟窗函数时域图形');
subplot(312);plot(m1/(2*pi),pha1);grid on;xlabel('w/2pi');ylabel('ψ(w)');title('β=4的凯瑟窗函数的相频特性');
subplot(313);plot(m1/(2*pi),db1);grid on;xlabel('w/2pi');ylabel('db');title('β=4的凯瑟窗函数的幅度特性');

belta2=5;
window2=kaiser(N,belta2);%凯瑟窗函数
[H2,m2]=freqz(window2,[1],1024,'whole');%计算函数的频率特性
mag2=abs(H2);%计算函数的幅度特性;
pha2=angle(H2);%计算函数的相位特性;
db2=20*log10((mag2+eps)/max(mag2));%将幅度特性转换为对数形式
figure('name','=5时凯瑟窗函数频域波形');
subplot(311);stem(window2);grid on;xlabel('n');ylabel('x(n)');title('β=5的凯瑟窗函数时域图形');
subplot(312);plot(m2/(2*pi),pha2);grid on;xlabel('w/2pi');ylabel('ψ(w)');title('β=5的凯瑟窗函数的相频特性');
subplot(313);plot(m2/(2*pi),db2);grid on;xlabel('w/2pi');ylabel('db');title('β=5的凯瑟窗函数的幅度特性');

belta3=6;
window3=kaiser(N,belta3);%凯瑟窗函数
[H3,m3]=freqz(window3,[1],1024,'whole');%计算函数的频率特性
mag3=abs(H3);%计算函数的幅度特性;
pha3=angle(H3);%计算函数的相位特性;
db3=20*log10((mag3+eps)/max(mag3));%将幅度特性转换为对数形式
figure('name','=6时凯瑟窗函数频域波形');
subplot(311);stem(window3);grid on;xlabel('n');ylabel('x(n)');title('β=6的凯瑟窗函数时域图形');
subplot(312);plot(m3/(2*pi),pha3);grid on;xlabel('w/2pi');ylabel('ψ(w)');title('β=6的凯瑟窗函数的相频特性');
subplot(313);plot(m3/(2*pi),db3);grid on;xlabel('w/2pi');ylabel('db');title('β=6的凯瑟窗函数的幅度特性');

belta4=7;
window4=kaiser(N,belta4);%凯瑟窗函数
[H4,m4]=freqz(window4,[1],1024,'whole');%计算函数的频率特性
mag4=abs(H4);%计算函数的幅度特性;
pha4=angle(H4);%计算函数的相位特性;
db4=20*log10((mag4+eps)/max(mag4));%将幅度特性转换为对数形式
figure('name','=7时凯瑟窗函数频域波形');
subplot(311);stem(window4);grid on;xlabel('n');ylabel('x(n)');title('β=7的凯瑟窗函数时域图形');
subplot(312);plot(m4/(2*pi),pha4);grid on;xlabel('w/2pi');ylabel('ψ(w)');title('β=7的凯瑟窗函数的相频特性');
subplot(313);plot(m4/(2*pi),db4);grid on;xlabel('w/2pi');ylabel('db');title('β=7的凯瑟窗函数的幅度特性');

belta5=8;
window5=kaiser(N,belta5);%凯瑟窗函数
[H5,m5]=freqz(window5,[1],1024,'whole');%计算函数的频率特性
mag5=abs(H5);%计算函数的幅度特性;
pha5=angle(H5);%计算函数的相位特性;
db5=20*log10((mag5+eps)/max(mag5));%将幅度特性转换为对数形式
figure('name','=8时凯瑟窗函数频域波形');
subplot(311);stem(window5);grid on;xlabel('n');ylabel('x(n)');title('β=8的凯瑟窗函数时域图形');
subplot(312);plot(m5/(2*pi),pha5);grid on;xlabel('w/2pi');ylabel('ψ(w)');title('β=8的凯瑟窗函数的相频特性');
subplot(313);plot(m5/(2*pi),db5);grid on;xlabel('w/2pi');ylabel('db');title('β=8的凯瑟窗函数的幅度特性');

在这里插入图片描述

clear all;clc;
N=31;n=0:30;
a=0.42;b=0.4;c=0.18;
x=hanning(N);%汉宁窗函数
for n=0:1:(N-1)/2 %混合窗函数
    w(n+1)=a-b*cos(2*pi*n/(N-1))+c*sin(pi*n/(N-1));
end
for n=(N+1)/2:1:N-1
    w(n+1)=0.54-0.46*cos(2*pi*n/(N-1));
end
%绘制汉宁窗频域波形
figure('name','汉宁窗时域波形');
subplot(211);stem(x);grid on;xlabel('n');ylabel('x(n)');title('N=31的汉宁窗函数时域图形');
subplot(212);stem(w);grid on;xlabel('n');ylabel('w(n)');title('N=31的混合窗函数时域图形');

在这里插入图片描述

clear all;clc;
N=31;n=0:30;
a=0.42;b=0.4;c=0.18;
x=hanning(N);%汉宁窗函数
for n=0:1:(N-1)/2 %混合窗函数
    w(n+1)=a-b*cos(2*pi*n/(N-1))+c*sin(pi*n/(N-1));
end
for n=(N+1)/2:1:N-1
    w(n+1)=0.54-0.46*cos(2*pi*n/(N-1));
end
[H1,m1]=freqz(x,[1],1024,'whole');%计算函数的频率特性
mag1=abs(H1);%计算函数的幅度特性;
pha1=angle(H1);%计算函数的相位特性;
db1=20*log10((mag1+eps)/max(mag1));%将幅度特性转换为对数形式
%绘制汉宁窗频域波形
figure('name','汉宁窗频域波形');
subplot(221);plot(m1/(2*pi),pha1);grid on;xlabel('w/2pi');ylabel('ψ(w)');title('N=31的汉宁窗函数的相频特性');
subplot(223);plot(m1/(2*pi),db1);grid on;xlabel('w/2pi');ylabel('db');title('N=31的汉宁窗函数的幅度特性');
[H2,m2]=freqz(w,[1],1024,'whole');%计算函数的频率特性
mag2=abs(H2);%计算函数的幅度特性;
pha2=angle(H2);%计算函数的相位特性;
db2=20*log10((mag2+eps)/max(mag2));%将幅度特性转换为对数形式
subplot(222);plot(m2/(2*pi),pha2);grid on;xlabel('w/2pi');ylabel('ψ(w)');title('N=31的混合窗函数的相频特性');
subplot(224);plot(m2/(2*pi),db2);grid on;xlabel('w/2pi');ylabel('db');title('N=31的混合窗函数的幅度特性');

在这里插入图片描述

四、分析

分析略

五、思考题

(1)汉宁窗、海明窗和布莱克曼窗是如何做到比矩形窗更高的副瓣衰减的?

(2)窗函数序数序列的长度N是否会影响窗函数的副瓣衰减?试从理论上加以证明。

(3)通过实验分析并说明凯瑟窗序列中参数β参数与窗函数频率特性之间的关系。

(4)在对信号进行频域分析前通常需要进行加窗处理。截取要求的点数,即相关于加矩窗。也可将被处理信号序列与其他各种类型的窗函数进行相乘后再进行频域分析。通过理论分析或者仿真实例说明加窗处理对谱分析的频谱泄漏效应和分辨力特性有何影响?

(5)常用的矩形窗、汉宁窗、海明窗、布莱克曼窗和凯瑟窗的时域图形是否是中心对称的,这几个窗函数的相频特性是否为线性相位的?混合窗函数的时域图形是否中心对称的,其相频特性是否为线性相位的?

六、总结

通过“窗函数法设计FIR数字滤波器”的实验,我对于滤波器的设计又了更加深入的理解。特别是对于滤波器类型的选择,还有根据所给出的条件进行滤波器的确定还有滤波器窗口长度的确定。对于不同种类的窗口,如:矩形窗、三角窗、汉宁窗、海明窗等都更加熟悉,也知道了它们的表达式和性能特点,以及它们的函数图形。我也通过实验,知道了已知单位冲激响应,要在Matlab中求其幅频特性,并进行作图的方法。对于FIR滤波器的知识也有了更扎实的掌握。对我理解窗函数设计滤波器方法很有帮助,我相信,这次数字信号处理实验的参与仅仅是打开了我利用matlab信号分析与处理的大门,在今后我一定会不断努力加油让matlab真正成为我的一项技能。

  • 21
    点赞
  • 184
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 带通滤波器用于滤除输入信号中特定频率范围内的频率成分,保留其他频率范围内的信号。窗函数设计是常用的带通滤波器设计方法之一。以下是使用窗函数设计带通滤波器的MATLAB代码示例: ```matlab % 设计带通滤波器参数 fs = 1000; % 采样率 f1 = 50; % 通带起始频率 f2 = 100; % 通带终止频率 f3 = 200; % 阻带起始频率 f4 = 250; % 阻带终止频率 delta = 0.02; % 过渡带宽度 % 计算滤波器阶数 n = 6 * fs / (f2 - f1); % 计算滤波器截止频率 fc1 = (f1 - delta/2) / (fs/2); fc2 = (f2 + delta/2) / (fs/2); fc3 = (f3 - delta/2) / (fs/2); fc4 = (f4 + delta/2) / (fs/2); % 使用窗函数设计带通滤波器 fir_coeffs = fir1(n, [fc1, fc2], 'bandpass', hamming(n+1)); % 绘制滤波器的频率响应曲线 freqz(fir_coeffs, 1, 1024, fs); % 输入信号 t = 0:1/fs:1; % 时间范围 x = sin(2*pi*75*t) + 0.5*sin(2*pi*400*t); % 输入信号 % 使用设计好的带通滤波器滤波输入信号 y = filter(fir_coeffs, 1, x); % 绘制输入信号和滤波后的输出信号的波形图 figure; subplot(2,1,1); plot(t, x); title('输入信号'); xlabel('时间(s)'); ylabel('幅值'); subplot(2,1,2); plot(t, y); title('滤波后的输出信号'); xlabel('时间(s)'); ylabel('幅值'); ``` 上述代码首先定义了带通滤波器的参数,包括采样率、通带和阻带的频率范围以及过渡带宽度。然后根据这些参数计算出滤波器的阶数和截止频率。接下来使用MATLAB的`fir1`函数根据窗函数设计方法生成带通滤波器的系数。然后利用`filter`函数对输入信号进行滤波处理,得到滤波后的输出信号。最后通过绘制波形图可视化输入信号和滤波后的输出信号。 ### 回答2: 在Matlab中,我们可以使用窗函数设计带通滤波器。首先,我们需要确定带通滤波器的中心频率、带宽和阶数。然后,根据这些参数选择合适的窗函数。常用的窗函数有矩形窗、汉宁窗、汉明窗等。 下面是一个使用汉宁窗设计带通滤波器的示例代码: ```matlab % 设计带通滤波器 fs = 1000; % 采样率 f1 = 100; % 通带起始频率 f2 = 200; % 通带终止频率 BW = f2 - f1; % 带宽 N = 100; % 滤波器的阶数 % 设计汉宁窗 w = hann(N+1); % 计算理想频率响应 Hlp = zeros(1, N+1); for n = 1:N+1 if (n == (N+1)/2) Hlp(n) = BW / fs; else Hlp(n) = sin(2*pi*(n-(N+1)/2)*BW / fs) / (pi*(n-(N+1)/2)); end end % 将理想频率响应通过窗函数加权 Hbp = Hlp .* w'; % 使用fir1函数设计滤波器 b = fir1(N, [f1 f2]*2/fs, Hbp); % 绘制滤波器的幅频特性 freqz(b, 1, 512, fs); ``` 在这个示例中,我们采用1000Hz的采样率,希望设计一个100-200Hz的带通滤波器,滤波器的阶数为100。我们选择汉宁窗作为窗函数,并使用`fir1`函数根据窗函数加权后的理想频率响应来设计滤波器系数。最后,使用`freqz`函数绘制滤波器的频率响应。 ### 回答3: 使用窗函数设计带通滤波器的MATLAB代码步骤如下: 1. 首先,确定所需滤波器的通带和阻带边界频率以及相关参数,如通带边界频率f1和f2,阻带边界频率f3和f4。 2. 计算出所需滤波器的带宽bw = f2 - f1。 3. 然后,选择适当的窗函数类型,例如三角窗函数(triang)或汉宁窗函数(hanning)等。具体选择哪种窗函数需要根据实际需求和性能来决定。 4. 计算出窗函数的长度N(取决于所需滤波器的性能)。 5. 根据窗函数的类型和长度N,生成窗函数向量w[n](其中n表示离散的时域)。 6. 对于所需滤波器的通带和阻带边界频率,计算出对应的离散滤波器的频率响应H[w]。 7. 使用MATLAB中的fft函数计算出离散频率响应H[k](其中k表示平均化的频率域)。 8. 将H[k]与窗函数向量w[n]相乘,得到最终的滤波器频率响应H_windowed[k] = H[k] * w[n]。 9. 使用MATLAB中的ifft函数将H_windowed[k]转换为时域滤波器响应h_windowed[n]。 10. 计算得到的滤波器响应h_windowed[n]即为所需的带通滤波器的时域响应。 下面是一个使用窗函数设计带通滤波器的MATLAB代码示例: ```matlab f1 = 100; % 通带边界频率1 f2 = 200; % 通带边界频率2 f3 = 80; % 阻带边界频率1 f4 = 220; % 阻带边界频率2 bw = f2 - f1; % 计算带宽 window_type = 'triang'; % 选择窗函数类型,这里选择三角窗函数 N = round(3.3/bw); % 计算窗函数长度N,常数3.3是一个经验值 w = window(window_type, N); % 生成窗函数向量 % 计算频率响应 H = zeros(1, N); for k = 1:N w_k = 2*pi*(f2-f1)/N; H(k) = (1/N) * (sin(w_k*(k-(N+1)/2))/(k-(N+1)/2)); % 理想滤波器的频率响应 end % 将频率响应与窗函数相乘得到窗函数后的频率响应 H_windowed = H .* w; % 将频率响应转换为时域响应 h_windowed = ifft(ifftshift(H_windowed)); % 绘制滤波器频率响应 freq = linspace(-bw/2, bw/2, N); plot(freq, abs(fftshift(H_windowed))); xlabel('频率 (Hz)'); ylabel('幅度'); title('带通滤波器频率响应'); ``` 希望以上代码可以帮到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值