文档

设计多速率滤波器

请注意

如果您正在使用R2016a或更早的版本,请用等效的步骤语法替换对对象的每次调用。例如,obj (x)就变成了步骤(obj, x)

多速率过滤器是过滤器的不同部分以不同的速率工作的过滤器。当输入和输出采样率不同时,例如在抽取、插值或两者的组合中,通常使用这样的过滤器。然而,在输入采样率和输出采样率相同的设计中经常使用多速率滤波器。在这类滤波器中,有一个内部抽取和插值发生在一系列滤波器中。与标准的单速率滤波器设计相比,这种滤波器可以大大减少滤波器长度和计算率。

最基本的多速率滤波器是插值器、decimator和速率转换器。这些滤波器是更先进的滤波器技术的组成部分,如滤波器组和正交镜滤波器(QMF)。你可以在MATLAB中设计这些过滤器®和仿真软金宝app件®使用designMultirateFIR函数。

该函数采用FIR奈奎斯特滤波器设计算法计算滤波器系数。要在MATLAB中实现这些滤波器,使用这些系数作为输入dsp。FIRDecimatordsp。FIRInterpolator,dsp。FIRRateConverter系统对象。在Si金宝appmulink中,用designMultirateFIR在默认情况下汽车的模式冷杉大量毁灭冷杉插值,FIR速率转换块。

的输入designMultirateFIR函数是插值因子和抽取因子。可选地,您可以提供半多相长度和阻带衰减。取小数的插值因子设为1。类似地,插值器的抽取因子设为1。

这些例子展示了如何在MATLAB和Simulink中实现FIR抽取器。金宝app同样的工作流程也可以应用于FIR插补器和FIR速率转换器。

在MATLAB中实现一个FIR Decimator

要实现FIR Decimator,首先必须使用designMultirateFIR函数。指定感兴趣的抽取因子(通常大于1)和插值因子等于1。您可以使用默认的半多相长度12和默认的阻带衰减80db。或者,您也可以指定半多相长度和阻带衰减值。

设计一个FIR抽取器,抽取因子设为3,半多相长度设为14。使用默认的阻带衰减80db。

b = designMultirateFIR(1,3,14);

提供系数向量,b的输入dsp。FIRDecimator系统对象?。

FIRDecim = dsp.FIRDecimator(3,b);fvtool (FIRDecim);

默认情况下,fvtool显示震级响应。浏览fvtool工具栏,查看相位响应、脉冲响应、群延迟和其他滤波器分析信息。

滤波器对有噪声的正弦波输入进行滤波FIRDecim对象。正弦波的频率为1000hz和3000hz。噪声为均值为零,标准差为1e-5的高斯白噪声。decimated输出将有三分之一的采样率作为输入。初始化两个dsp。简介系统对象,一个用于输入,另一个用于输出。

F1 = 1000;F2 = 3000;Fs = 8000;Source = dsp。SineWave (“频率”(f1、f2),“SampleRate”Fs,...“SamplesPerFrame”, 1026);Specanainput = dsp。简介(“SampleRate”Fs,...“PlotAsTwoSidedSpectrum”假的,...“ShowLegend”,真的,“YLimits”, 30 [-120],...“标题”“噪声输入信号”...“ChannelNames”, {嘈杂的输入的});Specanaoutput = dsp。简介(“SampleRate”Fs / 3,...“PlotAsTwoSidedSpectrum”假的,...“ShowLegend”,真的,“YLimits”, 30 [-120],...“标题”“过滤输出”...“ChannelNames”, {“过滤输出”});

输入流,并在处理循环中对信号进行过滤。

Iter = 1:100 input = sum(source(),2);noisyInput = input + (10^-5)*randn(1026,1);输出= FIRDecim(noisyInput);specanainput (noisyInput) specanaoutput(输出)结束

输入有两个峰值:一个在1000hz,另一个在3000hz。该滤波器具有低通响应,通带频率为0.3*pi rad/sample。采样频率为8000hz,即通带频率为1200hz。1000hz的音调没有衰减,因为它落在滤波器的通带内。3000hz的音被过滤掉。

类似地,你可以设计一个FIR插补器和FIR速率转换器通过提供适当的输入designMultirateFIR函数。要实现过滤器,将设计的系数传递给dsp。FIRInterpolator而且dsp。FIRRateConverter对象。

在Simulink中实现一个FIR Decimator金宝app

您可以在Simulink中使用FIR抽取、FIR插值和FIR速率转换模块设计和实现FIR多速率滤波器。金宝app当你设置系数来源对话框参数,你可以提供designMultirateFIR(1、2)作为参数来指定过滤器系数。设计Decimator使用designMultirateFIR函数中,必须指定感兴趣的抽取因子(通常大于1)和插值因子等于1。您可以使用默认的半多相长度12和默认的阻带衰减80db。或者,您也可以指定半多相长度和阻带衰减值。

方法计算出的系数designMultirateFIR函数。

类似地,你可以设计一个FIR插补器和FIR速率转换器通过提供适当的输入designMultirateFIR函数。

当你设置系数来源汽车,块计算系数使用designMultirateFIR函数。函数使用块对话框中指定的抽取因子。

您可以在相应的模块中使用类似的方法设计一个FIR插补器和一个FIR速率转换器。

样本率转换

采样率转换是将信号的采样率从一个采样率转换为另一个采样率的过程。多级滤波器最小化了在抽样率转换中涉及的计算量。若要执行有效的多级速率转换,则dsp。SampleRateConverter对象:

  1. 接受输入采样率和输出采样率作为输入。

  2. 将设计问题划分为最优阶段。

  3. 设计各阶段所需的所有过滤器。

  4. 实现设计。

该设计确保在中间步骤中不会发生混叠。

在本例中,将一个有噪声的正弦波信号的采样率从输入速率为192 kHz更改为输出速率为44.1 kHz。初始化一个抽样速率转换器对象。

SRC = sp. samplerateconverter;

显示过滤信息。

信息(SRC)
ans = '整体插值因子:147整体抽取因子:640滤波器数量:3乘以每个输入样本:27.667188系数数量:8631滤波器:滤波器1:dsp。FIRDecimator -抽取因子:2滤波器2:dsp。fidecimator -抽取因子:2滤波器3:dsp。FIRRateConverter- Interpolation Factor: 147 - Decimation Factor : 160 '

SRC是一个三级滤波器:两个FIR抽取器和一个FIR速率转换器。

初始化正弦波源。正弦波有两个音调:一个是2000hz,另一个是5000hz。

Source = dsp。SineWave (“频率”(2000 5000),“SampleRate”, 192000,...“SamplesPerFrame”, 1280);

初始化频谱分析仪以查看输入和输出信号。

Fsin = SRC.InputSampleRate;Fsout = SRC.OutputSampleRate;Specanainput = dsp。简介(“SampleRate”傅氏国际,...“PlotAsTwoSidedSpectrum”假的,...“ShowLegend”,真的,“YLimits”, 30 [-120],...“标题”输入信号的...“ChannelNames”, {“输入”});Specanaoutput = dsp。简介(“SampleRate”Fsout,...“PlotAsTwoSidedSpectrum”假的,...“ShowLegend”,真的,“YLimits”, 30 [-120],...“标题”“速率转换输出”...“ChannelNames”, {“速率转换输出”});

输入信号并转换信号的采样率。

Iter = 1: 5000 input = sum(source(),2);Noisyinput = input + (10^-5)*randn(1280,1);output = SRC(noisyinput);specanainput (noisyinput);specanaoutput(输出);结束

所示的光谱在[0 Fs/2]范围内是片面的。对于显示输入的频谱分析仪,Fs/2为192000/2。对于显示输出的频谱分析仪,Fs/2为44100/2。因此,信号的采样率从192 kHz变为44.1 kHz。

参考文献

[1]哈里斯,弗雷德里克J。通信系统的多速率信号处理.Prentice Hall PTR, 2004。

相关的话题