MATLAB函数——bandpass

bandpass:对信号进行带通滤波


语法

y = bandpass(x,wpass)
y = bandpass(x,fpass,fs)
y = bandpass(xt,fpass)

y = bandpass(___,Name,Value)

[y,d] = bandpass(___)

bandpass(___)


说明

y = bandpass(x,wpass) 使用带通滤波器对输入信号 x 进行滤波,带通滤波器的通带范围由二元向量 wpass 指定,并以 π \pi π rad / sample 的为单位归一化表示。bandpass 使用阻带衰减为 60 dB 的最小阶滤波器,并补偿滤波器引入的延迟。 如果 x 是矩阵,该函数将对每一列分别进行滤波。

y = bandpass(x,fpass,fs) 指定 x 已经以 fs 赫兹的速率采样。二元向量 fpass 是滤波器的通带频率范围,以赫兹为单位。举例

y = bandpass(xt,fpass) 使用通带频率由以赫兹为单位的二元向量 fpass 确定的滤波器对时间表 xt 中的数据进行带通滤波。该函数对时间表中的所有变量以及每个变量内的所有列分别进行滤波。

y = bandpass(___,Name,Value) 使用名称-值对参数为上述任何语法指定附加选项。您可以更改阻带衰减,过渡带陡峭程度以及滤波器的脉冲响应类型。举例

[y,d] = bandpass(___) 还返回用于对输入进行滤波的 digitalFilter 对象 d举例

bandpass(___) 没有输出参数,将在一张图上同时绘制输入信号和滤波后的信号。


举例


对音调进行带通滤波

创建一个以 1 kHz 采样 1 秒钟的信号。该信号包含三个音调,一个音调为 50 Hz,另一个音调为 150 Hz,第三个音调为 250 Hz,并将方差为 1/100 的高斯白噪声加入其中。高频和低频音调的幅度都是中间音调的两倍。

fs = 1e3;
t = 0:1/fs:1;
x = [2 1 2]*sin(2*pi*[50 150 250]'.*t) + randn(size(t))/10;

对信号进行带通滤波以消除高频和低频音调。指定阻带频率为 100 Hz 和 200 Hz。显示原始和滤波后的信号,以及它们的频谱。

bandpass(x,[100 200],fs)

对音调进行带通滤波


对音乐进行带通滤波

实现基本的数字音乐合成器,并使用它来播放传统歌曲。指定采样率为 2 kHz。 绘制歌曲的频谱图。

fs = 2e3;
t = 0:1/fs:0.3-1/fs;

l = [0 130.81 146.83 164.81 174.61 196.00 220 246.94];
m = [0 261.63 293.66 329.63 349.23 392.00 440 493.88];
h = [0 523.25 587.33 659.25 698.46 783.99 880 987.77];
note = @(f,g) [1 1 1]*sin(2*pi*[l(g) m(g) h(f)]'.*t);

mel = [3 2 1 2 3 3 3 0 2 2 2 0 3 5 5 0 3 2 1 2 3 3 3 3 2 2 3 2 1]+1;
acc = [3 0 5 0 3 0 3 3 2 0 2 2 3 0 5 5 3 0 5 0 3 3 3 0 2 2 3 0 1]+1;

song = [];
for kj = 1:length(mel)
    song = [song note(mel(kj),acc(kj)) zeros(1,0.01*fs)];
end
song = song/(max(abs(song))+0.1);

% To hear, type sound(song,fs)

pspectrum(song,fs,'spectrogram','TimeResolution',0.31, ...
    'OverlapPercent',0,'MinThreshold',-60)

歌曲的频谱图
对信号进行带通滤波,以将中间寄存器与其他两个寄存器分开。 指定通带频率为 230 Hz 和 450 Hz。 在时域和频域中绘制原始信号和滤波后的信号。

pong = bandpass(song,[230 450],fs);

% To hear, type sound(pong,fs)

bandpass(song,[230 450],fs)

时域和频域中的原始信号和滤波后的信号
绘制中间寄存器的声谱图。

figure
pspectrum(pong,fs,'spectrogram','TimeResolution',0.31, ...
    'OverlapPercent',0,'MinThreshold',-60)

中间寄存器的声谱图


带通滤波器的陡峭程度

使用具有 100 Hz 通带宽度的 IIR 带通滤波器,对采样率为 1 kHz 的白噪声进行滤波。使用不同的陡度值。绘制滤波信号的频谱。

fs = 1000;
x = randn(20000,1);

[y1,d1] = bandpass(x,[ 50 150],fs,'ImpulseResponse','iir','Steepness',0.5);
[y2,d2] = bandpass(x,[200 300],fs,'ImpulseResponse','iir','Steepness',0.8);
[y3,d3] = bandpass(x,[350 450],fs,'ImpulseResponse','iir','Steepness',0.95);

pspectrum([y1 y2 y3],fs)
legend('Steepness = 0.5','Steepness = 0.8','Steepness = 0.95', ...
    'Location','south')

对称滤波信号的频谱
计算并绘制滤波器的频率响应。

[h1,f] = freqz(d1,1024,fs);
[h2,~] = freqz(d2,1024,fs);
[h3,~] = freqz(d3,1024,fs);

plot(f,mag2db(abs([h1 h2 h3])))
legend('Steepness = 0.5','Steepness = 0.8','Steepness = 0.95', ...
    'Location','south')
ylim([-100 10])

对称滤波器的频率响应
通过在较低和较高通带频率上指定不同的陡度值,使滤波器不对称。

[y1,d1] = bandpass(x,[ 50 150],fs,'ImpulseResponse','iir','Steepness',[0.5 0.8]);
[y2,d2] = bandpass(x,[200 300],fs,'ImpulseResponse','iir','Steepness',[0.5 0.8]);
[y3,d3] = bandpass(x,[350 450],fs,'ImpulseResponse','iir','Steepness',[0.5 0.8]);

pspectrum([y1 y2 y3],fs)

非对称滤波信号的频谱
计算并绘制滤波器的频率响应。

[h1,f] = freqz(d1,1024,fs);
[h2,~] = freqz(d2,1024,fs);
[h3,~] = freqz(d3,1024,fs);

plot(f,mag2db(abs([h1 h2 h3])))
ylim([-100 10])

非对称滤波器的频率响应


输入参数


x - 输入信号

输入信号,指定为矢量矩阵

举例sin(2*pi*(0:127)/16)+randn(1,128)/100 指定一个混有噪声的正弦信号

举例[2 1].*sin(2*pi*(0:127)'./[16 64]) 指定一个两通道的正弦信号。

数据类型single | double
复数支持:是


wpass - 归一化通带频率

归一化的通带频率,指定为二元向量,每个元素都应在区间 (0,1) 内。


fpass - 通带频率

通带频率,指定为二元向量,每个元素都应在区间 (0,fs/2) 内。


fs - 采样率

采样率,指定为正实标量


xt - 输入时间表

输入时间表。xt 必须包含以秒为单位,类型为 duration 的递增、有限、等距的行时间。

如果时间表有缺少或重复的时间点,则可以使用《清除含有缺失、重复或不均匀时间的时间表(MATLAB)》中的提示进行修复。

举例timetable(seconds(0:4)',randn(5,1),randn(5,2)) 指定一个以 1 Hz 采样 4 秒的单通道随机信号和一个两通道随机信号。


名称-值对参数


指定可选的逗号分隔的 Name,Value 参数对。Name 是参数名称,Value 是相应的值。 Name 必须出现在引号中。您可以按任意顺序指定多个名称和值对参数,例如 Name1,Value1,…NameN,ValueN

举例'ImpulseResponse','iir','StopbandAttenuation',30 使用最小阶 IIR 滤波器对输入信号进行滤波,该滤波器将低于 fpass(1) 和高于 fpass(2) 的频率衰减 30 dB。


'ImpulseResponse' - 脉冲响应的类型

滤波器的脉冲响应类型,指定为以逗号分隔的,由 'ImpulseResponse''fir''iir''auto'(默认为 'auto')组成的一对参数。

  • 'fir' - 该函数设计一个最小阶线性相位的有限冲激响应(FIR)滤波器。 为了补偿延迟,该函数将 N / 2 N / 2 N/2 个零附加到输入信号,其中 N N N 是滤波器阶数。 然后,该函数对信号进行滤波并删除输出的前 N / 2 N / 2 N/2 个样本。

    在这种情况下,输入信号的长度必须至少是符合规格的滤波器的两倍。

  • 'iir' - 该函数设计一个最小阶无限冲激响应(IIR)滤波器,并使用 filtfilt 函数执行零相滤波并补偿滤波器延迟。

    如果信号的长度不小于符合规格的滤波器的三倍,则此功能将设计一个阶数较小的滤波器,从而使陡度较小。

  • 'auto' - 如果输入信号足够长,则该函数设计一个最小阶 FIR 滤波器,否则设计一个最小阶 IIR 滤波器。 具体来说,该函数遵循以下步骤:

    • 计算 FIR 滤波器必须满足规格的最低要求。如果信号的长度至少是所需滤波器阶数的两倍,请设计并使用该滤波器。
    • 如果信号不够长,则计算 IIR 滤波器必须满足规范的最小阶数。如果信号的长度至少是所需滤波器阶数的三倍,请设计并使用该滤波器。
    • 如果信号不够长,则将阶数截断为信号长度的三分之一,然后设计该阶数的 IIR 滤波器。阶数的减少是以过渡带陡度降低为代价的。
    • 对信号进行滤波并补偿延迟。

'Steepness' - 过渡带陡峭程度

过渡带陡度,指定为以逗号分隔的,由 'Steepness' 和每个元素均在区间 [0.5,1) 的二元矢量(默认为 0.85)组成的一对参数。

随着陡度的增加,滤波器响应接近理想的带通响应,但是最终的滤波器长度和滤波操作的计算成本也会增加。有关更多信息,请参见带通通滤波器的陡度


'StopbandAttenuation' - 滤波器阻带衰减

滤波器阻带衰减,指定为以逗号分隔的,包括 'StopbandAttenuation' 和 一个单位为 dB 的正标量(默认为 60 dB)组成的一对参数。


输出参数


y - 滤波后的信号

滤波后的信号,以向量矩阵时间表的形式返回,其维度与输入信号的维度相同。


d - 带通滤波器

滤波操作中使用的带通滤波器,以 digitalFilter 的形式返回。

  • 通过 filter(d,x) 使用 d 过滤信号 x
  • 使用 FVTool 将滤波器响应可视化。
  • 使用 designfilt 根据频率响应规范来编辑或生成数字滤波器。

更多相关


带通滤波器的陡度

参数 'Steepness' 控制滤波器过渡带的宽度。陡度越低,过渡带越宽。陡度越高,过渡带越窄。

要理解滤波器的陡度,请参考以下定义:

  • 奈奎斯特频率 f N y q u i s t f_{\mathrm{Nyquist}} fNyquist 是信号的最高频率分量,以此为参考就可以以给定速率采样而不会发生混叠。当输入信号没有时间信息时, f N y q u i s t f_{\mathrm{Nyquist}} fNyquist 为 1( × π \times\pi ×π rad / sample),当输入信号为时间表或指定采样率时, f N y q u i s t f_{\mathrm{Nyquist}} fNyquistfs/2 Hz。

  • 滤波器的下和上阻带频率 f s t o p l o w e r f_{\mathrm{stop}}^{\mathrm{lower}} fstoplower f s t o p u p p e r f_{\mathrm{stop}}^{\mathrm{upper}} fstopupper,低于和高于两个频率的衰减等于或大于使用 'StopbandAttenuation' 指定的值。

  • 滤波器的下过渡带宽 W l o w e r W^{\mathrm{lower}} Wlowerfpass l o w e r − f s t o p l o w e r ^{\mathrm{lower}}- f_{\mathrm{stop}}^{\mathrm{lower}} lowerfstoplower,其中 fpass l o w e r ^{\mathrm{lower}} lowerfpass 的第一个元素。

  • 滤波器的上过渡带宽 W u p p e r W^{\mathrm{upper}} Wupper f s t o p u p p e r − f_{\mathrm{stop}}^{\mathrm{upper}}- fstopupperfpass u p p e r ^{\mathrm{upper}} upper,其中 fpass u p p e r ^{\mathrm{upper}} upperfpass 的第二个元素。

  • 大多数非理想滤波器也会使通带上的输入信号衰减。这种与频率有关的衰减的最大值称为通带纹波。用函数 bandpass 产生每个滤波器的通带纹波均为 0.1 dB。

带通滤波器的陡度
为了控制过渡带宽,您可以将 'Steepness' 指定为一个二元矢量 [ s l o w e r , s u p p e r ] [s^{\mathrm{lower}},s^{\mathrm{upper}}] [slower,supper] 或一个标量。当指定 'Steepness' 为一个矢量时,该函数

  • 如下计算下过渡带宽

         W l o w e r = ( 1 − s l o w e r ) × W^{\mathrm{lower}}=(1-s^{\mathrm{lower}})\times Wlower=(1slower)× fpass l o w e r ^{\mathrm{lower}} lower

    • 'Steepness' 等于 0.5,过渡带宽即为 fpass l o w e r ^{\mathrm{lower}} lower 的 50%
    • 随着 'Steepness' 接近于 1,过渡带宽逐渐变窄,直到达到 fpass l o w e r ^{\mathrm{lower}} lower 的 1%(此时为最小值)。
  • 如下计算上过渡带宽

         W u p p e r = ( 1 − s u p p e r ) × W^{\mathrm{upper}}=(1-s^{\mathrm{upper}})\times Wupper=(1supper)× fpass u p p e r ^{\mathrm{upper}} upper

    • 'Steepness' 等于 0.5,过渡带宽即为 fpass u p p e r ^{\mathrm{upper}} upper 的 50%
    • 随着 'Steepness' 接近于 1,过渡带宽逐渐变窄,直到达到 fpass u p p e r ^{\mathrm{upper}} upper 的 1%(此时为最小值)。

当指定 'Steepness' 为一个标量时,该函数设计一个上过渡带宽和下过渡带宽相等的滤波器。'Steepness' 的默认值为 0.85。


另请参阅

应用程序

Signal Analyzer

函数

bandstop | designfilt | filter | filtfilt | fir1 | lowpass | highpass


在 R2018a 中推出


原文参考:https://ww2.mathworks.cn/help/signal/ref/bandpass.html

  • 14
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB中,使用fir1函数可以设计一个带通滤波器。带通滤波器可以通过指定截止频率和滤波器阶数来创建。下面是一个使用fir1函数设计带通滤波器的示例代码: ```matlab fs = 1000; % 采样率 f1 = 50; % 低频截止频率 f2 = 200; % 高频截止频率 n = 100; % 滤波器阶数 % 设计带通滤波器 b = fir1(n, \[f1, f2\]/(fs/2), 'bandpass'); % 对信号进行滤波 filtered_signal = filter(b, 1, original_signal); % 绘制原始信号和滤波后的信号 subplot(2, 1, 1); plot(t, original_signal); title('Original Signal'); subplot(2, 1, 2); plot(t, filtered_signal); title('Bandpass Filtered Signal'); xlabel('Time (s)'); ``` 这段代码中,我们首先定义了采样率fs、低频截止频率f1、高频截止频率f2和滤波器阶数n。然后使用fir1函数设计了一个带通滤波器,将其系数保存在变量b中。最后,使用filter函数对原始信号进行滤波,得到滤波后的信号filtered_signal。通过subplot和plot函数,我们可以将原始信号和滤波后的信号绘制在同一张图上进行比较。 #### 引用[.reference_title] - *1* *2* [MATLAB函数——fir1](https://blog.csdn.net/weixin_43870101/article/details/106961483)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [matlab设计FIR滤波器](https://blog.csdn.net/hou19975418/article/details/130581255)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值