Created
December 4, 2019 13:46
-
-
Save k3kaimu/41517e55efefc470b721eb904a434419 to your computer and use it in GitHub Desktop.
Rappモデルの増幅器でOFDM信号が受ける非線形性をシミュレーション
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/++ dub.json: | |
{ | |
"name": "sim_canceller", | |
"dependencies": { | |
"dffdd": { "path": ".." } | |
}, | |
"dflags-ldc": ["-enable-cross-module-inlining", "-mcpu=native"] | |
} | |
+/ | |
// dub --build=release --compiler=ldc2 --single sim_ofdm_rapp.d | |
import dffdd; | |
import std; | |
alias C = Complex!double; | |
enum NBits_QAM = 4; | |
enum NOverSampling = 4; | |
enum NSymbol = 100000; | |
static assert(NBits_QAM == 1 || NBits_QAM % 2 == 0); | |
void main() | |
{ | |
// 使用するブロックの定義 | |
auto rndbits = randomBits(); | |
auto ofdm = QAM!C(2^^NBits_QAM).chainedMod(new OFDM!C(64, 16, 64, NOverSampling)); | |
auto rapp = RappModel!C(3, 0.dB, 30.dBm); | |
BERCounter bercounter; | |
StopWatch sw; | |
sw.start(); | |
// 信号のフロー | |
// 送信ビットの生成 | |
Bit[] tx_bits = new Bit[64 * NBits_QAM * NSymbol]; | |
rndbits.consumeFill(tx_bits); | |
// ビット列をOFDMシンボルへ変調 | |
C[] tx_signal; | |
ofdm.modulate(tx_bits, tx_signal); | |
// Rappモデルの増幅器へ入力 | |
C[] rx_signal; | |
rapp(tx_signal, rx_signal); | |
// OFDMの復調 | |
Bit[] rx_bits; | |
ofdm.demodulate(rx_signal, rx_bits); | |
bercounter.count(tx_bits, rx_bits); | |
sw.stop(); | |
// ビットの誤りの個数を表示 | |
// 例: | |
// Total: 25600000 bits, Error bits: 1491696 bits, BER: 0.0582694 | |
// Total time: 3349 [msecs], 7.64346 [Mbit/sec] | |
with(bercounter.result) { | |
writefln!"Total: %s bits, Error bits: %s bits, BER: %s"(totalBits, errBits, ber); | |
writefln!"Total time: %s [msecs], %s [Mbit/sec]"(sw.peek.msecs, totalBits * 1.0 / sw.peek.usecs); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment