主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

冷杉ハーフバンドフィルターの設計

この例では、冷杉ハーフバンドフィルターの設計法を示します。ハーフバンドフィルターは,マルチレート信号処理アプリケーションにおいて2の係数で内挿または間引きする際に幅広く使用されます。ハーフバンドフィルターは,ポリフェーズの形式で効率的に実装されます。その理由は,その係数の約半分がゼロに等しくなるためです。

ハーフバンドフィルターには2つの重要な特徴があります。つまり,通過帯域リップルと阻止帯域リップルは同じでなければならず,通過帯域エッジと阻止帯域エッジの周波数はハーフバンド周波数f / 4(または正規化周波数のπ/ 2ラジアン/サンプル)から等距離になければなりません。

ハーフバンド係数の取得

関数firhalfbandは、冷杉ハーフバンド等リップルフィルターの係数を返します。簡単な例として96 kHzでサンプリングされたデータと通過帯域周波数22 kHzで処理を行うハーフバンドフィルターを考えます。

Fs = 96年e3;Fp = 22 e3;N = 100;num = firhalfband (N, Fp / (Fs / 2));fvt = fvtool (num,“Fs”Fs,“颜色”“白色”);fvt。MagnitudeDisplay =“零”

応答にズームインすることで,通過帯域と阻止帯域のピークツーピークリップルが同じであることを確認できます。また,Fs / 4(24千赫)点を中心とした対称性もあります。指定したとおりに通過帯域が最大22 kHzまで拡張し,26 kHzで阻止帯域が始まります。インパルス応答を調べることで,係数が1つおきに0と等しいことも確認できます。これにより,係数2で内挿/間引きするためのフィルター実装を大変効率よく行えます。

fvt。分析=“冲动”

dsp。FIRHalfbandInterpolatorおよびdsp。FIRHalfbandDecimator

関数firhalfbandには,この他にいくつかの設計オプションがあります。ただし,ほとんどの場合,dsp。FIRHalfbandInterpolatorおよびdsp。FIRHalfbandDecimatorで直接操作する方が適切です。これら2つの系统对象では,係数を設計するだけでなく,ポリフェーズの内挿/間引きを効率的に実装できます。これらは倍精度/単精度浮動小数点データだけでなく,固定小数点データのフィルター処理もサポートします。またCコードおよびHDLコード生成に加えて,手臂®®皮层Mおよび手臂皮层に最適化されたコード生成もサポートします。

halfbandInterpolator = dsp。FIRHalfbandInterpolator (“SampleRate”Fs,...“规范”“滤镜顺序和过渡宽度”...“FilterOrder”N“TransitionWidth”, 4000);fvtool (halfbandInterpolator“Fs”2 * Fs,“颜色”“白色”);

内挿を実行するには,dsp。FIRHalfbandInterpolator系统对象を使用します。これはマルチレートフィルターであるため,サンプルレートが意味するものを定義することが重要です。この系统对象やその他すべての系统对象では,サンプルレートは入力信号のサンプルレートを指します。ただし,FVToolでは,サンプルレートはフィルターが処理を行うレートとして定義されます。内挿の場合には,アップサンプリング後にフィルター処理を行います(概念上)。したがって2でアップサンプリングされるため,FVToolのサンプリングレートを2 * Fsとして指定する必要があります。

FrameSize = 256;= dsp范围。简介(“SampleRate”2 * Fs,“SpectralAverages”5);sine1 = dsp。SineWave (“频率”10 e3,“SampleRate”Fs,...“SamplesPerFrame”, FrameSize);sine2 = dsp。SineWave (“频率”20 e3,“SampleRate”Fs,...“SamplesPerFrame”, FrameSize);抽搐toc < 10 x = sine1() + sine2() + 0.01.*randn(FrameSize,1);% 96千赫y = halfbandInterpolator (x);% 192千赫范围(y);结束释放(范围);

スペクトルの複製は約40 dB減衰することに注意してください。これはハーフバンドフィルターによって生じるおおよその減衰量です。フィルターの群遅延を補正する際には,入力サンプルと内挿されたサンプルを重ねてプロットできます。フィルターの出力時に入力サンプルが変わっていないことに注意してください。これは,ハーフバンドのポリフェーズ分岐のいずれかが,入力サンプルを変化させない純粋な遅延分岐であるためです。

grpDel = 50;n = 0:2:511;茎(n (1: end-grpDel / 2), x (1: end-grpDel / 2),“k”“填充”)举行ν= 0:511;茎(ν(1:end-grpDel), y (grpDel + 1:结束)传说(输入样本的“插值样本”

間引きの場合には,フィルター処理後にダウンサンプリング(概念上)するため,dsp。FIRHalfbandDecimatorで指定したサンプルレートはフィルターのサンプルレートに対応します。そのため,間引きでは,FVToolで指定したFsを係数で乗算する必要はありません。

FrameSize = 256;傅氏国际= 2 * Fs;halfbandDecimator = dsp。FIRHalfbandDecimator (“SampleRate”傅氏国际,...“规范”“滤镜顺序和过渡宽度”...“FilterOrder”N“TransitionWidth”, 4000);fvtool (halfbandDecimator“Fs”傅氏国际,“颜色”“白色”);= dsp范围。简介(“SampleRate”Fs,“SpectralAverages”5);sine1 = dsp。SineWave (“频率”10 e3,“SampleRate”Fs,...“SamplesPerFrame”, FrameSize);sine2 = dsp。SineWave (“频率”20 e3,“SampleRate”Fs,...“SamplesPerFrame”, FrameSize);抽搐toc < 10 x = sine1() + sine2() + 0.01.*randn(FrameSize,1);% 96千赫y = halfbandInterpolator (x);% 192千赫xd = halfbandDecimator (y);% 96千赫范围(xd);结束释放(范围);

フィルター係数の取得

関数特遣部队を使用すると,内挿/間引きからフィルター係数を抽出できます。

num =特遣部队(halfbandInterpolator);% Or num = tf(halfbandDecimator);

さまざまな設計仕様の使用

フィルター次数と遷移幅を指定する代わりに,所定の遷移幅と阻止帯域の減衰量を与えて最小次数のフィルターを設計できます。

Ast = 80;% 80分贝halfbandInterpolator = dsp。FIRHalfbandInterpolator (“SampleRate”Fs,...“规范”“过渡宽度和阻带衰减”...“StopbandAttenuation”Ast,“TransitionWidth”, 4000);fvtool (halfbandInterpolator“Fs”2 * Fs,“颜色”“白色”);

すべての内挿と同様に,絶対単位での通過帯域ゲインは内挿係数と等価です(ハーフバンドの場合は2)。これは,6.02 dBの通過帯域ゲインに相当します。

フィルター次数と阻止帯域の減衰量を指定することも可能です。

halfbandDecimator = dsp。FIRHalfbandDecimator (“SampleRate”Fs,...“规范”'滤波器顺序和阻带衰减'...“StopbandAttenuation”Ast,“FilterOrder”N);fvtool (halfbandDecimator“Fs”Fs,“颜色”“白色”);

内挿と異なり,間引きでは通過帯域に1(0分贝)のゲインがあります。

フィルターバンクでのハーフバンドフィルターの使用

ハーフバンドの内挿と間引きを使用すると,合成/解析フィルターバンクを効率的に実装できます。これまでに示したハーフバンドフィルターは,すべてローパスフィルターでした。1つの加算器を追加すると,ローパス応答に加えてハイパス応答も得られ,2つの応答をフィルターバンクの実装に使用できるようになります。

以下のコードは,直交ミラーフィルター(QMF)バンクをシミュレートします。1 kHzと3千赫の正弦波で構成される8 kHz信号が,ローパス/ハイパスハーフバンド間引きを使用して2つの4 kHz信号に分割されます。ローパス信号は1 kHzの正弦波を保持し,ハイパス信号は3千赫の正弦波(ダウンサンプリング後に1 kHzにエイリアシングされる)を保持します。次に,信号は合成フィルターバンクによって,ハーフバンド内挿を使用して統合されます。ハイパス分岐により,エイリアシングされた1 kHzの正弦波がアップコンバートされ,3千赫に戻ります。内挿された信号のサンプリングレートは8 kHzです。

Fs1 = 8000;%单位= Hz规范=“滤镜顺序和过渡宽度”;订单= 52个;TW = 4.1 e2;%单位= Hz%构造FIR半带插值器halfbandInterpolator = dsp。FIRHalfbandInterpolator (...“规范”规范,...“FilterOrder”订单,...“TransitionWidth”TW,...“SampleRate”Fs1/2,...“FilterBankInputPort”,真正的);%构造FIR半带小数halfbandDecimator = dsp。FIRHalfbandDecimator (...“规范”规范,...“FilterOrder”订单,...“TransitionWidth”TW,...“SampleRate”, Fs1);%的输入f1 = 1000;f2 = 3000;InputWave = dsp。SineWave (“频率”(f1、f2),“SampleRate”, Fs1、...“SamplesPerFrame”, 1024,“振幅”0.25 [1]);%构造频谱分析仪对象来查看输入和输出= dsp范围。简介(“SampleRate”, Fs1、...“PlotAsTwoSidedSpectrum”假的,“ShowLegend”,真的,“YLimits”...30 [-120],...“标题”...'正交镜滤波器的输入信号和输出信号');范围。ChannelNames = {“输入”“输出”};抽搐toc < 10 Input = sum(InputWave(),2);NoisyInput =输入+ (10 ^ 5)* randn (1024 1);(低通、高通)= halfbandDecimator (NoisyInput);输出= halfbandInterpolator(低通、高通);范围([NoisyInput、输出]);结束释放(范围);

詳細設計オプション:さまざまな設計アルゴリズムの指定

これまでに示した設計は,すべて最適な等リップル設計でした。fdesign.interpolatorおよびfdesign.decimatorを使用すると,その他の設計アルゴリズムを利用できます。

Fs = 44.1 e3;N = 90;TW = 1000 / Fs;%过渡宽度filtSpecs = fdesign.interpolator (2“halfband”“N, TW”N、TW);equirippleHBFilter =设计(filtSpecs,“equiripple”“SystemObject”,真正的);leastSquaresHBFilter =设计(filtSpecs,“firls”“SystemObject”,真正的);kaiserHBFilter =设计(filtSpecs,“kaiserwin”“SystemObject”,真正的);

FVToolで設計を比較できます。さまざまな設計により,阻止帯域の最小減衰量とより全体的な減衰量のトレードオフが可能になります。

fvt = fvtool (equirippleHBFilter leastSquaresHBFilter kaiserHBFilter,...“Fs”2 * Fs,“颜色”“白色”);传奇(fvt“Equiripple设计”“最小二乘设计”...“Kaiser-window设计”

阻止帯域の減衰の制御

代わりに次数と阻止帯域の減衰を指定することもできます。これにより,全体的な阻止帯域の減衰量と遷移幅とのトレードオフが可能になります。

Ast = 60;最小阻带衰减filtSpecs = fdesign.interpolator (2“halfband”“N, Ast”, N, Ast);equirippleHBFilter =设计(filtSpecs,“equiripple”“SystemObject”,真正的);kaiserHBFilter =设计(filtSpecs,“kaiserwin”“SystemObject”,真正的);fvt = fvtool (equirippleHBFilter kaiserHBFilter,“Fs”2 * Fs,“颜色”“白色”);传奇(fvt“Equiripple设计”“Kaiser-window设计”

最小次数設計

設計仕様を満たすために必要な最小次数のフィルターを設計する場合には,等リップル設計に加えてカイザーウィンドウ設計も使用できます。カイザーウィンドウ設計のための実際の次数は,等リップル設計に必要な次数より大きくなりますが,代わりに全体的な阻止帯域の減衰量は改善されます。

Fs = 44.1 e3;TW = 1000 / (Fs / 2);%过渡宽度Ast = 60;% 60 dB在阻带中的最小衰减filtSpecs = fdesign.decimator (2“halfband”“TW, Ast”TW, Ast);equirippleHBFilter =设计(filtSpecs,“equiripple”“SystemObject”,真正的);kaiserHBFilter =设计(filtSpecs,“kaiserwin”“SystemObject”,真正的);fvt = fvtool (equirippleHBFilter kaiserHBFilter,“Fs”Fs,“颜色”“白色”);传奇(fvt“Equiripple设计”“Kaiser-window设计”

阻止帯域の減衰が増大する等リップル設計

カイザーウィンドウフィルターを設計する代わりに,変更した”等リップル”設計を使用して阻止帯域の減衰量を増やすこともできます。

equirippleHBFilter1 =设计(filtSpecs,“equiripple”...“StopbandShape”“1 / f”“StopbandDecay”4“SystemObject”,真正的);equirippleHBFilter2 =设计(filtSpecs,“equiripple”...“StopbandShape”“线性”“StopbandDecay”, 53.333,“SystemObject”,真正的);fvt = fvtool (equirippleHBFilter1 equirippleHBFilter2,...“Fs”Fs,“颜色”“白色”);传奇(fvt'阻带衰减为(1/f)^4'的阻带衰减线性的

ハイパスハーフバンドフィルター

ハイパスハーフバンドフィルターは,ローパスハーフバンドフィルターの1つおきの係数の符号を変更することで,ローパスハーフバンドフィルターから取得できます。あるいは,“类型”プロパティを“高反差保留”に設定することで,ハイパスハーフバンドを直接設計することもできます。

filtSpecs = fdesign.decimator (2“halfband”...“类型”“高反差保留”“TW, Ast”TW, Ast);halfbandHPFilter =设计(filtSpecs,“equiripple”...“StopbandShape”“线性”“StopbandDecay”, 53.333,“SystemObject”,真正的);fvt = fvtool (halfbandHPFilter equirippleHBFilter2,“Fs”Fs,“颜色”“白色”);传奇(fvt“高反差保留halfband过滤器的“低通halfband过滤”