主要内容

octaveFilter

倍频带和分数倍频带滤波器

描述

octaveFilter系统对象™在每个输入通道上独立地执行倍频带或分数倍频带滤波。八度频带是一个频带,其中最高频率是最低频率的两倍。八度带和分数八度带滤波器通常用于模拟人类如何感知响度。八度滤波器最好从对数尺度上理解,对数尺度模拟了人耳如何对频谱进行加权。

要对输入执行倍频或分数倍频滤波:

  1. 创建octaveFilter对象并设置其属性。

  2. 使用参数调用对象,就像调用函数一样。

有关系统对象如何工作的详细信息,请参见什么是系统对象?

创建

描述

octFilt = octavfilter创建一个System对象,octFilt,它在每个输入通道上独立地执行八度带滤波。

octFilt = octaveFilter(centerFreq设置CenterFrequency财产centerFreq

octFilt = octaveFilter(centerFreqbw设置带宽财产bw

octFilt = octaveFilter(___名称,值设置每个属性的名字到指定的价值.未指定的属性有默认值。

例子:octFilt = octaveFilter(1000,'1/3 octave','SampleRate',96000)创建一个System对象,octFilt,中心频率为1000hz, 1/3倍频滤波器带宽,采样率为96000 Hz。

属性

全部展开

除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放功能解锁它们。

如果属性为可调,您可以随时更改其值。

有关更改属性值的详细信息,请参见使用系统对象的MATLAB系统设计

倍频筛选器的顺序,指定为偶数。

可调:没有

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

倍频滤波器的中心频率(以Hz为单位),指定为正标量。

当使用parameterTuner时,中心频率必须在[0.2,SampleRate/ 2)赫兹。

可调:是的

数据类型:|

以八度为单位的过滤带宽,指定为1倍频程的“2/3倍频程”的1/2倍频程1/3倍频程的“1/6倍频程”“1/12倍频程”“1/24倍频程”,或“1/48倍频程”

可调:是的

数据类型:字符|字符串

过采样切换,指定为真正的

  • ——倍频滤波器以输入采样率运行。

  • 真正的——倍频滤波器以输入采样率的两倍运行。过采样最小化了双线性变换带来的频率翘曲效应。FIR半带插值器实现了倍频滤波前的过采样。半带decimator将采样率降低到经过倍频滤波后的输入采样率。

可调:没有

数据类型:逻辑

输入采样率(以Hz为单位),指定为正标量。

可调:是的

数据类型:|

使用

描述

例子

audioOut= octFilt (audioIn对输入信号进行倍频滤波,audioIn,并返回过滤后的信号,audioOut.类的算法和属性指定过滤类型octaveFilter系统对象,octFilt

输入参数

全部展开

音频输入到倍频滤波器,指定为矩阵。矩阵的列被视为独立的音频通道。

数据类型:|

输出参数

全部展开

音频输出从八度滤波器,返回为一个相同大小的矩阵audioIn

数据类型:|

对象的功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源obj,使用这种语法:

发行版(obj)

全部展开

createAudioPluginClass 创建音频插件类,实现的功能系统对象
可视化 可视化并验证过滤器响应
isStandardCompliant 验证倍频滤波器设计符合ANSI S1.11-2004标准
getFilter 返回设置了设计参数的双方过滤器对象
getANSICenterFrequencies 获取有效的ANSI S1.11-2004中心频率列表
parameterTuner 在流处理时调优对象参数
configureMIDI 配置音频对象与MIDI控制器之间的MIDI连接
disconnectMIDI 从音频对象断开MIDI控件
getMIDIConnections 获取音频对象的MIDI连接
克隆 创建重复的系统对象
isLocked 确定系统对象正在使用中
释放 释放资源并允许更改系统对象属性值和输入特征
重置 重置的内部状态系统对象
一步 运行系统对象算法

请注意

octaveFilter金宝app支持额外的过滤分析功能。看到分析倍频滤波器设计获取详细信息。

例子

全部折叠

使用octaveFilter设计一个以1000hz为中心的1/3倍频滤波器。使用八度滤波器设计处理音频信号。

创建一个dsp。一个udioFileReader对象。

samplesPerFrame = 1024;Reader = dsp。一个udioFileReader(“rockguitar - 16 - 44 - p1 -立体声- 72 secs.wav”“SamplesPerFrame”, samplesPerFrame);

创建一个octaveFilter对象。使用读卡器的采样率作为倍频滤波器的采样率。

centerFreq = 1000;bw =1/3倍频程的;Fs = reader.SampleRate;octFilt = octaveFilter(centerFreq,bw,“SampleRate”Fs);

可视化滤波器响应并验证它是否符合ANSI S1.11-2004标准的0类掩码。

可视化(octFilt“阶级0”

创建一个频谱分析仪来可视化原始音频信号和经过八度带滤波后的音频信号。

Scope = dsp。简介(...“SampleRate”Fs,...“PlotAsTwoSidedSpectrum”假的,...“FrequencyScale”“日志”...“FrequencyResolutionMethod”“WindowLength”...“WindowLength”samplesPerFrame,...“标题”“倍频带滤波”...“ShowLegend”,真的,...“ChannelNames”,{原始信号的“过滤信号”});

在音频流循环中处理音频信号。将过滤后的音频和原始音频可视化。作为最佳实践,在完成时释放System对象。

~isDone(reader) x = reader();y = octFilt(x)范围([x (: 1), y (: 1)))结束释放(octFilt)释放(reader)释放(scope)

图频谱分析仪包含一个axis对象和其他类型为uiflowcontainer、uimenu、uitoolbar的对象。标题为Octave-Band Filtering的axes对象包含2个类型为line的对象。这些对象分别代表原始信号、滤波信号。

创建一个八度音阶过滤器。可视化筛选器响应,并验证它符合类2。

octFilt = octaveFilter(“CenterFrequency”, 1000);可视化(octFilt二班的

使用分析过滤器fvtool

fvtool (octFilt“Fs”octFilt.SampleRate)

图幅度响应(dB)包含一个轴对象。标题为Magnitude Response (dB)的axes对象包含一个类型为line的对象。

octaveFilter对象支持多种筛金宝app选器分析方法。有关更多信息,请使用帮助在命令行:

帮助octaveFilter.helpFilterAnalysis
以下分析方法可用于离散时间过滤器系统对象:fvtool -滤波器可视化工具info -滤波器信息freqz -频响相位-相位响应零相位-零相位响应grpdelay -群延迟响应相位-相位延迟响应impz -脉冲响应impzlength -脉冲响应长度stepz -阶跃响应zplane -极点/零图成本-实现滤波器的成本估计系统对象测量-频响测量特征outputDelay -输出延迟值order -滤波器阶多项式系数- firtype滤波器系数的结构确定的类型(1 - 4)线性相位滤波器系统对象tf -转换为传递函数zpk皈依zero-pole-gain ss -转换为状态空间表示法isallpass验证如果过滤系统对象allpass isfir -验证如果过滤系统对象是冷杉islinphase验证如果过滤系统对象是线性相位ismaxphase——验证如果过滤系统对象的最大相位isminphase——如果过滤系统验证验证filter System object is minimum phase isreal -验证filter System object is minimum real issos -验证filter System object is in second order sections form isstable -验证filter System object isstable realizemdl - filter realization (Simulink dia金宝appgram) parameterall -完全指定定点过滤器System object settings cascade -创建FilterCascade System object second order sections:scale -缩放BiquadFilter System对象的二阶部分scalecheck -检查BiquadFilter System对象的缩放reorder -重排序BiquadFilter System对象的二阶部分cumsec - BiquadFilter System对象的累积二阶部分scaleopts -创建一个用于二阶部分缩放sos的选项对象-转换为二阶部分(仅适用于IIRFilter System对象)定点(定点设计器必需):创建一个用于输出噪声PSD计算的选项对象:多相-多速率滤波器的多相分解系统对象增益(CIC decimator) - CIC decimator滤波器的增益系统对象增益(CIC插补器)- CIC插补器滤波器的增益系统对象对于decimator、插补器或速率变化滤波器系统对象,分析工具相对于滤波器运行的速率进行计算。如果指定了采样频率,则假定滤波器以该频率运行。帮助octaveFilter。帮助FilterAnalysis is inherited from superclass dsp.internal.FilterAnalysis

从一个八度频带滤波器组中使用不同的八度频带处理语音信号。

设计一个1/2倍频滤波器,估计中心频率为800hz。使用isStandardCompliant找到最近的柔度中心频率。

octFilt = octaveFilter(800,的1/2倍频程);[compliancestry atus,suggestedCenterFrequency] = isStandardCompliant(octFilt,“阶级0”
compliancestry atus = logical 0 suggestedCenterFrequency = 841.3951

改变中心频率octFilt对象返回的建议中心频率isStandardCompliant.获取有效的ANSI S1.11-2004中心频率列表,给定您指定的频率octFilt中心频率。

octFilt。CenterFrequency = advisstedcenterfrequency;Fo = getANSICenterFrequencies(octFilt);

创建一个音频文件阅读器和音频设备写入器。

fileReader = dsp。AudioFileReader (“Counting-16-44p1-mono-15secs.wav”);deviceWriter = audioDeviceWriter(“SampleRate”, fileReader.SampleRate);

创建一个范围来可视化经过过滤和未经过滤的信号。

Scope = dsp。简介(...“PlotAsTwoSidedSpectrum”假的,...“FrequencyScale”“日志”...“标题”“倍频带滤波”...“ShowLegend”,真的,...“ChannelNames”,{原始信号的“过滤信号”});

在音频流循环中,使用八度频带滤波器处理音频信号。改变中心频率就能听到效果。作为最佳实践,在处理后释放对象。

指数= 12;octFilt。CenterFrequency = Fo(指数);Count = 1;~isDone(fileReader) x = fileReader();y = octFilt(x)范围((x, y)) deviceWriter (y);如果国防部(统计,100)= = 0 octFilt。CenterFrequency=Fo(index); index = index+1;结束Count = Count +1;结束release(scope) release(deviceWriter) release(fileReader)

方法从音频音阶中去除附加噪声octaveFilter

创建audioOscillator而且audioDeviceWriter具有默认属性的对象。创建一个octaveFilter对象,中心频率设置为100hz。

osc = audioooscillator;deviceWriter = audioDeviceWriter;octFilt = octaveFilter(100);

在音频流循环中,听由音频振荡器创建的音调。该音含有加性高斯噪声。

I = 1:400 x = osc();X1 = x + 0.1*randn(512,1);deviceWriter (x1);如果快速眼动(我100)= = 0 osc。频率= osc.频率*2;结束结束

创建一个频谱分析仪来查看过滤和未过滤的信号。

Scope = dsp。简介(...“PlotAsTwoSidedSpectrum”假的,...“FrequencyScale”“日志”...“FrequencyResolutionMethod”“WindowLength”...“标题”“倍频带滤波”...“ShowLegend”,真的,...“SpectralAverages”10...“ChannelNames”,{原始信号的“过滤信号”});

将音频振荡器的频率重置为默认值100hz。

osc。频率= 100;

在音频流循环中,使用八度带滤波器过滤损坏的音调。当音调在循环中改变频率时,更改八度滤波器的中心频率以匹配。作为最佳实践,一旦完成,就释放音频设备。

I = 1:400 x = osc();X1 = x + 0.1*randn(512,1);x2 = octFilt(x1);deviceWriter (x2);如果快速眼动(我100)= = 0 osc。频率= osc.频率*2;octFilt。CenterFrequency = octFilt.CenterFrequency*2;结束范围((x1, x2))结束发布(deviceWriter)发布(范围)

图频谱分析仪包含一个axis对象和其他类型为uiflowcontainer、uimenu、uitoolbar的对象。标题为Octave-Band Filtering的axes对象包含2个类型为line的对象。这些对象分别代表原始信号、滤波信号。

设计一个采样率为96khz的六阶1/3倍频滤波器。

octFilt = octaveFilter(“FilterOrder”6...“带宽”1/3倍频程的...“SampleRate”96年e3);

获取ANSI S1.11-2004标准定义的中心频率。标准定义的中心频率取决于带宽而且SampleRate属性。

centerFrequencies = getANSICenterFrequencies(octFilt)
centerFrequencies =1×53104× 0.0000 0.0000 0.0000 0.0001 0.0001 0.0001 0.0001 0.0001 0.0001 0.0002 0.0002 0.0003 0.0003 0.0004 0.0005 0.0006 0.0008 0.0010 0.0013 0.0016 0.0020 0.0020 0.0032 0.0050 0.0063 0.0079 0.0100 0.0126 0.0158 0.0200 0.0251 0.0316 0.0398 0.0501 0.0631 0.0794 0.1000 0.1259 0.1585 0.1995 0.2512 0.3162 0.3981 0.5012 0.6310 0.7943 1.0000 1.2589 1.5849 1.9953

设置倍频滤波器的中心频率为19.953 kHz,并使用“0级”合规掩码可视化响应。

octFilt。中心频率=中心频率(38);可视化(octFilt“阶级0”

图上的红色遮罩定义了滤波器的幅度响应的边界。该滤波器的幅度响应超过了顺应性掩模的上限,约为6.6 kHz。解决这个问题的一种方法是增加过滤器的阶数,使过滤器的滚转更陡。

要使倍频滤波器设计符合要求,请将倍频滤波器顺序设置为8。

octFilt。FilterOrder = 8;

使倍频滤波器设计符合要求的另一个选项是设置Oversample财产真正的.它设计并运行的过滤器是指定的两倍SampleRate减少设计阶段双线性变换的影响。

octFilt。FilterOrder = 6;octFilt。过采样=真;

设计一个六阶2/3倍频滤波器,采样率为96khz。

octFilt = octaveFilter(“FilterOrder”6...“带宽”“2/3倍频程”...“SampleRate”96年e3);

获取ANSI S1.11-2004标准定义的中心频率。标准定义的中心频率取决于带宽而且SampleRate属性。

centerFrequencies = getANSICenterFrequencies(octFilt)
centerFrequencies =1×25104× 0.0000 0.0001 0.0001 0.0002 0.0003 0.0004 0.0006 0.0010 0.0016 0.0025 0.0040 0.0063 0.0100 0.0158 0.0251 0.0398 0.0631 0.1000 0.1585 0.2512 0.3981 0.6310 1.0000 1.5849 2.5119

将倍频滤波器的中心频率设置为~ 6hz,并使用“0类”合规掩码可视化响应。

octFilt。CenterFrequency = centerFrequencies(2);可视化(octFilt“阶级0”

图上的红色遮罩定义了滤波器的幅度响应的边界。该滤波器的幅度响应低于符合性掩码的下限5.5至7.5 Hz。

八度滤波器组中的低频滤波器具有非常低的归一化中心频率,为它们设计的滤波器具有几乎在单位圆上的极。为了使该滤波器符合ANSI标准,它必须在较低的采样率下设计和操作。

为了使倍频滤波器设计符合要求,将采样率设置为48 kHz。

octFilt。SampleRate = 48e3;

创建一个dsp。一个udioFileReader逐帧读取音频。创建一个audioDeviceWriter将音频写入声卡。创建一个octaveFilter来处理音频数据。调用可视化绘制倍频滤波器的频率响应。

framength = 1024;fileReader = dsp。AudioFileReader (“RockDrums-44p1-stereo-11secs.mp3”...“SamplesPerFrame”, frameLength);deviceWriter = audioDeviceWriter(“SampleRate”, fileReader.SampleRate);octFilt = octaveFilter(“SampleRate”, fileReader.SampleRate);可视化(octFilt)

调用parameterTuner来打开一个UI来调优的参数octaveFilter而流。

parameterTuner (octFilt)

在音频流循环中:

  1. 从文件中读入一帧音频。

  2. 应用倍频滤波。

  3. 将音频帧写入音频设备以供收听。

流媒体时,调整八度滤波器的参数,并听取效果。

~isDone(fileReader) audioIn = fileReader();audioOut = octFilt(audioIn);deviceWriter (audioOut);drawnowlimitrate%需要更新参数结束

作为最佳实践,一旦完成就释放对象。

释放(deviceWriter)释放(fileReader)释放(octFilt)

更多关于

全部展开

提示

createAudioPluginClass而且configureMIDI属性的可调属性octaveFilter对面向用户的参数:

财产 范围 映射 单位
CenterFrequency [22000] 日志 赫兹
带宽 1倍频程的“2/3倍频程”的1/2倍频程1/3倍频程的“1/6倍频程”“1/12倍频程”“1/24倍频程”,或“1/48倍频程”

您的MIDI控制器范围被离散为七个级别,对应于七个带宽选择。

- - -

算法

全部展开

参考文献

[1]Orfanidis,索福克勒斯。信号处理导论.恩格尔伍德悬崖,新泽西州:普伦蒂斯大厅,2010年。

美国声学学会。八度带和分数八度带模拟和数字滤波器的美国国家标准规范.ANSI s1.11 - 2004。梅尔维尔,纽约州:美国声学学会,2009年。

扩展功能

版本历史

在R2016b中引入