MATLAB でのノイズを含む正弦波信号フレームのフィルター処理
この例では、ノイズを含む信号を MATLAB® でローパス フィルター処理する方法、およびスペクトル アナライザーを使用して元の信号とフィルター処理された信号を可視化する方法を説明します。この例の Simulink® バージョンについては、Simulink でのノイズを含む正弦波信号フレームのフィルター処理を参照してください。
信号ソースの指定
入力信号は、周波数が 1 kHz と 10 kHz の 2 つの正弦波の和です。サンプリング周波数は 44.1 kHz です。
Sine1 = dsp.SineWave('Frequency',1e3,'SampleRate',44.1e3); Sine2 = dsp.SineWave('Frequency',10e3,'SampleRate',44.1e3);
ローパス フィルターの作成
ローパス FIR フィルター dsp.LowpassFilter
は、一般化された Remez FIR フィルター設計アルゴリズムを使用して、最小次数の FIR ローパス フィルターを設計します。通過帯域周波数を 5000 Hz に設定し、阻止帯域周波数を 8000 Hz に設定します。通過帯域リップルは 0.1 dB、阻止帯域の減衰量は 80 dB です。
FIRLowPass = dsp.LowpassFilter('PassbandFrequency',5000,... 'StopbandFrequency',8000);
Spectrum Analyzer の作成
Spectrum Analyzer を設定して、元の信号とフィルター処理された信号のパワー スペクトルを比較します。スペクトルの単位は dBm です。
SpecAna = spectrumAnalyzer('PlotAsTwoSidedSpectrum',false,... 'SampleRate',Sine1.SampleRate,... 'ShowLegend',true, ... 'YLimits',[-145,45]); SpecAna.ChannelNames = {'Original noisy signal',... 'Lowpass filtered signal'};
フレームごとのサンプル数の指定
この例では、一度に 1 フレームずつデータを処理する、フレームベースの処理を使用します。データの各フレームには独立チャネルからの連続サンプルが含まれます。フレームベースの処理では、複数のサンプルを一度に処理できるため、多くの信号処理アプリケーションで有利です。データをフレームにバッファリングしてマルチサンプルのデータ フレームを処理することにより、信号処理アルゴリズムの計算時間を改善できます。フレームごとのサンプル数を 4000 に設定します。
Sine1.SamplesPerFrame = 4000; Sine2.SamplesPerFrame = 4000;
ノイズを含む正弦波信号のフィルター処理
標準偏差 0.1 でゼロ平均のホワイト ガウス ノイズを正弦波の和に付加します。FIR フィルターを使用して結果をフィルター処理します。シミュレーションの実行中に、Spectrum Analyzer には、ソース信号の 8000 Hz を超える周波数が減衰することが示されます。1 kHz のピークはローパス フィルターの通過帯域にあるため、結果の信号はこれを維持しています。
for i = 1 : 1000 x = Sine1()+Sine2()+0.1.*randn(Sine1.SamplesPerFrame,1); y = FIRLowPass(x); SpecAna(x,y); end release(SpecAna)
参考
MATLAB でのローパス フィルター設計 | Simulink でのノイズを含む正弦波信号フレームのフィルター処理 | MATLAB でのストリーミング信号処理の紹介 | Multirate Filtering in MATLAB and Simulink