Main Content

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

MATLAB でのノイズを含む正弦波信号フレームのフィルター処理

この例では、ノイズを含む信号を MATLAB® でローパス フィルター処理する方法、およびスペクトル アナライザーを使用して元の信号とフィルター処理された信号を可視化する方法を説明します。この例の Simulink® バージョンについては、金宝app仿真软件でのノイズを含む正弦波信号フレームのフィルター処理を参照してください。

信号ソースの指定

入力信号は、周波数が 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 = dsp.SpectrumAnalyzer('PlotAsTwoSidedSpectrum',false,...'SampleRate',Sine1.SampleRate,...'NumInputPorts',2,...'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 のピークはローパス フィルターの通過帯域にあるため、結果の信号はこれを維持しています。

fori = 1 : 1000 x = Sine1()+Sine2()+0.1.*randn(Sine1.SamplesPerFrame,1); y = FIRLowPass(x); SpecAna(x,y);endrelease(SpecAna)

参考

|||