Main Content

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

comm.PhaseNoise

位相ノイズをベースバンド信号に適用する

説明

comm.PhaseNoiseSystem object™ は位相ノイズを複素信号に追加します。このオブジェクトは無線通信の送信機または受信機のローカルの発振器によって生じた損失をエミュレートします。オブジェクトは、指定されたスペクトル マスクに従ってフィルター処理された位相ノイズを生成し、それらを入力信号に追加します。位相ノイズ モデリングの説明については、アルゴリズムを参照してください。

comm.PhaseNoise オブジェクトを使用して位相ノイズを追加するには、以下を行います。

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

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

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

作成

説明

phznoise = comm.PhaseNoise は、既定のプロパティ値で位相ノイズ System object を作成します。

phznoise = comm.PhaseNoise(Name,Value) は、指定されたプロパティ Name を指定された Value に設定して、位相ノイズ オブジェクトを作成します。(Name1,Value1,...,NameN,ValueN) のように、追加の名前と値のペアの引数を任意の順番で指定できます。

phznoise = comm.PhaseNoise(level,offset,samplerate) は、値のみの引数として指定された、位相ノイズ レベル、周波数のオフセット、およびサンプルレートのプロパティを使用して位相ノイズ オブジェクトを作成します。値のみの引数を指定するときは、先行する値のみの引数をすべて指定しなければなりません。

プロパティ

すべて展開する

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

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

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

ヘルツあたりの搬送波に対するデシベル単位の位相ノイズ レベル (dBc/Hz)。負のスカラーのベクトルとして指定します。Level プロパティおよび FrequencyOffset プロパティの長さは同じでなければなりません。

データ型: double

Hz 単位の周波数オフセット。正の増加する値のベクトルとして指定します。Level プロパティおよび FrequencyOffset プロパティの長さは同じでなければなりません。

データ型: double

秒あたりのサンプル単位のサンプルレート。正のスカラーとして指定します。エイリアシングを回避するため、サンプルレートは、FrequencyOffset によって指定された最大値の 2 倍より大きくなければなりません。

データ型: double

乱数ストリームのソース。'Global stream' または 'mt19937ar with seed' として指定します。RandomStream'mt19937ar with seed' に設定されている場合は、正規分布の乱数発生に mt19937ar アルゴリズムが使用されます。この場合、リセット メソッドが乱数ストリームを Seed プロパティの値に再初期化します。

データ型: char | string

RandomStream の初期シード。232 未満の正のスカラーとして指定します。

依存関係

このプロパティを有効にするには、RandomStream'mt19937ar with seed' に設定します。

データ型: double

使用法

説明

out = phznoise(in) は、phznoise System object によって指定された位相ノイズを入力信号に追加します。結果は、out に返されます。

入力引数

すべて展開する

入力信号。NS 行 1 列の複素数値のベクトルとして指定します。NS は、サンプル数です。

データ型: double
複素数のサポート: あり

出力引数

すべて展開する

出力信号。NS 行 1 列の複素数値のベクトルとして返されます。NS は、入力信号中のサンプルの数と等しくなります。

データ型: double
複素数のサポート: あり

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて折りたたむ

16-QAM 信号に位相ノイズ ベクトルと周波数オフセット ベクトルを追加します。次に、信号をプロットします。

位相ノイズ System object を作成します。

pnoise = comm.PhaseNoise('Level',-50,'FrequencyOffset',20);

変調されたシンボルを生成します。

M = 16; % From 16-QAM
data = randi([0 M-1],1000,1);
modData = qammod(data,M);

pnoise を使用して位相ノイズを適用します。劣化したデータをプロットします。

y = pnoise(modData);
scatterplot(y)

スペクトル アナライザーを使用して、10 MHz の正弦波への位相ノイズの影響を表示します。スペクトル アナライザーの分解能帯域幅を調整して、可視化されたスペクトル ノイズへの影響を確認します。

シミュレーションの変数を初期化します。

fc = 1e6; % Carrier frequency in Hz
fs = 4e6; % Sample rate in Hz.
phNzLevel = [-85 -118 -125 -145]; % Phase noise level in dBc/Hz
phNzFreqOff = [1e3 9.5e3 19.5e3 195e3]; % Phase noise frequency offset in Hz
Nspf = 6e6; % Number of Samples per frame
freqSpan = 400e3; % Frequency span in Hz for spectrum computation

正弦波、位相ノイズ、およびスペクトル アナライザーのオブジェクトを作成します。

sinewave = dsp.SineWave('Amplitude',1,'Frequency',fc,'SampleRate',fs, ...
    'SamplesPerFrame',Nspf,'ComplexOutput',true);
pnoise = comm.PhaseNoise('Level',phNzLevel, ...
    'FrequencyOffset',phNzFreqOff,'SampleRate',fs);
spectrumscopeRBW1 = dsp.SpectrumAnalyzer('NumInputPorts',2, ...
    'SampleRate',fs,'FrequencySpan','Span and center frequency', ...
    'CenterFrequency',fc,'Span',freqSpan,'RBWSource','Property', ...
    'RBW',1,'SpectrumType','Power density','SpectralAverages',10, ...
    'SpectrumUnits','dBW','YLimits',[-150 10], ...
    'Title','Resolution Bandwidth 1 Hz','Position',[79 147 605 374]);
spectrumscopeRBW10 = dsp.SpectrumAnalyzer('NumInputPorts',2, ...
    'SampleRate',fs,'FrequencySpan','Span and center frequency', ...
    'CenterFrequency',fc,'Span',freqSpan,'RBWSource','Property', ...
    'RBW',10,'SpectrumType','Power density','SpectralAverages',10, ...
    'SpectrumUnits','dBW','YLimits',[-150 10], ...
    'Title','Resolution Bandwidth 10 Hz','Position',[685 146 605 376]);

スペクトルと位相ノイズを解析するために、この例には、それぞれ 1 Hz および 10 Hz の分解能帯域幅をもつ 2 つのスペクトル アナライザーが含まれています。スペクトル アナライザー オブジェクトは、既定の Hann ウィンドウ処理設定を使用し、単位は dBW/Hz に設定され、スペクトル平均の数は 10 に設定されます。

x = sinewave();
y = pnoise(x);

分解能帯域幅が 1 Hz の場合、スペクトル アナライザーの dBW/Hz の表示は 0 dBW/Hz におけるトーンを示します。スペクトル アナライザー オブジェクトは、ハン ウィンドウ処理の電力の拡散効果を補正します。位相ノイズの外観上の平均を示す結果は、指定の位相ノイズ スペクトルに一致します。

spectrumscopeRBW1(x,y)

分解能帯域幅が 10 Hz の場合、スペクトル アナライザーの dBW/Hz の表示は -10 dBW/Hz におけるトーンを示します。正弦波のトーン エネルギーは、ここで 1 Hz の代わりに 10 Hz に広がり、そのため正弦波 PSD レベルは 10 dB 減少します。10 Hz の分解能帯域幅でも、まだ位相ノイズの外観上の平均は位相ノイズ オブジェクトで定義された位相ノイズに達します。

分解能帯域幅が 1 Hz から 10 Hz に増えても、スペクトル アナライザー オブジェクトは、依然としてハン ウィンドウの電力の拡散効果を補正し、より広い分解能帯域幅でより優れたスペクトル平均化を達成します。詳細は、ウィンドウを使用する理由 を参照してください。

spectrumscopeRBW10(x,y)

純粋正弦波とノイズのある正弦波との間の RMS 位相ノイズを度単位で計算します。一般に、位相誤差を正確に求めるには、純粋な信号がノイズ信号と時間で整列されなければなりません。しかし、この場合は、正弦波の周期性によりこの手順が不要です。

ph_err = unwrap(angle(y) - angle(x));
rms_ph_nz_deg = rms(ph_err)*180/pi();
sprintf('The computed RMS phase noise is %3.2f degrees.\n',rms_ph_nz_deg)
ans = 
    'The computed RMS phase noise is 0.18 degrees.
     '

アルゴリズム

出力信号 yk は、yk=xkek により入力シーケンス xk に関連付けられています。ここで、φk は位相ノイズです。位相ノイズはフィルター処理されたガウス ノイズで、次のようになります。φk=f(nk)。ここで、nk はノイズ シーケンスで、f はフィルター処理操作を表します。

位相ノイズをモデル化するには、周波数オフセットと位相ノイズ レベルのスカラーまたはベクトルの値を指定することで、パワー スペクトル密度 (PSD) マスクの特性を定義します。

  • スカラー周波数オフセットと位相ノイズ レベルの仕様では、IIR デジタル フィルターがスペクトル マスクを計算します。スペクトル マスクは、指定された点を通過する 1/f の特性をもちます。

  • ベクトル周波数オフセットと位相ノイズ レベルの仕様では、FIR フィルターがスペクトル マスクを計算します。スペクトル マスクは、log10(f) にわたって内挿されます。DC から最小の周波数オフセットまでと、最大の周波数オフセットからサンプルレートの半分までがフラットになります。

IIR デジタル フィルター

IIR デジタル フィルターでは、分子係数は次のようになります。

λ=2πfoffset10L/10,

ここで、foffset は周波数オフセット (Hz) で、L は位相ノイズ レベル (dBc/Hz) です。分母係数 γi は次のように再帰的に決定されます。

γi=(i2.5)γi1i1,

γ1 = 1i = {1, 2,..., Nt} で、Nt はフィルター係数の数です。Nt27 219 の 2 のべき乗です。Nt の値は、位相ノイズ オフセットが 0 Hz まで減少するにつれて増加します。

FIR フィルター

FIR フィルターでは、位相ノイズ レベルは、[df, fs / 2] の範囲にある周波数オフセットに対する log10(f) 内挿により決定されます。ここで、df は周波数分解能で、fs はサンプルレートです。位相ノイズは、0 Hz から最小の周波数オフセットまでと、最大の周波数オフセットから fs / 2 までフラットです。周波数分解能は、fs2(1Nt) と等しく、ここで Nt は係数の数であり、216 以下の 2 のべき乗です。Nt < 28 の場合、時間領域 FIR フィルターが使用されます。そうでない場合、周波数領域 FIR フィルターが使用されます。

アルゴリズムは、これらのすべての条件が満たされるまで、Nt を増やします。

  • 周波数分解能は、周波数オフセット ベクトルの最小値未満です。

  • 周波数分解能は、周波数オフセット ベクトル内の 2 つの連続する周波数間の最小差異未満です。

  • FIR フィルター タップの最大数は 216 です。

参照

[1] Kasdin, N. J., "Discrete Simulation of Colored Noise and Stochastic Processes and 1/(f^alpha); Power Law Noise Generation." The Proceedings of the IEEE. Vol. 83, No. 5, May, 1995, pp 802–827.

拡張機能

R2012a で導入