このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では、冷杉フィルターを設計し実装する方法を示します。2つのコマンドライン関数fir1
とdesignfilt
および対話型のフィルターデザイナーアプリを使用します。
例で使用する信号を作成します。信号は,加法性 ホワイトガウスノイズを伴う100 Hz正弦波です。再現性のある結果を得るために乱数発生器を既定の状態に設定します。
rng默认的Fs = 1000;t = linspace (0, 1, Fs);x = cos(2 *π* 100 * t) + 0.5 * randn(大小(t));
フィルター設計は,次数が20日カットオフ周波数が150 Hzの冷杉ローパスフィルターです。長さがフィルター次数よりも1サンプル大きく,
のカイザーウィンドウを使用します。カイザーウィンドウについての詳細は,関数凯撒
を参照してください。
fir1
を使用してフィルターを設計します。fir1
は,区間[0,1]で正規化された周波数を必要とします。ここで1は
ラジアン/サンプルに相当します。fir1
を使用するには,すべての周波数仕様を正規化周波数に変換しなければなりません。
フィルターを設計してそのフィルターの振幅応答を表示します。
fc = 150;Wn = (2 / Fs) *俱乐部;Wn b = fir1(20日,“低”3)、kaiser(21日);fvtool (b, 1“Fs”Fs)
信号にフィルターを適用し,100 Hzの正弦波の最初の10周期の結果をプロットします。
y =过滤器(b, 1, x);xlim([0 0.1]) xlabel(t,x,t,y)“时间(s)”) ylabel (“振幅”)传说(原始信号的,过滤数据的)
designfilt
を使用して同じフィルターを設計します。フィルター応答を“lowpassfir”
に設定し,仕様を名称,值
のペアとして入力します。designfilt
では,フィルターの設計を赫兹で指定できます。
Fs = 1000;高清= designfilt (“lowpassfir”,“FilterOrder”, 20岁,“CutoffFrequency”, 150,...“DesignMethod”,“窗口”,“窗口”{@kaiser 3},“SampleRate”Fs);
データをフィルター処理して結果をプロットします。
日元=过滤器(高清,x);Plot (t,x,t,y1) xlim([0 0.1]) xlabel(“时间(s)”) ylabel (“振幅”)传说(原始信号的,过滤数据的)
この例では,ウィンドウ法を対話型のフィルターデザイナーアプリで使用して,ローパス冷杉フィルターの設計と実装を行う方法を示します。
コマンドラインでfilterDesigner
と入力してアプリを起動します。
[応答タイプ]を[ローパス]に設定します。
[設計法]を(杉木)に設定し,[ウィンドウ]法を選択します。
[フィルター次数)で[次数指定]を選択します。20次数をに設定します。
[周波数仕様]で,[単位]を(赫兹)に,(Fs)1000年をに,(Fc)150年をにそれぞれ設定します。
[フィルター設計]をクリックします。
[ファイル]、[エクスポート…]を選択して、冷杉フィルターを係数またはフィルターオブジェクトとしてMATLAB®ワークスペースにエクスポートします。この例では,フィルターをオブジェクトとしてエクスポートします。変数名を高清
と指定します。
[エクスポート]をクリックします。
コマンドウィンドウで,エクスポートしたフィルターオブジェクトを使用して入力信号をフィルター処理します。100赫兹の正弦波の最初の10周期の結果をプロットします。
y2 =过滤器(高清,x);Plot (t,x,t,y2) xlim([0 0.1]) xlabel(“时间(s)”) ylabel (“振幅”)传说(原始信号的,过滤数据的)
[ファイル]>(MATLABコードを生成)>[フィルター設計関数)を選択してMATLAB関数を生成し,自分の仕様でフィルターオブジェクトを作成します。
また,対話型のツールfilterBuilder
を使用してフィルターを設計することもできます。
この例では,バンドパスフィルターを設計して,最小次数の冷杉等リップルフィルターとIIRバタワースフィルターを使ってデータをフィルターする方法を示します。実際の信号の多くは,振動コンポーネント,低周波のトレンドおよび加法性ノイズの重ね合わせとしてモデル化できます。たとえば,経済データには多くの場合,ゆっくり変化する上向きまたは下向きのトレンド上に重ね合わされた周期を表す変動が含まれています。さらに加法性ノイズコンポーネントにより,変動過程における測定誤差と固有のランダムな変動の組み合わせが加えられます。
以下の例では,何らかの過程を1年間毎日サンプリングすると仮定します。過程は,概ね週単位,月単位での変動すると仮定します。さらに,データは低周波の上向きトレンドを持ち,加法性 ホワイトガウスノイズがあります。
信号を1/7および1/30周期/日の周波数をもつ2つの正弦波の重ね合わせとして作成します。低周波の増加トレンド項と ホワイトガウスノイズを追加します。再現可能な結果が必要な場合は,乱数発生器をリセットします。データは1サンプル/日でサンプリングされます。結果の信号とパワースペクトル密度(PSD)推定をプロットします。
rng默认的Fs = 1;n = 1:365;x = cos(2 *π* (1/7)* n) + cos(2 *π* (1/30)* nπ/ 4);趋势= 3 * sin(2 *π* (1/1480)* n);y = x +趋势+ 0.5 * randn(大小(n));[pxx f] =周期图(y, [], [], Fs);Subplot (2,1,1) plot(n,y) xlim([1 365]) xlabel(“天”图(f,10*log10(pxx)) xlabel(“周期/天”) ylabel (“数据库”网格)
低周波のトレンドが,低周波パワーの増加としてパワースペクトル密度推定に現れます。低周波パワーは1/30周期/日において変動の約10 dB上に現れます。この情報をフィルターの阻止帯域の仕様に使用します。
最小次数の冷杉等リップルフィルターとIIRバタワースフィルターを次の仕様で設計します。通過帯域が(1/40,1/4)周期/日,阻止帯域が[0,1/60]および(1/4、1/2)周期/日とします。両方の阻止帯域の減衰量を10 dBに通過帯域リップルの許容誤差を1 dBに設定します。
Hd1 = designfilt (“bandpassfir”,...“StopbandFrequency1”, 1/60,“PassbandFrequency1”, 1/40,...“PassbandFrequency2”1/4,“StopbandFrequency2”1/2,...“StopbandAttenuation1”10“PassbandRipple”, 1...“StopbandAttenuation2”10“DesignMethod”,“equiripple”,“SampleRate”Fs);Hd2 = designfilt (“bandpassiir”,...“StopbandFrequency1”, 1/60,“PassbandFrequency1”, 1/40,...“PassbandFrequency2”1/4,“StopbandFrequency2”1/2,...“StopbandAttenuation1”10“PassbandRipple”, 1...“StopbandAttenuation2”10“DesignMethod”,“黄油”,“SampleRate”Fs);
冷杉およびIIRフィルターの次数とアンラップされた位相応答を比較します。
流(' FIR滤波器的顺序是%d\n', filtord (Hd1))
FIR滤波器的阶数是78
流(' IIR过滤器的顺序是%d\n'filtord (Hd2))
IIR滤波器的阶数为8
[phifir w] = phasez (Hd1, [], 1);[phiiir w] = phasez (Hd2 [], 1);图绘制(w,打开(phifir))在情节(w,打开(phiiir))从包含(“周期/天”) ylabel (“弧度”)传说(冷杉Equiripple过滤器的,IIR巴特沃斯滤波器的网格)
IIRフィルターは冷杉フィルターよりもずっと低い次数をもっています。しかし、冷杉フィルターには通過帯域にわたっての線形位相応答があり,これはIIRフィルターにはありません。冷杉フィルターはフィルター通過帯域内のすべての周波数を同等に遅延しますが,IIRフィルターはそうではありません。
また,周波数の単位あたりの位相の変化率は,IIRフィルターよりも冷杉フィルターでの方が大きくなっています。
比較用に,ローパス冷杉等リップルフィルターを設計します。ローパスフィルターの仕様は,通過帯域を[0,1/4]周期/日,阻止帯域の減衰量を10 dB相当,通過帯域リップル許容誤差を1 dBに設定するものとします。
Hdlow = designfilt (“lowpassfir”,...“PassbandFrequency”1/4,“StopbandFrequency”1/2,...“PassbandRipple”, 1“StopbandAttenuation”10...“DesignMethod”,“equiripple”,“SampleRate”1);
バンドパスフィルターおよびローパスフィルターを使ってデータをフィルター処理します。
yfir =过滤器(Hd1, y);yiir =过滤器(Hd2 y);ylow =过滤器(Hdlow y);
バンドパスIIRフィルター出力のPSD推定をプロットします。次のコードでyiir
をyfir
と置き換えて、冷杉バンドパスフィルター出力のPSD推定を表示できます。
[pxx f] =周期图(yiir, [] [], Fs);情节(f, 10 * log10 (pxx))包含(“周期/天”) ylabel (“数据库”网格)
PSD推定は,バンドパスフィルターにより低周波トレンドと高周波ノイズが減衰していることを示しています。
冷杉フィルターとIIRフィルターの最初の120日間の出力をプロットします。
图(n,yfir,n,yiir)轴([1 120 -2.8])xlabel(“天”)传说(“FIR带通滤波器输出”,IIR带通滤波器输出,...“位置”,“东南”)
冷杉フィルターでの位相遅延の増大は,フィルター出力で明確に示されています。
比較のために7日および30日周期の重ね合わせの上にローパス冷杉フィルター出力を重ねてプロットします。
Plot (n,x,n,黄色)xlim([1 365]) xlabel(“天”)传说(“7天和30天周期”,“FIR低通滤波器输出”,...“位置”,“西北”)
上記のプロットでは,ローパスフィルター出力で低周波トレンドが明確なことがわかります。ローパスフィルターでは7日および30日の周期が保持されますが,バンドパスフィルターは低周波トレンドも削除するため,この例ではバンドパスフィルターの方が優れた挙動を示しています。
この例では,ゼロ位相フィルター処理を実行する方法を示します。
fir1
とdesignfilt
を使って,信号の生成とローパスフィルターの設計を再度行います。これらの変数が既にワークプレースにある場合は,次のコードを実行する必要はありません。
rng默认的Fs = 1000;t = linspace (0, 1, Fs);x = cos(2 *π* 100 * t) + 0.5 * randn(大小(t));%使用fir1fc = 150;Wn = (2 / Fs) *俱乐部;Wn b = fir1(20日,“低”3)、kaiser(21日);%使用designfilt高清= designfilt (“lowpassfir”,“FilterOrder”, 20岁,“CutoffFrequency”, 150,...“DesignMethod”,“窗口”,“窗口”{@kaiser 3},“SampleRate”Fs);
过滤器
を使用してデータをフィルター処理します。フィルター出力の最初の100ポイントを,入力信号と同じ振幅と初期位相をもつ正弦波と重ね合わせてプロットします。
你=过滤器(高清,x);鑫= cos(2 *π* 100 * t);图(t,xin,t,yout) xlim([0 0.1]) xlabel(“时间(s)”) ylabel (“振幅”)传说(输入正弦波的,过滤数据的网格)
フィルター処理されたデータの最初の0.01秒に着目すると,出力が入力に対して遅延していることがわかります。遅延は約0.01秒で,これはサンプルにおける冷杉フィルターの長さのほぼ半分 に相当します。
この遅延は,フィルターの位相応答によるものです。これらの例における冷杉フィルターは,我型の線形位相フィルターです。フィルターの群遅延は10サンプルです。
fvtool
を使用して群遅延をプロットします。
fvtool(高清“分析”,“grpdelay”)
多くのアプリケーションで,位相の歪みは許容されています。このことは,位相応答が線形の場合に特に当てはまります。他のアプリケーションでは,ゼロ位相応答のフィルターの使用が望まれます。ゼロ位相応答は,非因果性フィルターでは技術的に不可能です。ただし,filtfilt
による因果性フィルターを使用してゼロ位相フィルター処理を実装することができます。
filtfilt
を使用して入力信号をフィルター処理します。応答をプロットして,过滤器
およびfiltfilt
で取得したフィルター出力を比較します。
yzp = filtfilt(高清,x);图(t,xin,t,yout,t,yzp) xlim([0 0.1]) xlabel(“时间(s)”) ylabel (“振幅”)传说(100 - hz正弦波的,“过滤信号”,“零相位滤波”,...“位置”,“东北”)
上の図で,filtfilt
出力には冷杉フィルターの位相応答による遅延が現れないことがわかります。