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

phznoise = comm.PhaseNoise(___,Name=Value) は、前の構文の入力引数に加えて、名前と値の引数を 1 つ以上使用してオプションを指定します。たとえば、comm.PhaseNoise(RandomStream="mt19937ar with seed") は、メルセンヌ・ツイスター乱数発生器を使用するように乱数ストリームが設定された位相ノイズ オブジェクトを作成します。

プロパティ

すべて展開する

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

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

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

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

データ型: double

Hz 単位の周波数オフセット。正の増加する値のベクトルとして指定します。最大周波数オフセット値は FS/ 2 未満でなければなりません。ここで、FSSampleRate プロパティの値を表します。

Level プロパティおよび FrequencyOffset プロパティの長さは同じでなければなりません。

データ型: double

サンプル レート (Hz 単位)。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 列の数値ベクトルとして指定するか、または NSM 列の数値行として指定します。NS は、サンプルの数です。M は、チャネルの数です。

このオブジェクトは可変サイズの入力を受け入れます。オブジェクトがロックされると、各入力チャネルのサイズは変更できますが、チャネルの数は変更できません。詳細については、Variable-Size Signal Support with System Objectsを参照してください。

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

出力引数

すべて展開する

出力信号は複素数値信号として返され、データ型とサイズは入力信号と同じです。

オブジェクト関数

オブジェクト関数を使用するには、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]; % in dBc/Hz
phNzFreqOff = [1e3 9.5e3 19.5e3 195e3]; % in Hz
Nspf = 6e6; % Number of Samples per frame
freqSpan = 400e3; % 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);
sascopeRBW100 = spectrumAnalyzer( ...
    SampleRate=fs, ...
    Method="welch", ...
    FrequencySpan="Span and center frequency", ...
    CenterFrequency=fc, ...
    Span=freqSpan, ...
    RBWSource="Property", ...
    RBW=100, ...
    SpectrumType="Power density", ...
    SpectralAverages=10, ...
    SpectrumUnits="dBW", ...
    YLimits=[-150 10], ...
    Title="Resolution Bandwidth 100 Hz", ...
    ChannelNames={'signal','signal with phase noise'}, ...
    Position=[79 147 605 374]);
sascopeRBW1k = spectrumAnalyzer( ...
    SampleRate=fs, ...
    Method="welch", ...
    FrequencySpan="Span and center frequency", ...
    CenterFrequency=fc, ...
    Span=freqSpan, ...
    RBWSource="Property", ...
    RBW=1000, ...
    SpectrumType="Power density", ...
    SpectralAverages=10, ...
    SpectrumUnits="dBW", ...
    YLimits=[-150 10], ...
    Title="Resolution Bandwidth 1 kHz", ...
    ChannelNames={'signal','signal with phase noise'}, ...
    Position=[685 146 605 376]);

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

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

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

sascopeRBW100(x,y)

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

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

sascopeRBW1k(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.', ...
    rms_ph_nz_deg)
ans = 
'The computed RMS phase noise is 0.37 degrees.'

アルゴリズム

すべて展開する

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

Diagram showing phase noise applied to input signal

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

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

  • ベクトル周波数オフセットと位相ノイズ レベルの仕様では、FIR フィルターがスペクトル マスクを計算します。スペクトル マスクは、log10(f) にわたって内挿されます。詳細については、FIR フィルターを参照してください。

参照

[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 で導入

すべて展開する

参考

オブジェクト

ブロック

トピック