Last active
December 10, 2015 10:19
-
-
Save weibeld/9ba5a35196143cfd6232 to your computer and use it in GitHub Desktop.
A dBm to Milliwatts Conversion Table
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
# Create one or more LaTeX files each containing a dBm to milliwatts conversion | |
# table. The table is a LaTeX 'tabular' and has three columns: | |
# 1. dBm | |
# 2. Milliwatts (absolute notation) | |
# 3. Milliwatts (scientific notation) | |
# | |
# Prerequisites: R package 'xtable' installed | |
# | |
# Daniel Weibel <[email protected]> December 2015 | |
#------------------------------------------------------------------------------# | |
dBm2mW <- function(dbm) { | |
# Convert dBm to milliwatts | |
#----------------------------------------------------------------------------# | |
10^(dbm/10) | |
} | |
mW2dBm <- function(mw) { | |
# Convert milliwatts to dBm (not used in this file) | |
#----------------------------------------------------------------------------# | |
log10(mw) * 10 | |
} | |
FormatSciLatex <- function(v, digits) { | |
# Format a number in scientific format for printing with LaTeX. | |
# Example: 0.063096 ==> "6.3906 x 10^{-2}" | |
#----------------------------------------------------------------------------# | |
sci <- formatC(v, digits=digits, format="e") # Format: "6.3096e-02" | |
n <- nchar(sci) # Length of each number | |
exp <- strtoi(substr(sci, n-1, n), base=10) # Exponent (last two chars) | |
sig <- substr(sci, n-2, n-2) # Exponent sign (3rd-last char) | |
sig <- ifelse(sig == "-", "-", "") | |
fac <- as.numeric(substr(sci, 1, n-4)) # Factor (chars up to "e") | |
paste0(fac, " x 10^{", sig, exp, "}") | |
} | |
XtableNoWarnings <- function(...) { | |
# Run xtable without warnings (e.g. due to non-standard 'align' specifiers) | |
#----------------------------------------------------------------------------# | |
options(warn=-1) | |
xt <- xtable(...) | |
options(warn=0) | |
xt | |
} | |
library(xtable) | |
# dBm values to include in each table (each list elt. will become a table) | |
dbm.groups <- list(0:-69, -70:-139) | |
# File name for each table | |
file.groups <- c("tab_1.tex", "tab_2.tex") | |
# Column alignment for each table (will be put in \begin{tabular}{...}) | |
align.groups <- c("ld{3.0}d{10}x{6.4}", "ld{4.0}d{17}x{6.5}") | |
# Table header (same for all tables) | |
colnames <- c("\\multicolumn{1}{l}{dBm}", | |
"\\multicolumn{1}{l}{Milliwatts}", | |
"\\multicolumn{1}{l}{Milliwatts}") | |
# Number of digits after decimal point in 2nd column of tables | |
digits <- 5 | |
i <- 1 | |
for (dbm in dbm.groups) { | |
mw.raw <- dBm2mW(dbm) | |
mw.abs <- formatC(mw.raw, digits=digits, format="fg") | |
mw.sci <- FormatSciLatex(mw.raw, digits=digits-1) | |
df <- data.frame(dbm, mw.abs, mw.sci) | |
colnames(df) <- colnames | |
xt <- XtableNoWarnings(df, align=align.groups[i]) | |
print(xt, include.rownames=FALSE, | |
floating=FALSE, | |
sanitize.text.function=identity, | |
file=file.groups[i]) | |
i <- i + 1 | |
} |
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
% Place two dBm conversion tables, as produced by dbm_table.r, next to each | |
% other on an A4 page. | |
% | |
% Daniel Weibel <[email protected]> December 2015 | |
%------------------------------------------------------------------------------% | |
\documentclass{article} | |
\usepackage[a4paper,margin=1cm]{geometry} | |
\usepackage{dcolumn} | |
% Column type with alignment on decimal dot (or other char). The argument is | |
% the max. number of decimal places in the column (defines column width). | |
% Note: for the headers of these columns use e.g. \multicolumn{1}{|l|}{Text} | |
\newcolumntype{d}[1]{D{.}{.}{#1}} % Align on decimal dot | |
\newcolumntype{x}[1]{D{x}{\times}{#1}} % Align on 'x' and replace with '\times' | |
% Disable page numbers | |
\pagenumbering{gobble} | |
\begin{document} | |
\small | |
\begin{center} | |
\parbox{0.39\textwidth}{\centering\include{tab_1}} | |
\parbox{0.45\textwidth}{\centering\include{tab_2}} | |
\end{center} | |
\end{document} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment