octaveFilter
倍频带和分数倍频带滤波器
描述
的octaveFilter
系统对象™在每个输入通道上独立地执行倍频带或分数倍频带滤波。八度频带是一个频带,其中最高频率是最低频率的两倍。八度带和分数八度带滤波器通常用于模拟人类如何感知响度。八度滤波器最好从对数尺度上理解,对数尺度模拟了人耳如何对频谱进行加权。
要对输入执行倍频或分数倍频滤波:
创建
octaveFilter
对象并设置其属性。使用参数调用对象,就像调用函数一样。
有关系统对象如何工作的详细信息,请参见什么是系统对象?
创建
语法
描述
octFilt = octavfilter
创建一个System对象,octFilt
,它在每个输入通道上独立地执行八度带滤波。
octFilt = octaveFilter(
设置CenterFrequency财产centerFreq
)centerFreq
.
octFilt = octaveFilter(
设置带宽财产centerFreq
,bw
)bw
.
octFilt = octaveFilter(___,
设置每个属性名称,值
)的名字
到指定的价值
.未指定的属性有默认值。
octFilt = octaveFilter(1000,'1/3 octave','SampleRate',96000)
创建一个System对象,octFilt
,中心频率为1000hz, 1/3倍频滤波器带宽,采样率为96000 Hz。
属性
除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放
功能解锁它们。
如果属性为可调,您可以随时更改其值。
有关更改属性值的详细信息,请参见使用系统对象的MATLAB系统设计.
FilterOrder
- - - - - -八度阶滤波器
6
(默认)|即使是整数
倍频筛选器的顺序,指定为偶数。
可调:没有
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
CenterFrequency
- - - - - -倍频滤波器中心频率(Hz)
1000
(默认)|积极的标量
带宽
- - - - - -滤波器带宽(八度)
1倍频程的
(默认)|“2/3倍频程”
|的1/2倍频程
|1/3倍频程的
|“1/6倍频程”
|“1/12倍频程”
|“1/24倍频程”
|“1/48倍频程”
以八度为单位的过滤带宽,指定为1倍频程的
,“2/3倍频程”
,的1/2倍频程
,1/3倍频程的
,“1/6倍频程”
,“1/12倍频程”
,“1/24倍频程”
,或“1/48倍频程”
.
可调:是的
数据类型:字符
|字符串
Oversample
- - - - - -Oversample切换
假
(默认)|真正的
过采样切换,指定为假
或真正的
.
假
——倍频滤波器以输入采样率运行。真正的
——倍频滤波器以输入采样率的两倍运行。过采样最小化了双线性变换带来的频率翘曲效应。FIR半带插值器实现了倍频滤波前的过采样。半带decimator将采样率降低到经过倍频滤波后的输入采样率。
可调:没有
数据类型:逻辑
SampleRate
- - - - - -输入采样率(Hz)
44100
(默认)|积极的标量
输入采样率(以Hz为单位),指定为正标量。
可调:是的
数据类型:单
|双
使用
描述
输入参数
audioIn
- - - - - -音频输入到八度滤波器
矩阵
音频输入到倍频滤波器,指定为矩阵。矩阵的列被视为独立的音频通道。
数据类型:单
|双
输出参数
audioOut
-音频输出从八度滤波器
矩阵
音频输出从八度滤波器,返回为一个相同大小的矩阵audioIn
.
数据类型:单
|双
对象的功能
要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源obj
,使用这种语法:
发行版(obj)
特定于octaveFilter
createAudioPluginClass |
创建音频插件类,实现的功能系统对象 |
可视化 |
可视化并验证过滤器响应 |
isStandardCompliant |
验证倍频滤波器设计符合ANSI S1.11-2004标准 |
getFilter |
返回设置了设计参数的双方过滤器对象 |
getANSICenterFrequencies |
获取有效的ANSI S1.11-2004中心频率列表 |
parameterTuner |
在流处理时调优对象参数 |
MIDI
configureMIDI |
配置音频对象与MIDI控制器之间的MIDI连接 |
disconnectMIDI |
从音频对象断开MIDI控件 |
getMIDIConnections |
获取音频对象的MIDI连接 |
请注意
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)
分析倍频滤波器设计
创建一个八度音阶过滤器。可视化筛选器响应,并验证它符合类2。
octFilt = octaveFilter(“CenterFrequency”, 1000);可视化(octFilt二班的)
使用分析过滤器fvtool
.
fvtool (octFilt“Fs”octFilt.SampleRate)
的octaveFilter
对象支持多种筛金宝app选器分析方法。有关更多信息,请使用帮助
在命令行:
帮助octaveFilter.helpFilterAnalysis
以下分析方法可用于离散时间过滤器系统对象:fvtool -滤波器可视化工具info -滤波器信息freqz -频响相位-相位响应零相位-零相位响应grpdelay -群延迟响应相位-相位延迟响应impz -脉冲响应impzlength -脉冲响应长度stepz -阶跃响应zplane -极点/零图成本-实现滤波器的成本估计系统对象测量-频响顺序的测量特征-滤波器顺序系数-滤波器系数a structure firtype - Determine the type (1-4) of a linear phase FIR filter System object tf - Convert to transfer function zpk - Convert to zero-pole-gain ss - Convert to state space representation isallpass - Verify if filter System object is allpass isfir - Verify if filter System object is FIR islinphase - Verify if filter System object is linear phase ismaxphase - Verify if filter System object is maximum phase isminphase - Verify if filter System object is minimum phase isreal - Verify if filter System object is minimum real issos - Verify if filter System object is in second-order sections form isstable - Verify if filter System object is stable realizemdl - Filter realization (Simulink diagram) specifyall - Fully specify fixed-point filter System object settings cascade - Create a FilterCascade System object Second-order sections: scale - Scale second-order sections of BiquadFilter System object scalecheck - Check scaling of BiquadFilter System object reorder - Reorder second-order sections of BiquadFilter System object cumsec - Cumulative second-order section of BiquadFilter System object scaleopts - Create an options object for second-order section scaling sos - Convert to second-order-sections (for IIRFilter System objects only) Fixed-Point (Fixed-Point Designer Required): freqrespest - Frequency response estimate via filtering freqrespopts - Create an options object for frequency response estimate noisepsd - Power spectral density of filter output due to roundoff noise noisepsdopts - Create an options object for output noise PSD computation Multirate Analysis: polyphase - Polyphase decomposition of multirate filter System object gain (CIC decimator) - Gain of CIC decimator filter System object gain (CIC interpolator) - Gain of CIC interpolator filter System object For decimator, interpolator, or rate change filter System objects the analysis tools perform computations relative to the rate at which the filter is running. If a sampling frequency is specified, it is assumed that the filter is running at that rate. Help for octaveFilter.helpFilterAnalysis 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)发布(范围)
设计兼容高频滤波器
设计一个采样率为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)
在音频流循环中:
从文件中读入一帧音频。
应用倍频滤波。
将音频帧写入音频设备以供收听。
流媒体时,调整八度滤波器的参数,并听取效果。
而~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控制器范围被离散为七个级别,对应于七个 |
- - - |
算法
倍频带宽到带边转换
的octaveFilter
系统对象使用指定的中心频率和滤波器带宽(以八度为单位)来确定归一化的带边[2].
对象计算上、下带边频率:
fc归一化中心频率是否由
CenterFrequency
财产。b属性是否指定了倍频带宽
带宽
财产。例如,如果带宽
指定为1/3倍频程的
的值。b是3。G是一个转换常数:
数字滤波器设计
的octaveFilter
中指定的高阶数字带通滤波器的设计方法[1].
在此设计方法中,所需的数字带通滤波器映射到Butterworth低通模拟原型,然后将其映射回数字带通滤波器:
模拟巴特沃斯滤波器表示为二阶部分的级联:
地点:
N筛选器顺序是否由
FilterOrder
财产。模拟巴特沃斯滤波器通过双线性变换的带通版本映射到数字滤波器:
在哪里
这种映射导致以下替换:
对模拟原型进行评估:
因为年代是二阶的z时,双线性变换的带通版本为四阶z.
参考文献
[1]Orfanidis,索福克勒斯。信号处理导论.恩格尔伍德悬崖,新泽西州:普伦蒂斯大厅,2010年。
美国声学学会。八度带和分数八度带模拟和数字滤波器的美国国家标准规范.ANSI s1.11 - 2004。梅尔维尔,纽约州:美国声学学会,2009年。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
系统对象在MATLAB代码生成(MATLAB编码器)
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。