Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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)

参考

| | |