このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
comm.AWGNChannel
ホワイト ガウス ノイズの入力信号への付加
説明
comm.AWGNChannel は、入力信号にホワイト ガウス ノイズを付加します。
適用可能かつオブジェクトへの入力が可変数のチャネルをもつ場合は、EbNo、EsNo、SNR、BitsPerSymbol、SignalPower、SamplesPerSymbol、および Variance の各プロパティはその適用の際、スカラーでなければなりません。
ホワイト ガウス ノイズを入力信号に付加するには、以下の手順に従います。
comm.AWGNChannel
オブジェクトを作成し、そのプロパティを設定します。関数と同様に、引数を指定してオブジェクトを呼び出します。
System object の機能の詳細については、System object とはを参照してください。
作成
説明
は、加法性ホワイト ガウス ノイズ (AWGN) チャネル System object™ awgnchan
= comm.AWGNChannelawgnchan
を作成します。このオブジェクトは、次に、実数または複素数入力信号にホワイト ガウス ノイズを付加します。
は、awgnchan
= comm.AWGNChannel(Name
,Value
)Name
で指定されたプロパティを Value
で指定された値に設定して、AWGN チャネルオブジェクト awgnchan
を作成します。(Name1
,Value1
,...,NameN
,ValueN
) のように、追加の名前と値のペアの引数を任意の順番で指定できます。
プロパティ
特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release
を使用します。
プロパティが "調整可能" の場合、その値をいつでも変更できます。
プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。
NoiseMethod
— ノイズ レベルの方式
'Signal to noise ratio (Eb/No)'
(既定値) | 'Signal to noise ratio (Es/No)'
| 'Signal to noise ratio (SNR)'
| 'Variance'
ノイズ レベルの方式。'Signal to noise ratio (Eb/No)'
、'Signal to noise ratio (Es/No)'
、'Signal to noise ratio (SNR)'
、または 'Variance'
として指定します。詳細については、Eb/No、Es/No、および SNR モードの間の関係と分散の直接指定または間接指定を参照してください。
データ型: char
EbNo
— ノイズ パワー スペクトル密度に対する 1 ビットあたりのエネルギーの比
10
(既定値) | スカラー | 行ベクトル
ノイズ パワー スペクトル密度 (Eb/No) に対する、ビットあたりのエネルギーの比 (dB 単位)。スカラーまたは 1 行 NC 列のベクトルで指定します。NC は、チャネル数です。
調整可能: Yes
依存関係
このプロパティは、NoiseMethod が 'Signal to noise ratio (Eb/No)'
に設定されている場合に適用されます。
データ型: double
EsNo
— ノイズ パワー スペクトル密度に対するシンボルあたりのエネルギーの比
10
(既定値) | スカラー | 行ベクトル
ノイズ パワー スペクトル密度 (Es/No) に対する、シンボルあたりのエネルギーの比 (dB 単位)。スカラーまたは 1 行 NC 列のベクトルで指定します。NC は、チャネル数です。
調整可能: Yes
依存関係
このプロパティは、NoiseMethod が 'Signal to noise ratio (Es/No)'
に設定されている場合に適用されます。
データ型: double
SNR
— 信号強度のノイズ パワーに対する割合
10
(既定値) | スカラー | 行ベクトル
ノイズ パワーに対する信号強度の比 (dB 単位)。スカラーまたは 1 行 NC 列のベクトルで指定します。NC は、チャネル数です。
調整可能: Yes
依存関係
このプロパティは、NoiseMethod が 'Signal to noise ratio (SNR)'
に設定されている場合に適用されます。
データ型: double
BitsPerSymbol
— シンボルあたりのビット数
1
(既定値) | 正の整数
シンボルあたりのビット数。正の整数として指定します。
依存関係
このプロパティは、NoiseMethod が 'Signal to noise ratio (Eb/No)'
に設定されている場合に適用されます。
データ型: double
SignalPower
— 入力信号強度
1
(既定値) | 正のスカラー | 行ベクトル
ワット単位の入力信号強度。正のスカラーまたは 1 行 NC 列のベクトルとして指定します。NC は、チャネル数です。オブジェクトは 1 Ω の公称インピーダンスを想定しています。
調整可能: Yes
依存関係
このプロパティは、NoiseMethod が 'Signal to noise ratio (Eb/No)'
、'Signal to noise ratio (Es/No)'
または 'Signal to noise ratio (SNR)'
に設定されている場合に適用されます。
データ型: double
SamplesPerSymbol
— シンボルあたりのサンプル数
1
(既定値) | 正の整数 | 行ベクトル
シンボルあたりのサンプル数。正の整数または 1 行 NC 列のベクトルとして指定します。NC は、チャネル数です。
依存関係
このプロパティは、NoiseMethod が 'Signal to noise ratio (Eb/No)'
、 または 'Signal to noise ratio (Es/No)'
に設定されている場合に適用されます。
データ型: double
VarianceSource
— ノイズ分散のソース
'Property'
(既定値) | 'Input port'
ノイズ分散のソース。'Property'
または 'Input port'
として指定します。
VarianceSource
を'Property'
に設定する場合は、Variance プロパティを使用してノイズ分散値を指定します。VarianceSource
を'Input port'
に設定する場合は、関数として呼び出す場合にオブジェクトへの入力を使用して、ノイズ分散値を指定します。
詳細については、分散の直接指定または間接指定を参照してください。
依存関係
このプロパティは、NoiseMethod が 'Variance'
である場合に適用されます。
データ型: char
Variance
— ホワイト ガウス ノイズの分散
1
(既定値) | 正のスカラー | 行ベクトル
ホワイト ガウス ノイズの分散。正のスカラーまたは 1 行 NC 列のベクトルとして指定します。NC は、チャネル数です。
調整可能: Yes
依存関係
このプロパティは、NoiseMethod が 'Variance'
、および VarianceSource が 'Property'
に設定されている場合に適用されます。
データ型: double
RandomStream
— 乱数ストリームのソース
'Global stream'
(既定値) | 'mt19937ar with seed'
乱数ストリームのソース。'Global stream'
または 'mt19937ar with seed'
として指定します。
RandomStream
を'Global stream'
に設定すると、このオブジェクトは MATLAB® の既定の乱数ストリームを使用して乱数を生成します。このオブジェクトを使用して再現性のある数を生成するため、MATLAB の既定の乱数ストリームをリセットすることができます。reset(RandStream.getGlobalStream)
などのようにします。詳細については、RandStream
を参照してください。RandomStream
を'mt19937ar with seed'
に設定すると、正規分布の乱数発生にオブジェクトで mt19937ar アルゴリズムが使用されます。この場合、reset
関数を呼び出すと、オブジェクトにより乱数ストリームがSeed
プロパティの値に再初期化されます。このオブジェクトをリセットすることで、再現性のある数を生成できます。
複素数入力信号の場合、オブジェクトは、次のようにランダム データを作成します。
NS は、サンプルの数です。NC は、チャネルの数です。依存関係
このプロパティは、NoiseMethod が 'Variance'
に設定されている場合に適用されます。
データ型: char
Seed
— 初期シード
67
(既定値) | 非負の整数
mt19937ar 乱数ストリームの初期シード。非負の整数で指定します。関数 reset
を呼び出すたびに、オブジェクトにより mt19937ar 乱数ストリームが Seed
の値に再初期化されます。
依存関係
このプロパティは、RandomStream が 'mt19937ar with seed'
に設定されている場合に適用されます。
データ型: double
使用法
説明
は、ホワイト ガウス ノイズの分散を指定します。この構文は、NoiseMethod を outsignal
= awgnchan(insignal
,var
)'Variance'
、および VarianceSource を 'Input port'
に設定した場合に適用されます。
次に例を示します。
awgnchan = comm.AWGNChannel('NoiseMethod','Variance', ... 'VarianceSource','Input port'); var = 12; ... outsignal = awgnchan(insignal,var);
入力引数
insignal
— 入力信号
スカラー | ベクトル | 行列
入力信号。スカラー、NS 要素のベクトルまたは NS 行 NC 列の行列として指定します。NS は、サンプルの数です。NC は、チャネルの数です。
データ型: double
複素数のサポート: あり
var
— 加法性ホワイト ガウス ノイズの分散
正のスカラー | 行ベクトル
加法性ホワイト ガウス ノイズの分散。正のスカラーまたは 1 行 NC 列のベクトルとして指定します。NC は、チャネル数です。これは、入力信号行列の列数で決まります。
オブジェクト関数
オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj
という名前の System object のシステム リソースを解放するには、次の構文を使用します。
release(obj)
例
AWGN チャネル System object の作成
既定の構成を使用して、AWGN チャネル System object を作成します。このチャネルを通して信号データを渡します。
AWGN チャネル オブジェクトと信号データを作成します。
awgnchan = comm.AWGNChannel; insignal = randi([0 1],100,1);
チャネルを通して、入力信号を送信します。
outsignal = awgnchan(insignal);
8-PSK 信号へのホワイト ガウス ノイズの付加
8–PSK 信号を変調してホワイト ガウス ノイズを付加した後、信号をプロットしてノイズの影響を可視化します。
信号を変調します。
modData = pskmod(randi([0 7],2000,1),8);
加法性ホワイト ガウス ノイズ (AWGN) チャネルを通じて信号を渡して、変調された信号にホワイト ガウス ノイズを付加します。
channel = comm.AWGNChannel('EbNo',20,'BitsPerSymbol',3);
AWGN チャネルを通して信号を送信します。
channelOutput = channel(modData);
ノイズのないデータとノイズのあるデータを散布図にプロットし、ノイズの影響を可視化します。
scatterplot(modData)
scatterplot(channelOutput)
EbNo
プロパティを 10 dB に変更してノイズを増やします。
channel.EbNo = 10;
変調データを AWGN チャネルを介して渡します。
channelOutput = channel(modData);
チャネル出力をプロットします。増加したノイズの影響が分かります。
scatterplot(channelOutput)
チャネル数変更時の信号の処理
単一チャネルおよびマルチチャネルの信号を AWGN チャネル System object™ を経由して渡します。
単一チャネル入力用に Eb/No 比を設定した AWGN チャネル System object を作成します。この場合、EbNo
プロパティはスカラーです。
channel = comm.AWGNChannel('EbNo',15);
ランダム データを生成して QPSK 変調を適用します。
data = randi([0 3],1000,1); modData = pskmod(data,4,pi/4);
変調データを AWGN チャネルを介して渡します。
rxSig = channel(modData);
ノイズの多いコンスタレーションをプロットします。
scatterplot(rxSig)
2 チャネルの入力データを生成して QPSK 変調を適用します。
data = randi([0 3],2000,2); modData = pskmod(data,4,pi/4);
変調データを AWGN チャネルを介して渡します。
rxSig = channel(modData);
ノイズの多いコンスタレーションをプロットします。rxSig
では、各チャネルは単一の列として表されます。プロットはほとんど同一です。これは、どちらのチャネルにも同じ Eb/No の値が適用されているためです。
scatterplot(rxSig(:,1))
title('First Channel')
scatterplot(rxSig(:,2))
title('Second Channel')
AWGN チャネル オブジェクトを変更して、別の Eb/No の値を各チャネルに適用します。異なる値を適用するには、EbNo
プロパティを 1 行 2 列のベクトルに設定します。EbNo
プロパティの次元を変更する場合、AWGN チャネル オブジェクトを解放しなければなりません。
release(channel) channel.EbNo = [10 20];
データを AWGN チャネルを経由して渡します。
rxSig = channel(modData);
ノイズの多いコンスタレーションをプロットします。最初のチャネルは Eb/No の値が低いため、ノイズがかなり多くなります。
scatterplot(rxSig(:,1))
title('First Channel')
scatterplot(rxSig(:,2))
title('Second Channel')
ノイズ分散入力端子を使用して AWGN を追加
ノイズ分散を、現在の信号入力のチャネル数と等しい長さのスカラーまたは行ベクトルとして適用します。
NoiseMethod
プロパティを 'Variance'
に設定し、VarianceSource
プロパティを 'Input port'
に設定して、AWGN チャネル System object™ を作成します。
channel = comm.AWGNChannel('NoiseMethod','Variance', ... 'VarianceSource','Input port');
2 つのチャネルに対してランダム データを生成して、16-QAM 変調を適用します。
data = randi([0 15],10000,2); txSig = qammod(data,16);
変調データを AWGN チャネルを介して渡します。AWGN チャネル オブジェクトは 2 つのチャネルからのデータを処理します。分散入力は 1 行 2 列のベクトルです。
rxSig = channel(txSig,[0.01 0.1]);
2 つのチャネルのコンスタレーション ダイアグラムをプロットします。2 番目の信号は、分散値が他方の 10 倍であるためノイズが多くなっています。
scatterplot(rxSig(:,1))
scatterplot(rxSig(:,2))
ノイズ分散の入力をスカラーにして手順を繰り返します。どちらのチャネルにも同じ分散が適用されます。コンスタレーション ダイアグラムはほぼ同一です。
rxSig = channel(txSig,0.2); scatterplot(rxSig(:,1))
scatterplot(rxSig(:,2))
反復性のための乱数シードの設定
シードを指定する乱数ストリームを使用する場合は、シードを指定して同じ出力を生成します。
AWGN チャネル System object™ を作成します。NoiseMethod
プロパティを 'Variance'
に、RandomStream
プロパティを 'mt19937ar with seed'
に、Seed
プロパティを 99
に設定します。
channel = comm.AWGNChannel( ... 'NoiseMethod','Variance', ... 'RandomStream','mt19937ar with seed', ... 'Seed',99);
データを AWGN チャネルを経由して渡します。
y1 = channel(zeros(8,1));
もう 1 つ、すべてがゼロのベクトルをチャネルを経由して渡します。
y2 = channel(zeros(8,1));
関数の呼び出し間でシードが変化するため、出力が異なります。
isequal(y1,y2)
ans = logical
0
関数 reset
を呼び出して、AWGN チャネル オブジェクトをリセットします。ランダム データ ストリームが初期シードの 99
にリセットされます。
reset(channel);
すべてがゼロのベクトルを AWGN チャネルを経由して渡します。
y3 = channel(zeros(8,1));
2 つの信号が同一であることを確認します。
isequal(y1,y3)
ans = logical
1
アルゴリズム
Eb/No、Es/No、および SNR モードの間の関係
符号化されていない複素数の入力信号の場合、comm.AWGNChannel
は次の式に従って、Eb/N0、Es/N0、および SNR に関連します。
Es/N0 = Nsps × SNR
Es/N0 = Eb/N0 + 10log10(k) in dB
ここで
Es は、ジュール単位の信号エネルギーを示します。
Eb は、ジュール単位のビット エネルギーを示します。
N0 は、ノイズ パワー スペクトル密度 (watts/Hz) を示します。
Nsps は、シンボルあたりのサンプル数
SamplesPerSymbol
を示します。k は入力シンボルあたりの情報ビット数
BitsPerSymbol
を示します。
実数の信号入力の場合、comm.AWGNChannel
は次の式に従って、Es/N0 および SNR に関連します。
Es/N0 = 0.5 (Nsps) × SNR
メモ
すべての電力値は公称インピーダンス 1 オームを想定しています。
実数のケースの式は 2 の係数による複素数のケースに対応する式とは異なることに注意してください。特に、オブジェクトは、実数の入力信号の場合は N0/2 watts/Hz、複素信号の場合は N0 watts/Hz のノイズ パワー スペクトル密度を使用します。
詳細については、AWGN チャネル ノイズ レベルを参照してください。
分散の直接指定または間接指定
comm.AWGNChannel
によって生成されるノイズの分散を直接指定するには、次のように VarianceSource
を指定します。
"Property"
。次にNoiseMethod
を"Variance"
に設定し、Variance
プロパティを使用して分散値を指定します。"Input port"
。次に入力引数var
を使用して、入力としてオブジェクトの分散レベルを指定します。
分散を間接的に指定する (comm.AWGNChannel
で分散を計算する) には、VarianceSource
を "Property"
として指定し、NoiseMethod
を次のように指定します。
"Signal to noise ratio (Eb/No)"
。ここで、オブジェクトは以下のプロパティを使用して分散を計算します。EbNo
。ビットあたりのエネルギーとノイズ パワー スペクトル密度の比率BitsPerSymbol
SignalPower
。実際の入力信号サンプルの強度SamplesPerSymbol
"Signal to noise ratio (Es/No)"
。ここで、オブジェクトは以下のプロパティを使用して分散を計算します。EsNo
。信号エネルギーとノイズ パワー スペクトル密度の比率SignalPower
。実際の入力信号サンプルの強度SamplesPerSymbol
"Signal to noise ratio (SNR)"
。ここで、オブジェクトは以下のプロパティを使用して分散を計算します。SNR
。信号強度のノイズ パワーに対する割合SignalPower
。実際の入力信号サンプルの強度
シンボルあたりのサンプル数 (SamplesPerSymbol
) を変更すると、サンプルごとに加えられるノイズの分散に影響し、最終的なエラー レートが変わる原因ともなります。
NoiseVariance = SignalPower
× SamplesPerSymbol
/ 10(EsNo
/10)
ヒント
シンボルの構成要素および適用されているオーバーサンプリングに基づいて、シンボルあたりのサンプル数を選択します。たとえば、シンボルは、3 ビットあり、4 でオーバーサンプリングされている場合があります。詳細については、AWGN チャネル ノイズ レベルを参照してください。
参照
[1] Proakis, John G. Digital Communications. 4th Ed. McGraw-Hill, 2001.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
MATLAB コード生成における System object (MATLAB Coder)を参照してください。
バージョン履歴
R2012a で導入
参考
関数
オブジェクト
ブロック
トピック
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)