lowpass
对信号进行低通滤波
语法
说明
使用名称-值参量为上述任一语法指定其他选项。您可以更改滤波器的阻带衰减、低通滤波器陡度和冲激响应类型。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)
音乐信号的低通滤波
实现基本的数字音乐合成器,并用它播放一首传统歌曲。指定采样率为 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)
对信号进行低通滤波,以将旋律从伴奏中分离出来。指定通带频率为 450 Hz。在时域和频域中绘制原始信号和滤波后的信号。
long = lowpass(song,450,fs);
% To hear, type sound(long,fs)
lowpass(song,450,fs)
绘制伴奏的频谱图。
figure pspectrum(long,fs,"spectrogram",TimeResolution=0.31, ... OverlapPercent=0,MinThreshold=-60)
低通滤波器陡度
使用通带频率为 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])
计算并绘制滤波器的频率响应。
[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])
输入参数
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) 区间内的标量
归一化通带频率,指定为区间 (0, 1) 内的标量。
fpass
— 通带频率
(0, fs
/2) 区间内的标量
通带频率,指定为区间 (0, fs
/2) 内的标量。
fs
— 采样率
正实数标量
采样率,指定为正实数标量。
xt
— 输入时间表
时间表
输入时间表。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。
ImpulseResponse
— 冲激响应的类型
"auto"
(默认) | "fir"
| "iir"
滤波器的冲激响应的类型,指定为 "fir"
、"iir"
或 "auto"
。
"fir"
- 该函数设计一个最小阶、线性相位、有限冲激响应 (FIR) 滤波器。为了补偿延迟,该函数向输入信号 N/2 追加零,其中 N 是滤波器阶数。然后,该函数对信号进行滤波,并删除输出的前 N/2 个采样。在这种情况下,输入信号的长度必须至少是符合设定的滤波器的两倍。
"iir"
- 该函数设计一个最小阶无限冲激响应 (IIR) 滤波器,并使用filtfilt
函数来执行零相位滤波和滤波器延迟补偿。如果信号长度未达到特定标准,即至少是符合设定的滤波器长度的三倍,则该函数设计的滤波器阶数较小,因此陡度也较小。
"auto"
- 如果输入信号足够长,则该函数设计最小阶 FIR 滤波器,否则设计最小阶 IIR 滤波器。具体来说,该函数按照以下步骤操作:计算 FIR 滤波器必须满足设定要求的最小阶数。如果信号长度至少是所需滤波器阶数的两倍,请设计并使用该滤波器。
如果信号不够长,请计算 IIR 滤波器必须满足设定要求的最小阶数。如果信号长度至少是所需滤波器阶数的三倍,请设计并使用该滤波器。
如果信号不够长,请将阶数截断为信号长度的三分之一,并设计一个该阶数的 IIR 滤波器。阶数的降低以牺牲过渡带的陡度为代价。
对信号进行滤波并补偿延迟。
Steepness
— 过渡带陡度
0.85
(默认) | 区间 [0.5, 1) 内的标量
过渡带陡度,指定为区间 [0.5, 1) 内的标量。随着陡度的增大,滤波器响应接近理想的低通响应,但得到的滤波器长度和滤波运算的计算量也随之增大。有关详细信息,请参阅低通滤波器陡度。
StopbandAttenuation
— 滤波器阻带衰减
60
(默认) | 正标量(以 dB 为单位)
滤波器阻带衰减,指定为以 dB 为单位的正标量。
输出参量
y
— 滤波后的信号
向量 | 矩阵 | 时间表
滤波后的信号,以向量、矩阵或时间表形式返回,其维度与输入维度相同。
d
— 低通滤波器
digitalFilter
对象
详细信息
低通滤波器陡度
Steepness
参量控制滤波器过渡区域的宽度。陡度越低,过渡区域就越宽。陡度越高,过渡区域就越窄。
为了解释滤波器陡度,请考虑以下定义:
奈奎斯特频率 fNyquist 是信号中无需混叠即可以给定速率采样的最高频率分量。当输入信号没有时间信息时,fNyquist 为 1(×π 弧度/采样点),当输入信号是时间表或您指定采样率时,则为
fs
/2 赫兹。如果超过滤波器的阻带频率 fstop,则衰减等于或大于使用
StopbandAttenuation
指定的值。滤波器的过渡带宽度 W 是 fstop –
fpass
,其中fpass
是指定的通带频率。大多数非理想滤波器还会在整个通带内使输入信号发生衰减。这种与频率有关的衰减的最大值称为通带波纹。
lowpass
使用的每个滤波器的通带波纹为 0.1 dB。
当您为 Steepness
指定值 s 时,lowpass
会将过渡带宽度计算为
W = (1 – s) × (fNyquist – fpass
).
当
Steepness
等于 0.5 时,过渡带宽度是 (fNyquist –fpass
) 的 50%。随着
Steepness
逼近 1,过渡带宽度逐渐变窄,直到达到最小值,即 (fNyquist –fpass
) 的 1%。
Steepness
的默认值为 0.85
,这对应于过渡带宽度为 (fNyquist – fpass
) 的 15%。
版本历史记录
在 R2018a 中推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)