diff --git a/hardware/Assem2.SLDASM b/hardware/Assem2.SLDASM new file mode 100644 index 0000000..8a9d9da Binary files /dev/null and b/hardware/Assem2.SLDASM differ diff --git a/hardware/BOM_1v1.png b/hardware/BOM_1v1.png new file mode 100644 index 0000000..58e14d2 Binary files /dev/null and b/hardware/BOM_1v1.png differ diff --git a/hardware/Basepic.SLDDRW b/hardware/Basepic.SLDDRW new file mode 100644 index 0000000..1c5ae9d Binary files /dev/null and b/hardware/Basepic.SLDDRW differ diff --git a/hardware/DTMF_Research.bib b/hardware/DTMF_Research.bib new file mode 100644 index 0000000..60afba8 --- /dev/null +++ b/hardware/DTMF_Research.bib @@ -0,0 +1,54 @@ +@misc{ wiki:DTMF, + author = "Wikipedia", + title = "Dual-tone multi-frequency signaling", + year = "2016", + url = "https://en.wikipedia.org/wiki/Dual-tone_multi-frequency_signaling", + note = "[Online; accessed 27-August-2016]" + } + +@misc{ wiki:Goertzel, + author = "Wikipedia", + title = "Goertzel algorithm", + year = "2016", + url = "https://en.wikipedia.org/wiki/Goertzel_algorithm", + note = "[Online; accessed 27-August-2016]" + } + +@misc{ wiki:FIR, + author = "Wikipedia", + title = "Finite impulse response", + year = "2016", + url = "https://en.wikipedia.org/wiki/Finite_impulse_response", + note = "[Online; accessed 27-August-2016]" + } + +@misc{ wiki:IIR, + author = "Wikipedia", + title = "Infinite impulse response", + year = "2016", + url = "https://en.wikipedia.org/wiki/Infinite_impulse_response", + note = "[Online; accessed 27-August-2016]" + } + +@misc{ wiki:Nyquist-Shannon, + author = "Wikipedia", + title = "Nyquist–Shannon sampling theorem", + year = "2016", + url = "https://en.wikipedia.org/wiki/Nyquist%E2%80%93Shannon_sampling_theorem", + note = "[Online; accessed 27-August-2016]" + } + +@misc{ wiki:Z-transform, + author = "Wikipedia", + title = "Z-transform", + year = "2016", + url = "https://en.wikipedia.org/wiki/Z-transform", + note = "[Online; accessed 27-August-2016]" + } + +@article{ DTMF_genave, + author = "Genave.com", + title = "DTMF Explained", + url = "http://www.genave.com/dtmf.htm", + note = "[Online; accessed 27-August-2016]" +} \ No newline at end of file diff --git a/hardware/DTMF_Research.pdf b/hardware/DTMF_Research.pdf new file mode 100644 index 0000000..83117b9 Binary files /dev/null and b/hardware/DTMF_Research.pdf differ diff --git a/hardware/DTMF_Research.synctex.gz b/hardware/DTMF_Research.synctex.gz new file mode 100644 index 0000000..48d5b57 Binary files /dev/null and b/hardware/DTMF_Research.synctex.gz differ diff --git a/hardware/DTMF_Research.tex b/hardware/DTMF_Research.tex new file mode 100644 index 0000000..42f7f4a --- /dev/null +++ b/hardware/DTMF_Research.tex @@ -0,0 +1,66 @@ +\documentclass[12pt]{article} +\usepackage[margin=1in]{geometry} +\usepackage{parskip} +\usepackage{cite} +\usepackage{url} +\usepackage{arydshln} +\usepackage{amsmath} + +\begin{document} +\title{Dual-Tone Multi-Frequency Signaling} +\author{Brendan Haines} +\maketitle + +\section{Encoding} +Dual-Tone Multi Frequency Signaling uses audible tones as opposed to digital signals due to the nature of the mediums they are broadcast over. Since DTMF is often used with radio phones as well as traditional "landline" telephones, and these technologies are designed to carry voice well, staying within the same frequency range reduces complexity and expense of specialized equipment at both the transmitting and receiving stations. Often, the speaker output of a radio can simply be plugged into a decoder with no additional specialized hardware, resulting in lower equipment costs\cite{DTMF_genave}. + +\subsection{Frequencies\cite{wiki:DTMF}} +\begin{tabular}{|c c c : c | l |} + \hline + 1 & 2 & 3 & A & 687 Hz \\ + 4 & 5 & 6 & B & 770 Hz\\ + 7 & 8 & 9 & C & 852 Hz\\ + $\ast$ & 0 & \# & D & 941 Hz\\ + \hline + 1209 Hz & 1336 Hz & 1477 Hz & 1633 Hz \\ + \cline{1-4} +\end{tabular} + +The A, B, C, and D keys are omitted on most handsets however are often used for automation purposes for triggering of remote functions such as controling an amateur radio repeater during an active phone call\cite{wiki:DTMF}. + +\subsection{Timing} +DTF uses a "mark" (amplitude $\neq$ 0) followed by a "space" (amplitude = 0). Timing can vary widely depending on the system being used. For example, when using a manual encoder such as an ordinary telephone each button press will create a mark and the time between presses will be spaces. Higher speeds can be achieved using automatic or "store and forward" DTMF encoders. Motorola uses a standard of 250ms mark and 250ms space, and other systems include 40ms/20ms or 20ms/20ms mark and space respectively\cite{DTMF_genave}. + +\section{Decoding} +Originally decoded using tuned filter banks, however DSP now dominates decoding and the Goertzel algorthim is often used\cite{wiki:DTMF}. + +\subsection{Goertzel Algorithm} +The Goertzel algorithm or Goertzel filter uses the Discrete Fourier Transform (DFT) to evaluate frequency content of a signal at specific frequencies very efficiently. Although the Fast Fourier Transform (FFT) is more efficient for analyzing a complete spectrum of frequency, in the case where only a few frequencies are relevant (such as the 8 DTMF frequencies), the Goertzel algorithm is more numerically efficient. It works well even on small processors in embedded applications\cite{wiki:Goertzel} + +Where $x[n]$ is the $n^{th}$ sample and $\omega _{0}$ is frequency in radians per sample, an intermediate sequence $s[n]$: +$$s[-2]=s[-1]=0$$ +\begin{equation} \label{eqn:stage_1_goertzel} +s[n] = x[n] + 2 cos(\omega _{0})s[n-1] - s[n-2] +\end{equation} + +The second stage of the Goertzel filter applies to $s[n]$, producing output sequence $y[n]$: +\begin{equation} \label{eqn:stage_2_goertzel} +y[n] = s[n] - e^{-j\omega _{0}}s[n-1] +\end{equation} + +A Z-transform converts a discrete-time signal to a complex frequency domain\cite{wiki:Z-transform}. It can be applied to equations \ref{eqn:stage_1_goertzel} and \ref{eqn:stage_2_goertzel} respectively: +\begin{align} \label{eqn:z_goertzel} +\frac{S(z)}{X(z)} &= \frac{1}{1-2cos(\omega _{0})z^{-1} + z^{-2}}\nonumber\\ +&= \frac{1}{(1-e^{+j\omega _{0}} z^{-1})(1 - e^{-j\omega _{0}}z^{-1})}\\ +\frac{Y(z)}{S(z)} &= 1 - e^{-j\omega _{0}} z^{-1} +\end{align} + +The combined transfer function of the cascade of the two filters: +\begin{align} \label{eqn:z_combined_goertzel} +\frac{S(z)}{X(z)}\frac{Y(z)}{S(z)} = \frac{Y(z)}{X(z)} &= \frac{(1-e^{-j\omega _{0}}z^{-1})}{(1-e^{+j\omega _{0}} z^{-1})(1 - e^{-j\omega _{0}}z^{-1})}\nonumber\\ +&= \frac{1}{(1-e^{+j\omega _{0}} z^{-1})} +\end{align} + +\bibliography{DTMF_Research}{} +\bibliographystyle{IEEEtran} +\end{document} \ No newline at end of file diff --git a/hardware/DTMF_Research_bib.txt b/hardware/DTMF_Research_bib.txt new file mode 100644 index 0000000..87f2439 --- /dev/null +++ b/hardware/DTMF_Research_bib.txt @@ -0,0 +1,3 @@ +@article{ wikipedia_DTMF + title="DTMF" +} \ No newline at end of file diff --git a/hardware/Hohm Phone pcb 3D.png b/hardware/Hohm Phone pcb 3D.png new file mode 100644 index 0000000..bcf8602 Binary files /dev/null and b/hardware/Hohm Phone pcb 3D.png differ diff --git a/hardware/Home Base.sldprt b/hardware/Home Base.sldprt new file mode 100644 index 0000000..89462f8 Binary files /dev/null and b/hardware/Home Base.sldprt differ diff --git a/hardware/P1.SLDPRT b/hardware/P1.SLDPRT new file mode 100644 index 0000000..36836d8 Binary files /dev/null and b/hardware/P1.SLDPRT differ diff --git a/hardware/P1.STL b/hardware/P1.STL new file mode 100644 index 0000000..6e292b2 Binary files /dev/null and b/hardware/P1.STL differ diff --git a/hardware/P1Inductor.SLDPRT b/hardware/P1Inductor.SLDPRT new file mode 100644 index 0000000..f45d6e2 Binary files /dev/null and b/hardware/P1Inductor.SLDPRT differ diff --git a/hardware/P1Keypad.SLDPRT b/hardware/P1Keypad.SLDPRT new file mode 100644 index 0000000..77713a2 Binary files /dev/null and b/hardware/P1Keypad.SLDPRT differ diff --git a/hardware/P1Speaker.SLDPRT b/hardware/P1Speaker.SLDPRT new file mode 100644 index 0000000..7e787e1 Binary files /dev/null and b/hardware/P1Speaker.SLDPRT differ diff --git a/hardware/P2.SLDPRT b/hardware/P2.SLDPRT new file mode 100644 index 0000000..a5f482c Binary files /dev/null and b/hardware/P2.SLDPRT differ diff --git a/hardware/P2.STL b/hardware/P2.STL new file mode 100644 index 0000000..6e1819d Binary files /dev/null and b/hardware/P2.STL differ diff --git a/hardware/P2_casual.png b/hardware/P2_casual.png new file mode 100644 index 0000000..082e457 Binary files /dev/null and b/hardware/P2_casual.png differ diff --git a/hardware/P2_casual_g.png b/hardware/P2_casual_g.png new file mode 100644 index 0000000..e17d04b Binary files /dev/null and b/hardware/P2_casual_g.png differ diff --git a/hardware/P2_closeup_buttons.png b/hardware/P2_closeup_buttons.png new file mode 100644 index 0000000..7cc0fc2 Binary files /dev/null and b/hardware/P2_closeup_buttons.png differ diff --git a/hardware/P2_left.SLDPRT b/hardware/P2_left.SLDPRT new file mode 100644 index 0000000..44fdf81 Binary files /dev/null and b/hardware/P2_left.SLDPRT differ diff --git a/hardware/P2_left.STL b/hardware/P2_left.STL new file mode 100644 index 0000000..4fcda0b Binary files /dev/null and b/hardware/P2_left.STL differ diff --git a/hardware/P2_right.SLDPRT b/hardware/P2_right.SLDPRT new file mode 100644 index 0000000..6b4fb48 Binary files /dev/null and b/hardware/P2_right.SLDPRT differ diff --git a/hardware/P2_right.STL b/hardware/P2_right.STL new file mode 100644 index 0000000..d4e4b14 Binary files /dev/null and b/hardware/P2_right.STL differ diff --git a/hardware/P3 - Part 2.stl b/hardware/P3 - Part 2.stl new file mode 100644 index 0000000..8637a2e Binary files /dev/null and b/hardware/P3 - Part 2.stl differ diff --git a/hardware/P3 - base.SLDPRT b/hardware/P3 - base.SLDPRT new file mode 100644 index 0000000..6299f9b Binary files /dev/null and b/hardware/P3 - base.SLDPRT differ diff --git a/hardware/P3.SLDPRT b/hardware/P3.SLDPRT new file mode 100644 index 0000000..d6ed365 Binary files /dev/null and b/hardware/P3.SLDPRT differ diff --git a/hardware/P7.SLDPRT b/hardware/P7.SLDPRT new file mode 100644 index 0000000..2e17bb2 Binary files /dev/null and b/hardware/P7.SLDPRT differ diff --git a/hardware/P7_assembly.png b/hardware/P7_assembly.png new file mode 100644 index 0000000..35f623e Binary files /dev/null and b/hardware/P7_assembly.png differ diff --git a/hardware/P7_assembly_better.png b/hardware/P7_assembly_better.png new file mode 100644 index 0000000..e742903 Binary files /dev/null and b/hardware/P7_assembly_better.png differ diff --git a/hardware/P8.SLDPRT b/hardware/P8.SLDPRT new file mode 100644 index 0000000..4a4a9ac Binary files /dev/null and b/hardware/P8.SLDPRT differ diff --git a/hardware/P8_left.SLDDRW b/hardware/P8_left.SLDDRW new file mode 100644 index 0000000..1081730 Binary files /dev/null and b/hardware/P8_left.SLDDRW differ diff --git a/hardware/P8_left.SLDPRT b/hardware/P8_left.SLDPRT new file mode 100644 index 0000000..3b9fa42 Binary files /dev/null and b/hardware/P8_left.SLDPRT differ diff --git a/hardware/P8_left.STL b/hardware/P8_left.STL new file mode 100644 index 0000000..c7b6713 Binary files /dev/null and b/hardware/P8_left.STL differ diff --git a/hardware/P8_right.SLDPRT b/hardware/P8_right.SLDPRT new file mode 100644 index 0000000..c73e0fb Binary files /dev/null and b/hardware/P8_right.SLDPRT differ diff --git a/hardware/P8_right.STL b/hardware/P8_right.STL new file mode 100644 index 0000000..b8d1942 Binary files /dev/null and b/hardware/P8_right.STL differ diff --git a/hardware/P9.SLDPRT b/hardware/P9.SLDPRT new file mode 100644 index 0000000..97d9090 Binary files /dev/null and b/hardware/P9.SLDPRT differ diff --git a/hardware/P9_left.STL b/hardware/P9_left.STL new file mode 100644 index 0000000..351eb51 Binary files /dev/null and b/hardware/P9_left.STL differ diff --git a/hardware/P9_right.STL b/hardware/P9_right.STL new file mode 100644 index 0000000..4a227ef Binary files /dev/null and b/hardware/P9_right.STL differ diff --git a/hardware/Slack for iOS Upload (1).jpg b/hardware/Slack for iOS Upload (1).jpg new file mode 100644 index 0000000..4aa8a11 Binary files /dev/null and b/hardware/Slack for iOS Upload (1).jpg differ diff --git a/hardware/Slack for iOS Upload.jpg b/hardware/Slack for iOS Upload.jpg new file mode 100644 index 0000000..b141e69 Binary files /dev/null and b/hardware/Slack for iOS Upload.jpg differ diff --git a/hardware/button cap.SLDPRT b/hardware/button cap.SLDPRT new file mode 100644 index 0000000..ddabf98 Binary files /dev/null and b/hardware/button cap.SLDPRT differ diff --git a/hardware/final_assem.SLDASM b/hardware/final_assem.SLDASM new file mode 100644 index 0000000..5d4e2f5 Binary files /dev/null and b/hardware/final_assem.SLDASM differ diff --git a/hardware/final_bottom.png b/hardware/final_bottom.png new file mode 100644 index 0000000..8612a9d Binary files /dev/null and b/hardware/final_bottom.png differ diff --git a/hardware/final_docked.png b/hardware/final_docked.png new file mode 100644 index 0000000..d6f31e7 Binary files /dev/null and b/hardware/final_docked.png differ diff --git a/hardware/final_top.png b/hardware/final_top.png new file mode 100644 index 0000000..4ea3e7a Binary files /dev/null and b/hardware/final_top.png differ diff --git a/hardware/hohm base.pdf b/hardware/hohm base.pdf new file mode 100644 index 0000000..0dee9ee Binary files /dev/null and b/hardware/hohm base.pdf differ diff --git a/hardware/led.SLDPRT b/hardware/led.SLDPRT new file mode 100644 index 0000000..934baec Binary files /dev/null and b/hardware/led.SLDPRT differ diff --git a/hardware/p10.SLDPRT b/hardware/p10.SLDPRT new file mode 100644 index 0000000..fb254a7 Binary files /dev/null and b/hardware/p10.SLDPRT differ diff --git a/hardware/p10_left.STL b/hardware/p10_left.STL new file mode 100644 index 0000000..f4aac4d Binary files /dev/null and b/hardware/p10_left.STL differ diff --git a/hardware/p10_right.STL b/hardware/p10_right.STL new file mode 100644 index 0000000..6644e45 Binary files /dev/null and b/hardware/p10_right.STL differ diff --git a/hardware/p10_right.STL.SLDPRT b/hardware/p10_right.STL.SLDPRT new file mode 100644 index 0000000..f8d59fc Binary files /dev/null and b/hardware/p10_right.STL.SLDPRT differ diff --git a/hardware/p11.SLDPRT b/hardware/p11.SLDPRT new file mode 100644 index 0000000..58ca95d Binary files /dev/null and b/hardware/p11.SLDPRT differ diff --git a/hardware/p12.SLDPRT b/hardware/p12.SLDPRT new file mode 100644 index 0000000..4799269 Binary files /dev/null and b/hardware/p12.SLDPRT differ