Main Content

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

dsp.SineWave

説明

dsp.SineWave System object™ は実数または複素数のマルチチャネルの正弦波信号を生成します。各出力チャネルには独立した振幅と周波数および位相があります。

実数正弦波および複素正弦波ともに、Amplitudeプロパティ、FrequencyプロパティおよびPhaseOffsetプロパティをスカラーまたは長さが N のベクトルにすることができます。ここで、N は出力でのチャネル数です。これらのプロパティの少なくとも 1 つを長さが N のベクトルとして指定する場合、他のプロパティに対して指定されたスカラー値は N の各チャネルに対して適用されます。

離散時間正弦波信号を生成するには、次のようにします。

  1. dsp.SineWave オブジェクトを作成し、そのプロパティを設定します。

  2. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の機能の詳細については、System object とはを参照してください。

作成

説明

sine = dsp.SineWave は、振幅 1、周波数 100 Hz および位相オフセット 0 で実数値正弦波を生成する正弦波オブジェクトを作成します。既定の設定では、正弦波オブジェクトは 1 つのサンプルのみを生成します。

sine = dsp.SineWave(Name,Value) は指定されたそれぞれのプロパティ セットを指定された値に設定して、正弦波オブジェクトを作成します。各プロパティ名を一重引用符で囲みます。

例: sine = dsp.SineWave('Amplitude',2);

sine = dsp.SineWave(amp,freq,phase,Name,Value) は、Amplitudeプロパティが ampFrequencyプロパティが freqPhaseOffsetプロパティが phase、他の指定のプロパティが指定の値に設定された正弦波オブジェクトを作成します。

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release を使用します。

プロパティが "調整可能" の場合、その値をいつでも変更できます。

プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。

正弦波の振幅。次のいずれかを指定します。

  • scalar –– スカラーがすべてのチャネルに適用されます。

  • vector –– 長さ N のベクトルに、N 個の出力チャネルそれぞれの正弦波の振幅が含まれます。ベクトルの長さはFrequencyプロパティとPhaseOffsetプロパティで指定した長さと同じでなければなりません。

調整可能: Yes

依存関係

このプロパティは、Method'Trigonometric function' または 'Differential' に設定した場合にのみ調整可能です。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

正弦波の周波数 (Hz 単位)。次のいずれかを指定します。

  • scalar –– スカラーがすべてのチャネルに適用されます。

  • vector –– 長さ N のベクトルに、N 個の出力チャネルそれぞれの正弦波の周波数が含まれます。ベクトルの長さはAmplitudeプロパティとPhaseOffsetプロパティで指定した長さと同じでなければなりません。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

正弦波の位相オフセット (ラジアン単位)。次のいずれかを指定します。

  • scalar –– スカラーがすべてのチャネルに適用されます。

  • vector –– 長さ N のベクトルに、N 個の出力チャネルそれぞれの正弦波の位相オフセットが含まれます。ベクトルの長さはAmplitudeプロパティとFrequencyプロパティで指定した長さと同じでなければなりません。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

波形が実数か複素数かを示すフラグ。次のいずれかを指定します。

  • false –– 波形出力は実数です。

  • true –– 波形出力は複素数です。

正弦波を生成するために使用される手法。次のいずれかを指定します。

  • 'Trigonometric function' –– オブジェクトは、連続時間関数をサンプリングして正弦波を計算します。

  • 'Table lookup' –– オブジェクトはシミュレーションの開始時に各出力正弦波の一意のサンプルを事前計算し、必要に応じてサンプルをメモリから呼び出します。

  • 'Differential' –– オブジェクトはインクリメンタル アルゴリズムを使用します。このアルゴリズムは、前のサンプル時間で計算された出力値と事前計算された更新項目に基づいて出力サンプルを計算します。

速度またはメモリに対する正弦値テーブルの最適化。次のいずれかに指定します。

  • 'Speed' –– テーブルに k 要素が含まれます。この k は正弦波の 1 完全周期での入力サンプル数です。各正弦波の期間は 1/Fs の整数倍でなければなりません。ここで、Fs はSampleRateプロパティの値です。つまり、Frequencyプロパティの各要素は Fs/m の形式でなければなりません。ここで m は 1 より大きい整数です。

  • 'Memory' –– テーブルに k/4 要素が含まれます。

依存関係

このプロパティは、Method プロパティを 'Table lookup' に設定した場合にのみ適用されます。

出力信号のサンプル レート (Hz 単位)。正のスカラーで指定します。

例: 44100

例: 22050

出力フレームにバッファリングする、各正弦波からの連続するサンプル数。正の整数として指定します。

例: 1000

例: 5000

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

正弦波出力のデータ型。'double''single'、または 'Custom' として指定します。

固定小数点プロパティ

出力の語長と小数部の長さ。語長が 16 の自動符号付きの数値型に指定します。

例: numerictype([],32,30)

例: numerictype([],16,15)

依存関係

このプロパティは、Methodプロパティを 'Table lookup'OutputDataTypeプロパティを 'Custom' に設定した場合にのみ適用されます。

使用法

説明

sineOut = sine() は正弦波出力 sineOut を作成します。

出力引数

すべて展開する

正弦波出力。ベクトルまたは行列で返されます。SamplesPerFrameプロパティによって、出力行列の行数が決まります。FrequencyプロパティまたはPhaseOffsetプロパティがベクトルの場合、ベクトルの長さで出力行列の列 (チャネル) の数が決まります。Frequency プロパティまたは PhaseOffset プロパティがスカラーの場合、出力行列のチャネル数は 1 になります。

OutputDataTypeプロパティは、出力データ型を設定します。

データ型: single | double | fi

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、次の構文を使用します。

release(obj)

すべて展開する

stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて折りたたむ

振幅 2、周波数 10 Hz および初期位相 0 で正弦波を生成します。

sine1 = dsp.SineWave(2,10);
sine1.SamplesPerFrame = 1000;
y = sine1();
plot(y)

Figure contains an axes object. The axes object contains an object of type line.

pi/2 ラジアンの位相で 2 つの正弦波オフセットを生成します。

sine2 = dsp.SineWave;
sine2.Frequency = 10;
sine2.PhaseOffset = [0 pi/2];
sine2.SamplesPerFrame = 1000;
y = sine2();
plot(y)

Figure contains an axes object. The axes object contains 2 objects of type line.

この例では、ノイズを含む信号を 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)

周波数が 1 kHz、10 kHz、および 15 kHz の 3 つの正弦波で構成される離散時間正弦波信号のバンドパス フィルター処理を行います。

最初にバンドパス フィルター設計仕様オブジェクトを作成し、次いでその仕様を使用してフィルターを設計することで、FIR 等リップル バンドパス フィルターを設計します。

バンドパス フィルターの設計

fdesign.bandpass を使用して、バンドパス フィルター設計仕様オブジェクトを作成します。

bandpassSpecs = fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2', ...
    1/4,3/8,5/8,6/8,60,1,60);

このオブジェクトの使用可能な設計法を示します。

designmethods(bandpassSpecs)
Design Methods for class fdesign.bandpass (Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2):


butter
cheby1
cheby2
ellip
equiripple
kaiserwin

等リップル フィルターを設計するには、'equiripple' を選択します。

bpFilter = design(bandpassSpecs,'equiripple','Systemobject',true)
bpFilter = 
  dsp.FIRFilter with properties:

            Structure: 'Direct form'
      NumeratorSource: 'Property'
            Numerator: [-0.0043 -3.0812e-15 0.0136 3.7820e-15 -0.0180 -4.2321e-15 7.1634e-04 4.0993e-15 0.0373 -4.1057e-15 -0.0579 3.7505e-15 0.0078 -3.4246e-15 0.1244 2.4753e-15 -0.2737 -8.6287e-16 0.3396 -8.6287e-16 -0.2737 ... ] (1x37 double)
    InitialConditions: 0

  Use get to show all properties

設計したフィルターの周波数応答を可視化します。

fvtool(bpFilter,'Fs',44100)

Figure Figure 1: Magnitude Response (dB) contains an axes object. The axes object with title Magnitude Response (dB), xlabel Frequency (kHz), ylabel Magnitude (dB) contains 2 objects of type line.

正弦波信号の作成

1 kHz、10 kHz、および 15 kHz の周波数をもつ 3 つの正弦波の和である信号を作成します。スペクトル アナライザーを初期化し、元の信号とフィルター処理された信号を表示します。

Sine1 = dsp.SineWave('Frequency',1e3,'SampleRate',44.1e3,'SamplesPerFrame',4000);
Sine2 = dsp.SineWave('Frequency',10e3,'SampleRate',44.1e3,'SamplesPerFrame',4000);
Sine3 = dsp.SineWave('Frequency',15e3,'SampleRate',44.1e3,'SamplesPerFrame',4000);

SpecAna = spectrumAnalyzer('PlotAsTwoSidedSpectrum',false, ...
    'SampleRate',Sine1.SampleRate, ...
    'ShowLegend',true, ...
    'YLimits',[-240,45]);

SpecAna.ChannelNames = {'Original noisy signal','Bandpass filtered signal'};

正弦波信号のフィルター処理

設計したバンドパス フィルターを使用して正弦波信号をフィルター処理します。元の信号とフィルター処理された信号をスペクトル アナライザーで表示します。1 kHz のトーンはフィルターで除外され、減衰します。10 kHz のトーンは影響を受けず、15 kHz のトーンはフィルターの遷移帯域に現れるため、少し減衰します。

for i = 1:5000
    x = Sine1()+Sine2()+Sine3();
    y = bpFilter(x);
    SpecAna(x,y);
end
release(SpecAna)

詳細

すべて展開する

アルゴリズム

すべて展開する

拡張機能

バージョン履歴

R2012a で導入