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 でのシステム設計を参照してください。
ノイズ レベルの方式。'Signal to noise ratio (Eb/No)'、'Signal to noise ratio (Es/No)'、'Signal to noise ratio (SNR)'、または 'Variance' として指定します。詳細については、Eb/No、Es/No、および SNR モードの間の関係と分散の直接指定または間接指定を参照してください。
データ型: char
ノイズ パワー スペクトル密度 (Eb/No) に対する、ビットあたりのエネルギーの比 (dB 単位)。スカラーまたは 1 行 NC 列のベクトルで指定します。NC は、チャネル数です。
調整可能: Yes
依存関係
このプロパティは、NoiseMethod が 'Signal to noise ratio (Eb/No)' に設定されている場合に適用されます。
データ型: double
ノイズ パワー スペクトル密度 (Es/No) に対する、シンボルあたりのエネルギーの比 (dB 単位)。スカラーまたは 1 行 NC 列のベクトルで指定します。NC は、チャネル数です。
調整可能: Yes
依存関係
このプロパティは、NoiseMethod が 'Signal to noise ratio (Es/No)' に設定されている場合に適用されます。
データ型: double
ノイズ パワーに対する信号強度の比 (dB 単位)。スカラーまたは 1 行 NC 列のベクトルで指定します。NC は、チャネル数です。
調整可能: Yes
依存関係
このプロパティは、NoiseMethod が 'Signal to noise ratio (SNR)' に設定されている場合に適用されます。
データ型: double
シンボルあたりのビット数。正の整数として指定します。
依存関係
このプロパティは、NoiseMethod が 'Signal to noise ratio (Eb/No)' に設定されている場合に適用されます。
データ型: double
ワット単位の入力信号強度。正のスカラーまたは 1 行 NC 列のベクトルとして指定します。NC は、チャネル数です。オブジェクトは 1 Ω の公称インピーダンスを想定しています。
調整可能: Yes
依存関係
このプロパティは、NoiseMethod が 'Signal to noise ratio (Eb/No)'、'Signal to noise ratio (Es/No)' または 'Signal to noise ratio (SNR)' に設定されている場合に適用されます。
データ型: double
シンボルあたりのサンプル数。正の整数または 1 行 NC 列のベクトルとして指定します。NC は、チャネル数です。
依存関係
このプロパティは、NoiseMethod が 'Signal to noise ratio (Eb/No)'、 または 'Signal to noise ratio (Es/No)' に設定されている場合に適用されます。
データ型: double
ノイズ分散のソース。'Property' または 'Input port' として指定します。
VarianceSourceを'Property'に設定する場合は、Variance プロパティを使用してノイズ分散値を指定します。VarianceSourceを'Input port'に設定する場合は、関数として呼び出す場合にオブジェクトへの入力を使用して、ノイズ分散値を指定します。
詳細については、分散の直接指定または間接指定を参照してください。
依存関係
このプロパティは、NoiseMethod が 'Variance' である場合に適用されます。
データ型: char
ホワイト ガウス ノイズの分散。正のスカラーまたは 1 行 NC 列のベクトルとして指定します。NC は、チャネル数です。
調整可能: Yes
依存関係
このプロパティは、NoiseMethod が 'Variance'、および VarianceSource が 'Property' に設定されている場合に適用されます。
データ型: double
乱数ストリームのソース。'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
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);入力引数
入力信号。スカラー、NS 要素のベクトルまたは NS 行 NC 列の行列として指定します。NS は、サンプルの数です。NC は、チャネルの数です。
このオブジェクトは可変サイズの入力を受け入れます。オブジェクトがロックされると、各入力チャネルのサイズは変更できますが、チャネルの数は変更できません。詳細については、Variable-Size Signal Support with System Objectsを参照してください。
データ型: double
複素数のサポート: あり
加法性ホワイト ガウス ノイズの分散。正のスカラーまたは 1 行 NC 列のベクトルとして指定します。NC は、チャネル数です。これは、入力信号行列の列数で決まります。
オブジェクト関数
オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、次の構文を使用します。
release(obj)
例
既定の構成を使用して、AWGN Channel System object を作成します。このチャネルを通して信号データを渡します。
AWGN チャネル オブジェクトと信号データを作成します。
awgnchan = comm.AWGNChannel; insignal = randi([0 1],100,1);
チャネルを通して、入力信号を送信します。
outsignal = awgnchan(insignal);
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)

ノイズ レベルを正確に表すには、通信リンクのビット エネルギー対ノイズ密度比 (Eb/No) で、チャネルを通じて送信される信号のシンボルあたりのビット数と符号化率を考慮しなければなりません。
リード・ソロモン符号のコードワード長とメッセージ長、および信号の変調次数を定義します。
N = 15; % R-S codeword length in symbols K = 9; % R-S message length in symbols codeRate = K/N; % R-S code rate M = 16; % Modulation order bps = log2(M); % Bits per symbol
符号化されていない Eb/No を dB 単位で指定します。符号化率を使用して、符号化前の Eb/No を、対応する符号化後の Eb/No に変換します。
UncodedEbNo = 6; CodedEbNo = UncodedEbNo + 10*log10(codeRate);
シンボルあたりのビット数と符号化後の Eb/No を設定し、AWGN チャネル オブジェクトを構築します。
channel1 = comm.AWGNChannel( ... NoiseMethod='Signal to noise ratio (Eb/No)', ... BitsPerSymbol=bps, ... EbNo=CodedEbNo)
channel1 =
comm.AWGNChannel with properties:
NoiseMethod: 'Signal to noise ratio (Eb/No)'
EbNo: 3.7815
BitsPerSymbol: 4
SignalPower: 1
SamplesPerSymbol: 1
RandomStream: 'Global stream'
別の方法として、符号化前の Eb/No を対応する SNR に変換してから、ノイズ手法を SNR に設定して AWGN チャネル オブジェクトを構成することもできます。
snr = convertSNR(UncodedEbNo,"ebno","SNR", ... BitsPerSymbol=bps, ... CodingRate=codeRate); channel2 = comm.AWGNChannel( ... NoiseMethod='Signal to noise ratio (SNR)', ... SNR=snr)
channel2 =
comm.AWGNChannel with properties:
NoiseMethod: 'Signal to noise ratio (SNR)'
SNR: 9.8021
SignalPower: 1
RandomStream: 'Global stream'
単一チャネルおよびマルチチャネルの信号を AWGN Channel System object™ を経由して渡します。
単一チャネル入力用に Eb/No 比を設定した AWGN Channel 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')
ノイズ分散を、現在の信号入力のチャネル数と等しい長さのスカラーまたは行ベクトルとして適用します。
NoiseMethod プロパティを 'Variance' に設定し、VarianceSource プロパティを 'Input port' に設定して、AWGN Channel 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 Channel 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
アルゴリズム
符号化されていない複素数の入力信号の場合、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。ビットあたりのエネルギーとノイズ パワー スペクトル密度の比率BitsPerSymbolSignalPower。実際の入力信号サンプルの強度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.
拡張機能
使用上の注意および制限:
MATLAB コード生成における System object (MATLAB Coder)を参照してください。
バージョン履歴
R2012a で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)