mirror of https://github.com/mpastell/Weave.jl
803 lines
75 KiB
HTML
803 lines
75 KiB
HTML
|
<!DOCTYPE html>
|
||
|
<HTML lang = "en">
|
||
|
<HEAD>
|
||
|
<meta charset="UTF-8"/>
|
||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||
|
<title>FIR filter design with Julia</title>
|
||
|
|
||
|
|
||
|
<script type="text/x-mathjax-config">
|
||
|
MathJax.Hub.Config({
|
||
|
tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]},
|
||
|
TeX: { equationNumbers: { autoNumber: "AMS" } }
|
||
|
});
|
||
|
</script>
|
||
|
|
||
|
<script type="text/javascript" async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
|
||
|
</script>
|
||
|
|
||
|
|
||
|
<style>
|
||
|
pre.hljl {
|
||
|
border: 1px solid #ccc;
|
||
|
margin: 5px;
|
||
|
padding: 5px;
|
||
|
overflow-x: auto;
|
||
|
color: rgb(68,68,68); background-color: rgb(251,251,251); }
|
||
|
pre.hljl > span.hljl-t { }
|
||
|
pre.hljl > span.hljl-w { }
|
||
|
pre.hljl > span.hljl-e { }
|
||
|
pre.hljl > span.hljl-eB { }
|
||
|
pre.hljl > span.hljl-o { }
|
||
|
pre.hljl > span.hljl-k { color: rgb(148,91,176); font-weight: bold; }
|
||
|
pre.hljl > span.hljl-kc { color: rgb(59,151,46); font-style: italic; }
|
||
|
pre.hljl > span.hljl-kd { color: rgb(214,102,97); font-style: italic; }
|
||
|
pre.hljl > span.hljl-kn { color: rgb(148,91,176); font-weight: bold; }
|
||
|
pre.hljl > span.hljl-kp { color: rgb(148,91,176); font-weight: bold; }
|
||
|
pre.hljl > span.hljl-kr { color: rgb(148,91,176); font-weight: bold; }
|
||
|
pre.hljl > span.hljl-kt { color: rgb(148,91,176); font-weight: bold; }
|
||
|
pre.hljl > span.hljl-n { }
|
||
|
pre.hljl > span.hljl-na { }
|
||
|
pre.hljl > span.hljl-nb { }
|
||
|
pre.hljl > span.hljl-nbp { }
|
||
|
pre.hljl > span.hljl-nc { }
|
||
|
pre.hljl > span.hljl-ncB { }
|
||
|
pre.hljl > span.hljl-nd { color: rgb(214,102,97); }
|
||
|
pre.hljl > span.hljl-ne { }
|
||
|
pre.hljl > span.hljl-neB { }
|
||
|
pre.hljl > span.hljl-nf { color: rgb(66,102,213); }
|
||
|
pre.hljl > span.hljl-nfm { color: rgb(66,102,213); }
|
||
|
pre.hljl > span.hljl-np { }
|
||
|
pre.hljl > span.hljl-nl { }
|
||
|
pre.hljl > span.hljl-nn { }
|
||
|
pre.hljl > span.hljl-no { }
|
||
|
pre.hljl > span.hljl-nt { }
|
||
|
pre.hljl > span.hljl-nv { }
|
||
|
pre.hljl > span.hljl-nvc { }
|
||
|
pre.hljl > span.hljl-nvg { }
|
||
|
pre.hljl > span.hljl-nvi { }
|
||
|
pre.hljl > span.hljl-nvm { }
|
||
|
pre.hljl > span.hljl-l { }
|
||
|
pre.hljl > span.hljl-ld { color: rgb(148,91,176); font-style: italic; }
|
||
|
pre.hljl > span.hljl-s { color: rgb(201,61,57); }
|
||
|
pre.hljl > span.hljl-sa { color: rgb(201,61,57); }
|
||
|
pre.hljl > span.hljl-sb { color: rgb(201,61,57); }
|
||
|
pre.hljl > span.hljl-sc { color: rgb(201,61,57); }
|
||
|
pre.hljl > span.hljl-sd { color: rgb(201,61,57); }
|
||
|
pre.hljl > span.hljl-sdB { color: rgb(201,61,57); }
|
||
|
pre.hljl > span.hljl-sdC { color: rgb(201,61,57); }
|
||
|
pre.hljl > span.hljl-se { color: rgb(59,151,46); }
|
||
|
pre.hljl > span.hljl-sh { color: rgb(201,61,57); }
|
||
|
pre.hljl > span.hljl-si { }
|
||
|
pre.hljl > span.hljl-so { color: rgb(201,61,57); }
|
||
|
pre.hljl > span.hljl-sr { color: rgb(201,61,57); }
|
||
|
pre.hljl > span.hljl-ss { color: rgb(201,61,57); }
|
||
|
pre.hljl > span.hljl-ssB { color: rgb(201,61,57); }
|
||
|
pre.hljl > span.hljl-nB { color: rgb(59,151,46); }
|
||
|
pre.hljl > span.hljl-nbB { color: rgb(59,151,46); }
|
||
|
pre.hljl > span.hljl-nfB { color: rgb(59,151,46); }
|
||
|
pre.hljl > span.hljl-nh { color: rgb(59,151,46); }
|
||
|
pre.hljl > span.hljl-ni { color: rgb(59,151,46); }
|
||
|
pre.hljl > span.hljl-nil { color: rgb(59,151,46); }
|
||
|
pre.hljl > span.hljl-noB { color: rgb(59,151,46); }
|
||
|
pre.hljl > span.hljl-oB { color: rgb(102,102,102); font-weight: bold; }
|
||
|
pre.hljl > span.hljl-ow { color: rgb(102,102,102); font-weight: bold; }
|
||
|
pre.hljl > span.hljl-p { }
|
||
|
pre.hljl > span.hljl-c { color: rgb(153,153,119); font-style: italic; }
|
||
|
pre.hljl > span.hljl-ch { color: rgb(153,153,119); font-style: italic; }
|
||
|
pre.hljl > span.hljl-cm { color: rgb(153,153,119); font-style: italic; }
|
||
|
pre.hljl > span.hljl-cp { color: rgb(153,153,119); font-style: italic; }
|
||
|
pre.hljl > span.hljl-cpB { color: rgb(153,153,119); font-style: italic; }
|
||
|
pre.hljl > span.hljl-cs { color: rgb(153,153,119); font-style: italic; }
|
||
|
pre.hljl > span.hljl-csB { color: rgb(153,153,119); font-style: italic; }
|
||
|
pre.hljl > span.hljl-g { }
|
||
|
pre.hljl > span.hljl-gd { }
|
||
|
pre.hljl > span.hljl-ge { }
|
||
|
pre.hljl > span.hljl-geB { }
|
||
|
pre.hljl > span.hljl-gh { }
|
||
|
pre.hljl > span.hljl-gi { }
|
||
|
pre.hljl > span.hljl-go { }
|
||
|
pre.hljl > span.hljl-gp { }
|
||
|
pre.hljl > span.hljl-gs { }
|
||
|
pre.hljl > span.hljl-gsB { }
|
||
|
pre.hljl > span.hljl-gt { }
|
||
|
</style>
|
||
|
|
||
|
|
||
|
|
||
|
<style type="text/css">
|
||
|
@font-face {
|
||
|
font-style: normal;
|
||
|
font-weight: 300;
|
||
|
}
|
||
|
@font-face {
|
||
|
font-style: normal;
|
||
|
font-weight: 400;
|
||
|
}
|
||
|
@font-face {
|
||
|
font-style: normal;
|
||
|
font-weight: 600;
|
||
|
}
|
||
|
html {
|
||
|
font-family: sans-serif; /* 1 */
|
||
|
-ms-text-size-adjust: 100%; /* 2 */
|
||
|
-webkit-text-size-adjust: 100%; /* 2 */
|
||
|
}
|
||
|
body {
|
||
|
margin: 0;
|
||
|
}
|
||
|
article,
|
||
|
aside,
|
||
|
details,
|
||
|
figcaption,
|
||
|
figure,
|
||
|
footer,
|
||
|
header,
|
||
|
hgroup,
|
||
|
main,
|
||
|
menu,
|
||
|
nav,
|
||
|
section,
|
||
|
summary {
|
||
|
display: block;
|
||
|
}
|
||
|
audio,
|
||
|
canvas,
|
||
|
progress,
|
||
|
video {
|
||
|
display: inline-block; /* 1 */
|
||
|
vertical-align: baseline; /* 2 */
|
||
|
}
|
||
|
audio:not([controls]) {
|
||
|
display: none;
|
||
|
height: 0;
|
||
|
}
|
||
|
[hidden],
|
||
|
template {
|
||
|
display: none;
|
||
|
}
|
||
|
a:active,
|
||
|
a:hover {
|
||
|
outline: 0;
|
||
|
}
|
||
|
abbr[title] {
|
||
|
border-bottom: 1px dotted;
|
||
|
}
|
||
|
b,
|
||
|
strong {
|
||
|
font-weight: bold;
|
||
|
}
|
||
|
dfn {
|
||
|
font-style: italic;
|
||
|
}
|
||
|
h1 {
|
||
|
font-size: 2em;
|
||
|
margin: 0.67em 0;
|
||
|
}
|
||
|
mark {
|
||
|
background: #ff0;
|
||
|
color: #000;
|
||
|
}
|
||
|
small {
|
||
|
font-size: 80%;
|
||
|
}
|
||
|
sub,
|
||
|
sup {
|
||
|
font-size: 75%;
|
||
|
line-height: 0;
|
||
|
position: relative;
|
||
|
vertical-align: baseline;
|
||
|
}
|
||
|
sup {
|
||
|
top: -0.5em;
|
||
|
}
|
||
|
sub {
|
||
|
bottom: -0.25em;
|
||
|
}
|
||
|
img {
|
||
|
border: 0;
|
||
|
}
|
||
|
svg:not(:root) {
|
||
|
overflow: hidden;
|
||
|
}
|
||
|
figure {
|
||
|
margin: 1em 40px;
|
||
|
}
|
||
|
hr {
|
||
|
-moz-box-sizing: content-box;
|
||
|
box-sizing: content-box;
|
||
|
height: 0;
|
||
|
}
|
||
|
pre {
|
||
|
overflow: auto;
|
||
|
}
|
||
|
code,
|
||
|
kbd,
|
||
|
pre,
|
||
|
samp {
|
||
|
font-family: monospace, monospace;
|
||
|
font-size: 1em;
|
||
|
}
|
||
|
button,
|
||
|
input,
|
||
|
optgroup,
|
||
|
select,
|
||
|
textarea {
|
||
|
color: inherit; /* 1 */
|
||
|
font: inherit; /* 2 */
|
||
|
margin: 0; /* 3 */
|
||
|
}
|
||
|
button {
|
||
|
overflow: visible;
|
||
|
}
|
||
|
button,
|
||
|
select {
|
||
|
text-transform: none;
|
||
|
}
|
||
|
button,
|
||
|
html input[type="button"], /* 1 */
|
||
|
input[type="reset"],
|
||
|
input[type="submit"] {
|
||
|
-webkit-appearance: button; /* 2 */
|
||
|
cursor: pointer; /* 3 */
|
||
|
}
|
||
|
button[disabled],
|
||
|
html input[disabled] {
|
||
|
cursor: default;
|
||
|
}
|
||
|
button::-moz-focus-inner,
|
||
|
input::-moz-focus-inner {
|
||
|
border: 0;
|
||
|
padding: 0;
|
||
|
}
|
||
|
input {
|
||
|
line-height: normal;
|
||
|
}
|
||
|
input[type="checkbox"],
|
||
|
input[type="radio"] {
|
||
|
box-sizing: border-box; /* 1 */
|
||
|
padding: 0; /* 2 */
|
||
|
}
|
||
|
input[type="number"]::-webkit-inner-spin-button,
|
||
|
input[type="number"]::-webkit-outer-spin-button {
|
||
|
height: auto;
|
||
|
}
|
||
|
input[type="search"] {
|
||
|
-webkit-appearance: textfield; /* 1 */
|
||
|
-moz-box-sizing: content-box;
|
||
|
-webkit-box-sizing: content-box; /* 2 */
|
||
|
box-sizing: content-box;
|
||
|
}
|
||
|
input[type="search"]::-webkit-search-cancel-button,
|
||
|
input[type="search"]::-webkit-search-decoration {
|
||
|
-webkit-appearance: none;
|
||
|
}
|
||
|
fieldset {
|
||
|
border: 1px solid #c0c0c0;
|
||
|
margin: 0 2px;
|
||
|
padding: 0.35em 0.625em 0.75em;
|
||
|
}
|
||
|
legend {
|
||
|
border: 0; /* 1 */
|
||
|
padding: 0; /* 2 */
|
||
|
}
|
||
|
textarea {
|
||
|
overflow: auto;
|
||
|
}
|
||
|
optgroup {
|
||
|
font-weight: bold;
|
||
|
}
|
||
|
table {
|
||
|
font-family: monospace, monospace;
|
||
|
font-size : 0.8em;
|
||
|
border-collapse: collapse;
|
||
|
border-spacing: 0;
|
||
|
}
|
||
|
td,
|
||
|
th {
|
||
|
padding: 0;
|
||
|
}
|
||
|
thead th {
|
||
|
border-bottom: 1px solid black;
|
||
|
background-color: white;
|
||
|
}
|
||
|
tr:nth-child(odd){
|
||
|
background-color: rgb(248,248,248);
|
||
|
}
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Skeleton V2.0.4
|
||
|
* Copyright 2014, Dave Gamache
|
||
|
* www.getskeleton.com
|
||
|
* Free to use under the MIT license.
|
||
|
* http://www.opensource.org/licenses/mit-license.php
|
||
|
* 12/29/2014
|
||
|
*/
|
||
|
.container {
|
||
|
position: relative;
|
||
|
width: 100%;
|
||
|
max-width: 960px;
|
||
|
margin: 0 auto;
|
||
|
padding: 0 20px;
|
||
|
box-sizing: border-box; }
|
||
|
.column,
|
||
|
.columns {
|
||
|
width: 100%;
|
||
|
float: left;
|
||
|
box-sizing: border-box; }
|
||
|
@media (min-width: 400px) {
|
||
|
.container {
|
||
|
width: 85%;
|
||
|
padding: 0; }
|
||
|
}
|
||
|
@media (min-width: 550px) {
|
||
|
.container {
|
||
|
width: 80%; }
|
||
|
.column,
|
||
|
.columns {
|
||
|
margin-left: 4%; }
|
||
|
.column:first-child,
|
||
|
.columns:first-child {
|
||
|
margin-left: 0; }
|
||
|
|
||
|
.one.column,
|
||
|
.one.columns { width: 4.66666666667%; }
|
||
|
.two.columns { width: 13.3333333333%; }
|
||
|
.three.columns { width: 22%; }
|
||
|
.four.columns { width: 30.6666666667%; }
|
||
|
.five.columns { width: 39.3333333333%; }
|
||
|
.six.columns { width: 48%; }
|
||
|
.seven.columns { width: 56.6666666667%; }
|
||
|
.eight.columns { width: 65.3333333333%; }
|
||
|
.nine.columns { width: 74.0%; }
|
||
|
.ten.columns { width: 82.6666666667%; }
|
||
|
.eleven.columns { width: 91.3333333333%; }
|
||
|
.twelve.columns { width: 100%; margin-left: 0; }
|
||
|
|
||
|
.one-third.column { width: 30.6666666667%; }
|
||
|
.two-thirds.column { width: 65.3333333333%; }
|
||
|
|
||
|
.one-half.column { width: 48%; }
|
||
|
|
||
|
/* Offsets */
|
||
|
.offset-by-one.column,
|
||
|
.offset-by-one.columns { margin-left: 8.66666666667%; }
|
||
|
.offset-by-two.column,
|
||
|
.offset-by-two.columns { margin-left: 17.3333333333%; }
|
||
|
.offset-by-three.column,
|
||
|
.offset-by-three.columns { margin-left: 26%; }
|
||
|
.offset-by-four.column,
|
||
|
.offset-by-four.columns { margin-left: 34.6666666667%; }
|
||
|
.offset-by-five.column,
|
||
|
.offset-by-five.columns { margin-left: 43.3333333333%; }
|
||
|
.offset-by-six.column,
|
||
|
.offset-by-six.columns { margin-left: 52%; }
|
||
|
.offset-by-seven.column,
|
||
|
.offset-by-seven.columns { margin-left: 60.6666666667%; }
|
||
|
.offset-by-eight.column,
|
||
|
.offset-by-eight.columns { margin-left: 69.3333333333%; }
|
||
|
.offset-by-nine.column,
|
||
|
.offset-by-nine.columns { margin-left: 78.0%; }
|
||
|
.offset-by-ten.column,
|
||
|
.offset-by-ten.columns { margin-left: 86.6666666667%; }
|
||
|
.offset-by-eleven.column,
|
||
|
.offset-by-eleven.columns { margin-left: 95.3333333333%; }
|
||
|
|
||
|
.offset-by-one-third.column,
|
||
|
.offset-by-one-third.columns { margin-left: 34.6666666667%; }
|
||
|
.offset-by-two-thirds.column,
|
||
|
.offset-by-two-thirds.columns { margin-left: 69.3333333333%; }
|
||
|
|
||
|
.offset-by-one-half.column,
|
||
|
.offset-by-one-half.columns { margin-left: 52%; }
|
||
|
|
||
|
}
|
||
|
html {
|
||
|
font-size: 62.5%; }
|
||
|
body {
|
||
|
font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */
|
||
|
line-height: 1.6;
|
||
|
font-weight: 400;
|
||
|
font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||
|
color: #222; }
|
||
|
h1, h2, h3, h4, h5, h6 {
|
||
|
margin-top: 0;
|
||
|
margin-bottom: 2rem;
|
||
|
font-weight: 300; }
|
||
|
h1 { font-size: 3.6rem; line-height: 1.2; letter-spacing: -.1rem;}
|
||
|
h2 { font-size: 3.4rem; line-height: 1.25; letter-spacing: -.1rem; }
|
||
|
h3 { font-size: 3.2rem; line-height: 1.3; letter-spacing: -.1rem; }
|
||
|
h4 { font-size: 2.8rem; line-height: 1.35; letter-spacing: -.08rem; }
|
||
|
h5 { font-size: 2.4rem; line-height: 1.5; letter-spacing: -.05rem; }
|
||
|
h6 { font-size: 1.5rem; line-height: 1.6; letter-spacing: 0; }
|
||
|
|
||
|
p {
|
||
|
margin-top: 0; }
|
||
|
a {
|
||
|
color: #1EAEDB; }
|
||
|
a:hover {
|
||
|
color: #0FA0CE; }
|
||
|
.button,
|
||
|
button,
|
||
|
input[type="submit"],
|
||
|
input[type="reset"],
|
||
|
input[type="button"] {
|
||
|
display: inline-block;
|
||
|
height: 38px;
|
||
|
padding: 0 30px;
|
||
|
color: #555;
|
||
|
text-align: center;
|
||
|
font-size: 11px;
|
||
|
font-weight: 600;
|
||
|
line-height: 38px;
|
||
|
letter-spacing: .1rem;
|
||
|
text-transform: uppercase;
|
||
|
text-decoration: none;
|
||
|
white-space: nowrap;
|
||
|
background-color: transparent;
|
||
|
border-radius: 4px;
|
||
|
border: 1px solid #bbb;
|
||
|
cursor: pointer;
|
||
|
box-sizing: border-box; }
|
||
|
.button:hover,
|
||
|
button:hover,
|
||
|
input[type="submit"]:hover,
|
||
|
input[type="reset"]:hover,
|
||
|
input[type="button"]:hover,
|
||
|
.button:focus,
|
||
|
button:focus,
|
||
|
input[type="submit"]:focus,
|
||
|
input[type="reset"]:focus,
|
||
|
input[type="button"]:focus {
|
||
|
color: #333;
|
||
|
border-color: #888;
|
||
|
outline: 0; }
|
||
|
.button.button-primary,
|
||
|
button.button-primary,
|
||
|
input[type="submit"].button-primary,
|
||
|
input[type="reset"].button-primary,
|
||
|
input[type="button"].button-primary {
|
||
|
color: #FFF;
|
||
|
background-color: #33C3F0;
|
||
|
border-color: #33C3F0; }
|
||
|
.button.button-primary:hover,
|
||
|
button.button-primary:hover,
|
||
|
input[type="submit"].button-primary:hover,
|
||
|
input[type="reset"].button-primary:hover,
|
||
|
input[type="button"].button-primary:hover,
|
||
|
.button.button-primary:focus,
|
||
|
button.button-primary:focus,
|
||
|
input[type="submit"].button-primary:focus,
|
||
|
input[type="reset"].button-primary:focus,
|
||
|
input[type="button"].button-primary:focus {
|
||
|
color: #FFF;
|
||
|
background-color: #1EAEDB;
|
||
|
border-color: #1EAEDB; }
|
||
|
input[type="email"],
|
||
|
input[type="number"],
|
||
|
input[type="search"],
|
||
|
input[type="text"],
|
||
|
input[type="tel"],
|
||
|
input[type="url"],
|
||
|
input[type="password"],
|
||
|
textarea,
|
||
|
select {
|
||
|
height: 38px;
|
||
|
padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */
|
||
|
background-color: #fff;
|
||
|
border: 1px solid #D1D1D1;
|
||
|
border-radius: 4px;
|
||
|
box-shadow: none;
|
||
|
box-sizing: border-box; }
|
||
|
/* Removes awkward default styles on some inputs for iOS */
|
||
|
input[type="email"],
|
||
|
input[type="number"],
|
||
|
input[type="search"],
|
||
|
input[type="text"],
|
||
|
input[type="tel"],
|
||
|
input[type="url"],
|
||
|
input[type="password"],
|
||
|
textarea {
|
||
|
-webkit-appearance: none;
|
||
|
-moz-appearance: none;
|
||
|
appearance: none; }
|
||
|
textarea {
|
||
|
min-height: 65px;
|
||
|
padding-top: 6px;
|
||
|
padding-bottom: 6px; }
|
||
|
input[type="email"]:focus,
|
||
|
input[type="number"]:focus,
|
||
|
input[type="search"]:focus,
|
||
|
input[type="text"]:focus,
|
||
|
input[type="tel"]:focus,
|
||
|
input[type="url"]:focus,
|
||
|
input[type="password"]:focus,
|
||
|
textarea:focus,
|
||
|
select:focus {
|
||
|
border: 1px solid #33C3F0;
|
||
|
outline: 0; }
|
||
|
label,
|
||
|
legend {
|
||
|
display: block;
|
||
|
margin-bottom: .5rem;
|
||
|
font-weight: 600; }
|
||
|
fieldset {
|
||
|
padding: 0;
|
||
|
border-width: 0; }
|
||
|
input[type="checkbox"],
|
||
|
input[type="radio"] {
|
||
|
display: inline; }
|
||
|
label > .label-body {
|
||
|
display: inline-block;
|
||
|
margin-left: .5rem;
|
||
|
font-weight: normal; }
|
||
|
ul {
|
||
|
list-style: circle; }
|
||
|
ol {
|
||
|
list-style: decimal; }
|
||
|
ul ul,
|
||
|
ul ol,
|
||
|
ol ol,
|
||
|
ol ul {
|
||
|
margin: 1.5rem 0 1.5rem 3rem;
|
||
|
font-size: 90%; }
|
||
|
li > p {margin : 0;}
|
||
|
th,
|
||
|
td {
|
||
|
padding: 12px 15px;
|
||
|
text-align: left;
|
||
|
border-bottom: 1px solid #E1E1E1; }
|
||
|
th:first-child,
|
||
|
td:first-child {
|
||
|
padding-left: 0; }
|
||
|
th:last-child,
|
||
|
td:last-child {
|
||
|
padding-right: 0; }
|
||
|
button,
|
||
|
.button {
|
||
|
margin-bottom: 1rem; }
|
||
|
input,
|
||
|
textarea,
|
||
|
select,
|
||
|
fieldset {
|
||
|
margin-bottom: 1.5rem; }
|
||
|
pre,
|
||
|
blockquote,
|
||
|
dl,
|
||
|
figure,
|
||
|
table,
|
||
|
p,
|
||
|
ul,
|
||
|
ol,
|
||
|
form {
|
||
|
margin-bottom: 1.0rem; }
|
||
|
.u-full-width {
|
||
|
width: 100%;
|
||
|
box-sizing: border-box; }
|
||
|
.u-max-full-width {
|
||
|
max-width: 100%;
|
||
|
box-sizing: border-box; }
|
||
|
.u-pull-right {
|
||
|
float: right; }
|
||
|
.u-pull-left {
|
||
|
float: left; }
|
||
|
hr {
|
||
|
margin-top: 3rem;
|
||
|
margin-bottom: 3.5rem;
|
||
|
border-width: 0;
|
||
|
border-top: 1px solid #E1E1E1; }
|
||
|
.container:after,
|
||
|
.row:after,
|
||
|
.u-cf {
|
||
|
content: "";
|
||
|
display: table;
|
||
|
clear: both; }
|
||
|
|
||
|
pre {
|
||
|
display: block;
|
||
|
padding: 9.5px;
|
||
|
margin: 0 0 10px;
|
||
|
font-size: 13px;
|
||
|
line-height: 1.42857143;
|
||
|
word-break: break-all;
|
||
|
word-wrap: break-word;
|
||
|
border: 1px solid #ccc;
|
||
|
border-radius: 4px;
|
||
|
}
|
||
|
|
||
|
pre.hljl {
|
||
|
margin: 0 0 10px;
|
||
|
display: block;
|
||
|
background: #f5f5f5;
|
||
|
border-radius: 4px;
|
||
|
padding : 5px;
|
||
|
}
|
||
|
|
||
|
pre.output {
|
||
|
background: #ffffff;
|
||
|
}
|
||
|
|
||
|
pre.code {
|
||
|
background: #ffffff;
|
||
|
}
|
||
|
|
||
|
pre.julia-error {
|
||
|
color : red
|
||
|
}
|
||
|
|
||
|
code,
|
||
|
kbd,
|
||
|
pre,
|
||
|
samp {
|
||
|
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
|
||
|
font-size: 0.9em;
|
||
|
}
|
||
|
|
||
|
|
||
|
@media (min-width: 400px) {}
|
||
|
@media (min-width: 550px) {}
|
||
|
@media (min-width: 750px) {}
|
||
|
@media (min-width: 1000px) {}
|
||
|
@media (min-width: 1200px) {}
|
||
|
|
||
|
h1.title {margin-top : 20px}
|
||
|
img {max-width : 100%}
|
||
|
div.title {text-align: center;}
|
||
|
|
||
|
</style>
|
||
|
</HEAD>
|
||
|
|
||
|
<BODY>
|
||
|
<div class ="container">
|
||
|
<div class = "row">
|
||
|
<div class = "col-md-12 twelve columns">
|
||
|
<div class="title">
|
||
|
<h1 class="title">FIR filter design with Julia</h1>
|
||
|
<h5>Matti Pastell</h5>
|
||
|
<h5>21th April 2016</h5>
|
||
|
</div>
|
||
|
|
||
|
<h1>Introduction</h1>
|
||
|
<p>This an example of a julia script that can be published using <a href="http://mpastell.github.io/Weave.jl/latest/usage/">Weave</a>. The script can be executed normally using Julia or published to HTML or pdf with Weave. Text is written in markdown in lines starting with "<code>#'</code> " and code is executed and results are included in the published document.</p>
|
||
|
<p>Notice that you don't need to define chunk options, but you can using <code>#+</code>. just before code e.g. <code>#+ term=True, caption='Fancy plots.'</code>. If you're viewing the published version have a look at the <a href="FIR_design_plots.jl">source</a> to see the markup.</p>
|
||
|
|
||
|
<!-- this setup dependencies, but doesn't appear in the generated document -->
|
||
|
|
||
|
|
||
|
|
||
|
<h1>FIR Filter Design</h1>
|
||
|
<p>We'll implement lowpass, highpass and ' bandpass FIR filters. If you want to read more about DSP I highly recommend <a href="http://www.dspguide.com/">The Scientist and Engineer's Guide to Digital Signal Processing</a> which is freely available online.</p>
|
||
|
<h2>Calculating frequency response</h2>
|
||
|
<p>DSP.jl package doesn't (yet) have a method to calculate the the frequency response of a FIR filter so we define it:</p>
|
||
|
|
||
|
|
||
|
<pre class='hljl'>
|
||
|
<span class='hljl-k'>using</span><span class='hljl-t'> </span><span class='hljl-n'>Plots</span><span class='hljl-p'>,</span><span class='hljl-t'> </span><span class='hljl-n'>DSP</span><span class='hljl-t'>
|
||
|
</span><span class='hljl-nf'>gr</span><span class='hljl-p'>()</span><span class='hljl-t'>
|
||
|
|
||
|
</span><span class='hljl-k'>function</span><span class='hljl-t'> </span><span class='hljl-nf'>FIRfreqz</span><span class='hljl-p'>(</span><span class='hljl-n'>b</span><span class='hljl-oB'>::</span><span class='hljl-n'>Array</span><span class='hljl-p'>,</span><span class='hljl-t'> </span><span class='hljl-n'>w</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-nf'>range</span><span class='hljl-p'>(</span><span class='hljl-ni'>0</span><span class='hljl-p'>,</span><span class='hljl-t'> </span><span class='hljl-n'>stop</span><span class='hljl-oB'>=</span><span class='hljl-n'>π</span><span class='hljl-p'>,</span><span class='hljl-t'> </span><span class='hljl-n'>length</span><span class='hljl-oB'>=</span><span class='hljl-ni'>1024</span><span class='hljl-p'>))</span><span class='hljl-t'>
|
||
|
</span><span class='hljl-n'>n</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-nf'>length</span><span class='hljl-p'>(</span><span class='hljl-n'>w</span><span class='hljl-p'>)</span><span class='hljl-t'>
|
||
|
</span><span class='hljl-n'>h</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-nf'>Array</span><span class='hljl-p'>{</span><span class='hljl-n'>ComplexF32</span><span class='hljl-p'>}(</span><span class='hljl-n'>undef</span><span class='hljl-p'>,</span><span class='hljl-t'> </span><span class='hljl-n'>n</span><span class='hljl-p'>)</span><span class='hljl-t'>
|
||
|
</span><span class='hljl-n'>sw</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-ni'>0</span><span class='hljl-t'>
|
||
|
</span><span class='hljl-k'>for</span><span class='hljl-t'> </span><span class='hljl-n'>i</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-ni'>1</span><span class='hljl-oB'>:</span><span class='hljl-n'>n</span><span class='hljl-t'>
|
||
|
</span><span class='hljl-k'>for</span><span class='hljl-t'> </span><span class='hljl-n'>j</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-ni'>1</span><span class='hljl-oB'>:</span><span class='hljl-nf'>length</span><span class='hljl-p'>(</span><span class='hljl-n'>b</span><span class='hljl-p'>)</span><span class='hljl-t'>
|
||
|
</span><span class='hljl-n'>sw</span><span class='hljl-t'> </span><span class='hljl-oB'>+=</span><span class='hljl-t'> </span><span class='hljl-n'>b</span><span class='hljl-p'>[</span><span class='hljl-n'>j</span><span class='hljl-p'>]</span><span class='hljl-oB'>*</span><span class='hljl-nf'>exp</span><span class='hljl-p'>(</span><span class='hljl-oB'>-</span><span class='hljl-n'>im</span><span class='hljl-oB'>*</span><span class='hljl-n'>w</span><span class='hljl-p'>[</span><span class='hljl-n'>i</span><span class='hljl-p'>])</span><span class='hljl-oB'>^-</span><span class='hljl-n'>j</span><span class='hljl-t'>
|
||
|
</span><span class='hljl-k'>end</span><span class='hljl-t'>
|
||
|
</span><span class='hljl-n'>h</span><span class='hljl-p'>[</span><span class='hljl-n'>i</span><span class='hljl-p'>]</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-n'>sw</span><span class='hljl-t'>
|
||
|
</span><span class='hljl-n'>sw</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-ni'>0</span><span class='hljl-t'>
|
||
|
</span><span class='hljl-k'>end</span><span class='hljl-t'>
|
||
|
</span><span class='hljl-k'>return</span><span class='hljl-t'> </span><span class='hljl-n'>h</span><span class='hljl-t'>
|
||
|
</span><span class='hljl-k'>end</span>
|
||
|
</pre>
|
||
|
|
||
|
|
||
|
<pre class="output">
|
||
|
FIRfreqz (generic function with 2 methods)
|
||
|
</pre>
|
||
|
|
||
|
|
||
|
<h2>Design Lowpass FIR filter</h2>
|
||
|
<p>Designing a lowpass FIR filter is very simple to do with DSP.jl, all you need to do is to define the window length, cut off frequency and the window. We will define a lowpass filter with cut off frequency at 5Hz for a signal sampled at 20 Hz. We will use the Hamming window, which is defined as: <span class="math">$w(n) = \alpha - \beta\cos\frac{2\pi n}{N-1}$</span>, where <span class="math">$\alpha=0.54$</span> and <span class="math">$\beta=0.46$</span></p>
|
||
|
|
||
|
|
||
|
<pre class='hljl'>
|
||
|
<span class='hljl-n'>fs</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-ni'>20</span><span class='hljl-t'>
|
||
|
</span><span class='hljl-n'>f</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-nf'>digitalfilter</span><span class='hljl-p'>(</span><span class='hljl-nf'>Lowpass</span><span class='hljl-p'>(</span><span class='hljl-ni'>5</span><span class='hljl-p'>,</span><span class='hljl-t'> </span><span class='hljl-n'>fs</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-n'>fs</span><span class='hljl-p'>),</span><span class='hljl-t'> </span><span class='hljl-nf'>FIRWindow</span><span class='hljl-p'>(</span><span class='hljl-nf'>hamming</span><span class='hljl-p'>(</span><span class='hljl-ni'>61</span><span class='hljl-p'>)))</span><span class='hljl-t'>
|
||
|
</span><span class='hljl-n'>w</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-nf'>range</span><span class='hljl-p'>(</span><span class='hljl-ni'>0</span><span class='hljl-p'>,</span><span class='hljl-t'> </span><span class='hljl-n'>stop</span><span class='hljl-oB'>=</span><span class='hljl-n'>pi</span><span class='hljl-p'>,</span><span class='hljl-t'> </span><span class='hljl-n'>length</span><span class='hljl-oB'>=</span><span class='hljl-ni'>1024</span><span class='hljl-p'>)</span><span class='hljl-t'>
|
||
|
</span><span class='hljl-n'>h</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-nf'>FIRfreqz</span><span class='hljl-p'>(</span><span class='hljl-n'>f</span><span class='hljl-p'>,</span><span class='hljl-t'> </span><span class='hljl-n'>w</span><span class='hljl-p'>)</span>
|
||
|
</pre>
|
||
|
|
||
|
|
||
|
<pre class="output">
|
||
|
1024-element Array{Complex{Float32},1}:
|
||
|
1.0f0 + 0.0f0im
|
||
|
0.99546844f0 + 0.095055714f0im
|
||
|
0.98191506f0 + 0.1892486f0im
|
||
|
0.95946306f0 + 0.28172377f0im
|
||
|
0.9283168f0 + 0.37164196f0im
|
||
|
0.8887594f0 + 0.45818728f0im
|
||
|
0.84115064f0 + 0.54057467f0im
|
||
|
0.7859234f0 + 0.618057f0im
|
||
|
0.72357976f0 + 0.6899319f0im
|
||
|
0.65468615f0 + 0.7555481f0im
|
||
|
⋮
|
||
|
0.00043952762f0 - 0.00041908873f0im
|
||
|
0.0005152718f0 - 0.00040521423f0im
|
||
|
0.0005873293f0 - 0.00037745363f0im
|
||
|
0.0006531789f0 - 0.0003367371f0im
|
||
|
0.0007105166f0 - 0.00028444792f0im
|
||
|
0.0007573364f0 - 0.00022237403f0im
|
||
|
0.0007920005f0 - 0.00015264557f0im
|
||
|
0.0008132961f0 - 7.766036f-5im
|
||
|
0.0008204784f0 - 3.1148685f-18im
|
||
|
</pre>
|
||
|
|
||
|
|
||
|
<h2>Plot the frequency and impulse response</h2>
|
||
|
<p>The next code chunk is executed in term mode, see the <a href="FIR_design.jl">script</a> for syntax.</p>
|
||
|
|
||
|
<pre class='hljl'>
|
||
|
<span class='hljl-nB'>julia> </span><span class='hljl-n'>h_db</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-n'>log10</span><span class='hljl-oB'>.</span><span class='hljl-p'>(</span><span class='hljl-n'>abs</span><span class='hljl-oB'>.</span><span class='hljl-p'>(</span><span class='hljl-n'>h</span><span class='hljl-p'>));</span><span class='hljl-t'>
|
||
|
1024-element Array{Float32,1}:
|
||
|
0.0
|
||
|
-1.5272748f-6
|
||
|
-6.0314724f-6
|
||
|
-1.3538573f-5
|
||
|
-2.394518f-5
|
||
|
-3.7173842f-5
|
||
|
-5.3121257f-5
|
||
|
-7.165827f-5
|
||
|
-9.257809f-5
|
||
|
-0.00011577748
|
||
|
⋮
|
||
|
-3.2165928
|
||
|
-3.1834154
|
||
|
-3.1560452
|
||
|
-3.1337893
|
||
|
-3.1161458
|
||
|
-3.102753
|
||
|
-3.0933545
|
||
|
-3.0877802
|
||
|
-3.0859327
|
||
|
|
||
|
</span><span class='hljl-nB'>julia> </span><span class='hljl-n'>ws</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-n'>w</span><span class='hljl-oB'>/</span><span class='hljl-n'>pi</span><span class='hljl-oB'>*</span><span class='hljl-p'>(</span><span class='hljl-n'>fs</span><span class='hljl-oB'>/</span><span class='hljl-ni'>2</span><span class='hljl-p'>)</span><span class='hljl-t'>
|
||
|
0.0:0.009775171065493646:10.0</span>
|
||
|
</pre>
|
||
|
|
||
|
|
||
|
<pre class='hljl'>
|
||
|
<span class='hljl-nf'>plot</span><span class='hljl-p'>(</span><span class='hljl-n'>ws</span><span class='hljl-p'>,</span><span class='hljl-t'> </span><span class='hljl-n'>h_db</span><span class='hljl-p'>,</span><span class='hljl-t'>
|
||
|
</span><span class='hljl-n'>xlabel</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-s'>"Frequency (Hz)"</span><span class='hljl-p'>,</span><span class='hljl-t'> </span><span class='hljl-n'>ylabel</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-s'>"Magnitude (db)"</span><span class='hljl-p'>)</span>
|
||
|
</pre>
|
||
|
|
||
|
|
||
|
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkAAAAGACAIAAADK+EpIAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3dZ3wc1dk3/uvMzDbtrqpVLBe54wbYYAymmG5sIJDQy43j5E+oIUAISQg8gZuShBKe8CckYEoSQkINNhCKMYRiE4qNMbgbW+6Wbcm22vaZOc+LUVlJW+aMtmp/3xf+yLtzdo5W0lx7nXOdM4xzTgAAAPlGynYHAAAArEAAAwCAvIQABgAAeQkBDAAA8hICGAAA5CUEMAAAyEsIYAAAkJcQwAAAIC8hgAEAQF5CAAMAgLyUsgCm6/qqVavMH69pWqpODaJ0Xc92FwoX3vws0nUdm+dlSzre/JQFsPb29uOOO8788X6/P1WnBlF487MoEAgghmVLKBTCm58t4XBYVdXUviaGEAEAIC8hgAEAQF5CAAMAgLyEAAYAAHlJIICFw+F77733tNNOu+KKKzZs2JC+PgEAACQlEMDuuOOOt95668477xwzZswpp5wSCATS1y0AAIDEzAawQCDw5JNPPvrooyeccMKdd95ZU1PzyiuvpLVnAAAACZgNYPX19YFA4IgjjjD+O2PGjBUrVqStVwAAAEkoJo/bu3dvWVkZY8z4b0VFxcaNG3sdEw6HjzzyyOhHysvLFyxYEPMF39sevmdDON7pHBJ3metaWCO/xkwd2odb4TZzEZxzaolYPEuJjTNzTSM6+VQrZ5GIF9vNHhzUyBeWZTnumx+PjXG3zezBmk5tlr4Xl8wdssDxLWGWpp0VimRul6nERsU2XuXkNS4a4ebjinmdm0sWfxeIiPx+v6ZpkoT6qSwIBAJ2u12WRX7DIEWCwaAsyzab2YtIUVFR0j8TswHM4/FET3r5fL7i4uJex9hstscff7zXIx6PJ+YLHjWYnqyO+50EVAqa22rKLpPb7DfRW3uEIuZW5TNGpaYjRC/NYTK5f4oikdd0hIimcWo1HY+cMvGwv6jIKXqWsE6+iNmDZYmKLX0vfpVCIruMlTqoH9EkEZ9KYY2aw7w5THsDVO/n7+3l61tof5AfVclOHizNGcaOHCR8csaYy+VCAMsKWZYRwLJFURShAGbqNU0eN3z48La2tqampkGDBhHRli1buoYTuzDGjjrqKJMvWGLjQ71puvJAEu3t3OPBm29S7zfqYIg+3cf/s1u/7ANd1en746QfHSINLspK3wAKmtmPgTU1NTNnzpw/fz4RbdmyZfHixRdffHE6OwaQo8ocdOYw9tDR8oYLlZdPlfcG+OR/Ra5equ3wYZdYgIwSGMf4wx/+8MQTT0ydOnXatGm33XbbmDFj0tctgLxwxCD22LHytxfZKp10xAL1f1foQuOfANAfTGh/e1VVN2zYMHjw4PLy8l5Ptba2Dh06tLW11eRLtbW1eb1e86eGFGpvb483NwmW7fTxn3yqb2zhz50kT6mIO0Lr8/kwB5YtKOLIItEiDjPE/ooURZk0aVLf6AUAQ93s1dPkX02RznhHfXoD7tkBkHZWC/gAIJbLRkvTBrFzF2trm/mD0+X+FNwDQGIYxwBIsXEl7NNzlC+b+NyPNBWZGEDaIAMDSL1SO719hnLee+rcj7S/nyTLyMPAtKVLl6b8zsVZN27cuHTMPSGAAaSFS6EFpytnL1J//F/tz8ehagDMOvPMMw8//PCBVGny7bff3nHHHT/4wQ9S/soIYADp4pRp4enKiW+qv/ta/+XhGK4Hs958882+Wx3lr2uvvTZNr4w/KoA08tjojVnyn9bq/96OZc4AKYYABpBetUXs5VPlK5eo9W2IYQCphAAGkHZHV7FfTZEv+Y9mcvNoADADAQwgE26YJFU56Z6vsNMUQMoggAFkAiN6aqYyf72+8gBq6gFSAwEMIENqXPTQ0fJ1XyhY3QyQEghgAJnzP2OkSgd/dC2qOQBSAAEMIKN+P0373Tf6nkDyIwEgMQQwgIwa4+U/GMtuX4ZqDoD+QgADyLRfTZHe2qGvOoCBRMhLDz744DHHHFNRUfHwww9ntycIYACZVmyjX02Rb0MSBvlp2LBhd91117Rp0wKBLA+FI4ABZMHVE6Q1zfTfvUjCIHetXbv2jDPO0PWOqtl333133rx5RHTJJZfMnj07F+7qjs18AbLALtEdU6S7VmjvzsHfICSxL0A+Ne2fdWwSDXX3WKQ4ceLE3bt3v/fee7NmzSKiRx99dPbs2enuhhD88QBkx9yx0n0r9c/38aOrsLQZEvk/X2rv7kp7ABvqpiVn944IV1999fz582fNmrVz586PPvro2WefTXc3hCCAAWSHTaJbD5N++7W+8PSBc+cnSIcnjs/ab8j3v//9X//617t3737qqacuvPDCsrKybPUkJsyBAWTND8ZJn+/T1zVjJgxylNfrvfDCC5955pm//OUvV111Vba70xsCGEDWOGW6fqL88CpsLQW569prr73vvvvKysqOPvpo45H169e/9957+/bt27x583vvvbdr165s9Q0BDCCbrpkgvbpVbwpmux8AcUyZMqWuru7qq6/uemTp0qXz588fPHhwe3v7/PnzN2zYkK2+YQ4MIJsGOel7I6QnN+i3HY5Pk5CLVq1a1djYePnll3c9cuWVV1555ZVZ7FIX/M0AZNn1E6Un1ukaJsIg99xwww2nnHLK//7v/xYXF2e7LzEggAFk2dQKNriI3t6BCAY555e//OXatWt//OMfZ7sjsSGAAWTf1eOl+etRygE5Z8iQIZWVldnuRVwIYADZd9Eo6ZO9+i4fkjAAAQhgANlXpNAFI6W/b0IAAxCAAAaQE+aNk/72LUYRAQQggAHkhBlVTOe0rBFJGIBZCGAAueLyMdI/NiMJAzALC5kBcsWlo9iJb2q/P1qWsT19YeOcd92FCxJAAAPIFWNL2JAi9lEDP6UWEaxwnXLKKbm26Xv//elPf0rHyyKAAeSQi0dLL9Xrp9TiBiuFa+HChdnuQloEg6nf8RNzYAA55MKRbME2XcXoEYAJCGAAOaTOw4a72cd7UIsIkBwCGEBuOW+ktHAbUjCA5BDAAHLL9+rYwq0cKRhAUghgALllfCkrUmjlfoQwgCQQwAByzneGs9e3IYABJIEABpBzzhouvbkD02AASSCAAeSc46rZpla+J5DtfgDkNgQwgJxjk+i0WukdJGEACSGAAeSiOcPYol2YBgNIBAEMIBedMZS9t0vXEMIA4kMAA8hFtUWs2sVWNCGCAcSFAAaQo04fwhZjFBEgPoEAtnz58muuuebYY4/94Q9/mL4OAYDhtCHS+7tRxwEQl8DtVBobG0eMGGG327/88sv0dQgADDNr2KX/4UGNnLi5CkAsAhnYnDlzfvnLX06ZMiV9vQGALl4bTS5jn+7DKCJAbJgDA8hdJ9eyDzCKCBBHKu/IHAqFGOtxK/TKysr6+vqYB/t8vl4HQ8b4fL5sd6Fw+f1+TdMkydRnx+ml0oNr5J8fgj05UiMQCNjtdlnGmGwWBINBWZZtNpvJ44uKipL+mSQJYEcdddSuXbuIaOHChdOnT098sMPhCIVCJjvHOfd4PCYPhpTDm58tjDGXy2UygJ02gv7nk4ji8mAaLCVkWUYAyxZFUYQCmKnXTPz0hx9+qOs6ERUVFaXwrABghluhyWXsi0Y+swbDFQC9JfkY6Ha7vV6v1+uVZdnv99fX1zc2NgaDwfr6+r1792amiwCF7IQa9nED6jgAYhAo4lixYsVFF1308ssvM8Yuuuiihx56KH3dAgDDcdXsk72o4wCIQaCI4/jjj1++fHn6ugIAfR1bLc37SNM5SRhEBOgJZfQAOa3SSVUutuYgRhEBekMAA8h1M6qwnBkgBgQwgFw3o5p9jgAG0AcCGECuO7qSfYYABtAHAhhArptcxnb4eGsk2/0AyDEIYAC5TpFoagVb3ogkDKAHBDCAPHBUJfsCAQygJwQwgDwwbRBb3oQABtADAhhAHphWiSFEgN4QwADywOhi1hrhjcFs9wMglyCAAeQBRjSlnK3AKCJAFAQwgPxwxCD21X4EMIBuCGAA+WFKBQIYQA8IYAD5YWoFW4kABhA
|
||
|
|
||
|
<p>And again with default options</p>
|
||
|
|
||
|
|
||
|
<pre class='hljl'>
|
||
|
<span class='hljl-n'>h_phase</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-nf'>unwrap</span><span class='hljl-p'>(</span><span class='hljl-oB'>-</span><span class='hljl-n'>atan</span><span class='hljl-oB'>.</span><span class='hljl-p'>(</span><span class='hljl-n'>imag</span><span class='hljl-oB'>.</span><span class='hljl-p'>(</span><span class='hljl-n'>h</span><span class='hljl-p'>),</span><span class='hljl-n'>real</span><span class='hljl-oB'>.</span><span class='hljl-p'>(</span><span class='hljl-n'>h</span><span class='hljl-p'>)))</span><span class='hljl-t'>
|
||
|
</span><span class='hljl-nf'>plot</span><span class='hljl-p'>(</span><span class='hljl-n'>ws</span><span class='hljl-p'>,</span><span class='hljl-t'> </span><span class='hljl-n'>h_phase</span><span class='hljl-p'>,</span><span class='hljl-t'>
|
||
|
</span><span class='hljl-n'>xlabel</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-s'>"Frequency (Hz)"</span><span class='hljl-p'>,</span><span class='hljl-t'> </span><span class='hljl-n'>ylabel</span><span class='hljl-t'> </span><span class='hljl-oB'>=</span><span class='hljl-t'> </span><span class='hljl-s'>"Phase (radians)"</span><span class='hljl-p'>)</span>
|
||
|
</pre>
|
||
|
|
||
|
|
||
|
<img src="data:image/png;base64,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
|
||
|
|
||
|
|
||
|
<HR/>
|
||
|
<div class="footer">
|
||
|
<p>
|
||
|
Published from <a href="FIR_design.jmd">FIR_design.jmd</a>
|
||
|
using <a href="http://github.com/JunoLab/Weave.jl">Weave.jl</a> v0.10.1 on 2020-05-23.
|
||
|
</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</BODY>
|
||
|
|
||
|
</HTML>
|