Main Content

lowpass

对信号进行低通滤波

说明

y = lowpass(x,wpass) 使用低通滤波器对输入信号 x 进行滤波,该滤波器以 π 弧度/采样点为单位,其归一化通带频率为 wpasslowpass 使用阻带衰减为 60 dB 的最小阶滤波器,并补偿滤波器引入的延迟。如果 x 是矩阵,该函数将对每列进行单独滤波。

y = lowpass(x,fpass,fs) 指定以 fs 赫兹的速率对 x 进行采样。fpass 是滤波器的通带频率(以赫兹为单位)。

示例

y = lowpass(xt,fpass) 使用通带频率为 fpass 赫兹的滤波器对时间表 xt 中的数据进行低通滤波。该函数将对时间表中的所有变量以及每个变量中的所有列进行单独滤波。

y = lowpass(___,Name=Value) 使用名称-值参量为上述任一语法指定其他选项。您可以更改滤波器的阻带衰减、低通滤波器陡度和冲激响应类型。

示例

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

示例

不带输出参量的 lowpass(___) 绘制输入信号并叠加滤波后的信号。

示例

全部折叠

创建一个信号,其采样率为 1 kHz,采样时间持续 1 秒。该信号包含两个音调,一个为 50 Hz,另一个为 250 Hz,它们嵌入方差为 1/100 的高斯白噪声中。高频音调的振幅是低频音调的两倍。

fs = 1e3;
t = 0:1/fs:1;

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

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

lowpass(x,150,fs)

Figure contains 2 axes objects. Axes object 1 with title Lowpass Filtering (Fpass = 150 Hz), xlabel Time (s) contains 2 objects of type line. These objects represent Original, Filtered. Axes object 2 with xlabel Frequency (Hz), ylabel Power Spectrum (dB) contains 2 objects of type line. These objects represent Original, Filtered.

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

fs = 2e3;
t = 0:1/fs:0.3-1/fs; fq = [-Inf -9:2]/12;
note = @(f,g) [1 1 1]*sin(2*pi*440*2.^[fq(g)-1 fq(g) fq(f)+1]'.*t);

mel = [5 3 1 3 5 5 5 0 3 3 3 0 5 8 8 0 5 3 1 3 5 5 5 5 3 3 5 3 1]+1;
acc = [5 0 8 0 5 0 5 5 3 0 3 3 5 0 8 8 5 0 8 0 5 5 5 0 3 3 5 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)

Figure contains an axes object. The axes object with title Fres = 8.2798 Hz, Tres = 310 ms, xlabel Time (s), ylabel Frequency (kHz) contains an object of type image.

对信号进行低通滤波,以将旋律从伴奏中分离出来。指定通带频率为 450 Hz。在时域和频域中绘制原始信号和滤波后的信号。

long = lowpass(song,450,fs);

% To hear, type sound(long,fs)

lowpass(song,450,fs)

Figure contains 2 axes objects. Axes object 1 with title Lowpass Filtering (Fpass = 450 Hz), xlabel Time (s) contains 2 objects of type line. These objects represent Original, Filtered. Axes object 2 with xlabel Frequency (kHz), ylabel Power Spectrum (dB) contains 2 objects of type line. These objects represent Original, Filtered.

绘制伴奏的频谱图。

figure
pspectrum(long,fs,"spectrogram",TimeResolution=0.31, ...
    OverlapPercent=0,MinThreshold=-60)

Figure contains an axes object. The axes object with title Fres = 8.2798 Hz, Tres = 310 ms, xlabel Time (s), ylabel Frequency (kHz) contains an object of type image.

使用通带频率为 200 Hz 的无限冲激响应低通滤波器对以 1 kHz 频率采样的白噪声进行滤波。使用不同陡度值。绘制滤波后的信号的频谱。

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

[y1,d1] = lowpass(x,200,fs,ImpulseResponse="iir",Steepness=0.5);
[y2,d2] = lowpass(x,200,fs,ImpulseResponse="iir",Steepness=0.8);
[y3,d3] = lowpass(x,200,fs,ImpulseResponse="iir",Steepness=0.95);

pspectrum([y1 y2 y3],fs)
legend("Steepness = " + [0.5 0.8 0.95])

Figure contains an axes object. The axes object with title Fres = 1.7341 Hz, xlabel Frequency (Hz), ylabel Power Spectrum (dB) contains 3 objects of type line. These objects represent Steepness = 0.5, Steepness = 0.8, Steepness = 0.95.

计算并绘制滤波器的频率响应。

[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 0.8 0.95])

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Steepness = 0.5, Steepness = 0.8, Steepness = 0.95.

输入参数

全部折叠

输入信号,指定为向量或矩阵。

示例: sin(2*pi*(0:127)/16)+randn(1,128)/100 指定一个含噪正弦波

示例: [2 1].*sin(2*pi*(0:127)'./[16 64]) 指定一个双通道正弦波。

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

归一化通带频率,指定为区间 (0, 1) 内的标量。

通带频率,指定为区间 (0, fs/2) 内的标量。

采样率,指定为正实数标量。

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

如果时间表有缺失或重复的时间点,您可以使用清理包含缺失、重复或不均匀时间的时间表中的提示进行修复。

示例: timetable(seconds(0:4)',randn(5,1),randn(5,2)) 包含一个单通道随机信号和一个双通道随机信号,采样率为 1 Hz,采样时间为 4 秒。

示例: timetable(randn(5,1),randn(5,2),SampleRate=1) 包含一个单通道随机信号和一个双通道随机信号,采样率为 1 Hz,采样时间为 4 秒。

名称-值参数

将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量后,但对各个参量对组的顺序没有要求。

示例: ImpulseResponse="iir",StopbandAttenuation=30 使用最小阶 IIR 滤波器对输入进行滤波,该滤波器可将高于 fpass 的频率衰减 30 dB。

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: 'ImpulseResponse','iir','StopbandAttenuation',30 使用最小阶 IIR 滤波器对输入进行滤波,该滤波器可将高于 fpass 的频率衰减 30 dB。

滤波器的冲激响应的类型,指定为 "fir""iir""auto"

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

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

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

    如果信号长度未达到特定标准,即至少是符合设定的滤波器长度的三倍,则该函数设计的滤波器阶数较小,因此陡度也较小。

  • "auto" - 如果输入信号足够长,则该函数设计最小阶 FIR 滤波器,否则设计最小阶 IIR 滤波器。具体来说,该函数按照以下步骤操作:

    • 计算 FIR 滤波器必须满足设定要求的最小阶数。如果信号长度至少是所需滤波器阶数的两倍,请设计并使用该滤波器。

    • 如果信号不够长,请计算 IIR 滤波器必须满足设定要求的最小阶数。如果信号长度至少是所需滤波器阶数的三倍,请设计并使用该滤波器。

    • 如果信号不够长,请将阶数截断为信号长度的三分之一,并设计一个该阶数的 IIR 滤波器。阶数的降低以牺牲过渡带的陡度为代价。

    • 对信号进行滤波并补偿延迟。

过渡带陡度,指定为区间 [0.5, 1) 内的标量。随着陡度的增大,滤波器响应接近理想的低通响应,但得到的滤波器长度和滤波运算的计算量也随之增大。有关详细信息,请参阅低通滤波器陡度

滤波器阻带衰减,指定为以 dB 为单位的正标量。

输出参量

全部折叠

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

滤波运算中使用的低通滤波器,以 digitalFilter 对象形式返回。

  • 使用 filter (d,x)d 对信号 x 进行滤波。与 lowpass 不同,filter 函数不补偿滤波器延迟。您也可以将 filtfiltfftfilt 函数用于 digitalFilter 对象。

  • 使用滤波器分析器可视化滤波器响应。

  • 使用 designfilt 根据频率响应设定编辑或生成数字滤波器。

详细信息

全部折叠

低通滤波器陡度

Steepness 参量控制滤波器过渡区域的宽度。陡度越低,过渡区域就越宽。陡度越高,过渡区域就越窄。

为了解释滤波器陡度,请考虑以下定义:

  • 奈奎斯特频率 fNyquist 是信号中无需混叠即可以给定速率采样的最高频率分量。当输入信号没有时间信息时,fNyquist 为 1(×π 弧度/采样点),当输入信号是时间表或您指定采样率时,则为 fs/2 赫兹。

  • 如果超过滤波器的阻带频率 fstop,则衰减等于或大于使用 StopbandAttenuation 指定的值。

  • 滤波器的过渡带宽度 Wfstopfpass,其中 fpass 是指定的通带频率

  • 大多数非理想滤波器还会在整个通带内使输入信号发生衰减。这种与频率有关的衰减的最大值称为通带波纹lowpass 使用的每个滤波器的通带波纹为 0.1 dB。

当您为 Steepness 指定值 s 时,lowpass 会将过渡带宽度计算为

W = (1 – s) × (fNyquistfpass).

  • Steepness 等于 0.5 时,过渡带宽度是 (fNyquistfpass) 的 50%。

  • 随着 Steepness 逼近 1,过渡带宽度逐渐变窄,直到达到最小值,即 (fNyquistfpass) 的 1%。

Steepness 的默认值为 0.85,这对应于过渡带宽度为 (fNyquistfpass) 的 15%。

版本历史记录

在 R2018a 中推出