Main Content

convertSNR

SNR 値の変換

R2022a 以降

    説明

    y = convertSNR(x,inputmode) は、入力の S/N 比の値 x を SNR に変換します。

    y = convertSNR(x,inputmode,outputmode) は、入力の S/N 比の値 xoutputmode で指定された比率に変換します。詳細については、アルゴリズムを参照してください。

    y = convertSNR(x,inputmode,Name=Value) は、追加の名前と値の引数を指定します。

    すべて折りたたむ

    ランダム データ シンボルと 8-PSK 変調信号を生成します。

    d = randi([0 7],100,1);
    M = 8;                  % 8-PSK
    k = log2(M);            % bits per symbol
    psk = pskmod(d,M);

    Eb/No 値が 6 dB に等しいノイズを変調信号に付加します。これを行うには、まず Eb/No 値を SNR に変換します。

    EbNo = 6;
    SNR = convertSNR(EbNo,'ebno',BitsPerSymbol=k)
    SNR = 
    10.7712
    
    y = awgn(psk,SNR);

    ノイズ成分がある信号とない信号をプロットします。

    figure
    plot(real(psk));
    hold on
    plot(real(y))
    legend("Perfect Signal","Noisy Signal")

    Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Perfect Signal, Noisy Signal.

    シミュレーション パラメーターを設定します。

    M = 16;        % Modulation order
    k = log2(M);   % bits per symbol
    nSamp = 4;     % Number of samples

    レイズド コサイン送信フィルターおよびレイズド コサイン受信フィルターを作成します。

    txfilter = comm.RaisedCosineTransmitFilter( ...
        OutputSamplesPerSymbol=nSamp);
    rxfilter = comm.RaisedCosineReceiveFilter( ...
        InputSamplesPerSymbol=nSamp, ...
        DecimationFactor=nSamp);

    ランダム データ シンボルとフィルター処理された 16-QAM 変調信号を生成します。

    d = randi([0 1],1000,1);
    modsig = qammod(d,M,InputType="bit");
    txsig = txfilter(modsig);

    Eb/N0 が 10 dB に等しいノイズを変調信号に付加します。これを行うには、まず Eb/N0 値を SNR に変換します。

    EbN0 = 10;
    snr = convertSNR(EbN0,"ebno", ...
        BitsPerSymbol=k, ...
        SamplesPerSymbol=nSamp, ...
        CodingRate=1/3)
    snr = 
    5.2288
    
    [sig2,var] = awgn(txsig,snr);
    rxsig = rxfilter(sig2);
    demodsig = qamdemod(rxsig,M, ...
        OutputType="llr", ...
        NoiseVariance=var);

    復調された QAM 信号をプロットします。

    plot(demodsig,'.')
    xlabel('Bit Number')
    ylabel('LLR')

    Figure contains an axes object. The axes object with xlabel Bit Number, ylabel LLR contains a line object which displays its values using only markers.

    未使用のサブキャリアが存在する OFDM シンボルについて、サブキャリアごとの SNR を 1 つの SNR 値に変換します。

    QPSK 変調と OFDM 変調に関する変数を定義します。

    M = 4;                  % Modulation order for QPSK
    SNRsc = 15;             % SNR per subcarrier
    nfft = 128;             % Total number of subcarriers
    cplen = 16;             % Cyclic prefix length
    nnull = 30;             % Number of null subcarriers
    nullidx = ...           % Null indices
        [1:nnull nfft/2+1 nfft-nnull+1:nfft]'; 
    nsc = nfft-(2*nnull)-1; % Number of active subcarriers

    ランダム データを QPSK 変調します。

    data = randi([0 3],nsc,100);
    x = qammod(data,M,UnitAveragePower=true);

    信号を OFDM 変調し、電力が 1 となるように正規化します。

    txscale = nfft/sqrt(nsc);
    y = txscale * ofdmmod(x,nfft,cplen,nullidx);

    サブキャリアごとの SNR と等価な SNR の値を計算し、AWGN チャネルによって OFDM 変調信号をフィルター処理します。

    SNR = convertSNR(SNRsc,'snrsc',...
        FFTLength=nfft,NumActiveSubcarriers=nsc);
    r = awgn(y,SNR);

    SNR の値を計算して表示します。

    n = r - y;
    fprintf('SNR of OFDM symbols = %1.1f dB\n', 10*log10(var(y)/var(n)));
    SNR of OFDM symbols = 12.3 dB
    
    Ssc = var(y) / nsc;
    Nsc = var(n) / nfft;
    fprintf('SNR per subcarrier = %1.1f dB\n', 10*log10(Ssc/Nsc));
    SNR per subcarrier = 15.1 dB
    

    入力引数

    すべて折りたたむ

    dB 単位の入力値。数値行ベクトルとして指定します。

    データ型: double

    x の入力モード。"ebno""esno""snr"、または "snrsc" として指定します。

    • "ebno"x はビットあたりのエネルギー対ノイズのパワー スペクトル密度比 (Eb/N0)。

    • "esno"x はシンボルあたりのエネルギー対ノイズのパワー スペクトル密度比 (Es/N0)。

    • "snr"x は SNR。

    • "snrsc"x はマルチキャリア変調スキームにおけるサブキャリアごとの SNR。

    詳細については、アルゴリズムを参照してください。

    y の出力モード。"ebno""esno""snr"、または "snrsc" として指定します。

    • "ebno"y はビットあたりのエネルギー対ノイズのパワー スペクトル密度比 (Eb/N0)。

    • "esno"y はシンボルあたりのエネルギー対ノイズのパワー スペクトル密度比 (Es/N0)。

    • "snr"y は SNR。

    • "snrsc"y はマルチキャリア変調スキームにおけるサブキャリアごとの SNR。

    詳細については、アルゴリズムを参照してください。

    名前と値の引数

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

    R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

    例: y = convertSNR(x,inputmode,outputmode,SamplesPerSymbol=2)

    シンボルあたりのサンプル数。正の整数として指定します。次のように設定した場合、この関数は SamplesPerSymbol の値を無視します。

    • inputmode"ebno" に設定し、outputmode"esno" に設定。

    • inputmode"esno" に設定し、outputmode"ebno" に設定。

    データ型: double

    シンボルあたりのビット数。正の整数として指定します。次のように設定した場合、この関数は BitsPerSymbol の値を無視します。

    • inputmode"esno" に設定し、outputmode"snr" に設定。

    • inputmode"snr" に設定し、outputmode"esno" に設定。

    データ型: double

    符号化率。範囲が (0, 1] のスカラーとして指定します。次のように設定した場合、この関数は CodingRate の値を無視します。

    • inputmode"esno" に設定し、outputmode"snr" に設定。

    • inputmode"snr" に設定し、outputmode"esno" に設定。

    データ型: double

    マルチキャリア変調信号のサブキャリアの総数。正の整数として指定します。"snrsc" の設定が inputmode および outputmode のいずれでもない場合、この関数は FFTLength の値を無視します。

    データ型: double

    アクティブなサブキャリアの数。正の整数として指定します。アクティブなサブキャリアの数は FFTLength 以下でなければなりません。"snrsc" の設定が inputmode および outputmode のいずれでもない場合、この関数は NumActiveSubcarriers を無視します。

    データ型: double

    出力引数

    すべて折りたたむ

    dB 単位の出力値。数値の行ベクトルとして返されます。詳細については、アルゴリズムを参照してください。

    アルゴリズム

    次の表に、入力モードから出力モードへの有効な変換を示します。

    inputmode から outputmode変換
    "ebno" から "snr"SNR = Eb / N0 + 10log10((Nbps×R) / Nsps)
    "snr" から "ebno"Eb / N0 = SNR – 10log10((Nbps×R) / Nsps)
    "ebno" から "esno"Es / N0 = Eb / N0 + 10log10(Nbps×R)
    "esno" から "ebno"Eb / N0 = Es / N0 – 10log10(Nbps×R)
    "esno" から "snr"SNR = Es / N0 – 10log10(Nsps)
    "snr" から "esno"Es / N0 = SNR + 10log10(Nsps)
    "snrsc" から "snr"SNR = SNRSC + 10log10(NSC / FFTLen)
    "snr" から "snrsc"SNRSC = SNR – 10log10(NSC / FFTLen)

    ここで、

    • NbpsBitsPerSymbol の値。

    • NspsSamplesPerSymbol の値。

    • RCodingRate の値。

    • FFTLenFFTLength の値。

    • NSCNumActiveSubcarriers の値。

    • inputmode または outputmode"ebno" に設定した場合、Eb / N0 はそれぞれ入力 x の値または出力 y の値。

    • inputmode または outputmode"esno" に設定した場合、Es / N0 はそれぞれ入力 x の値または出力 y の値。

    • inputmode または outputmode"snr" に設定した場合、SNR はそれぞれ入力 x の値または出力 y の値。

    • inputmode または outputmode"snrsc" に設定した場合、SNRSC はそれぞれ入力 x の値または出力 y の値。

    バージョン履歴

    R2022a で導入

    すべて展開する

    参考