Weave.jl/dev/examples/FIR_design.html

782 lines
74 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://weavejl.mpastell.com/dev/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 &quot;<code>#&#39;</code> &quot; and code is executed and results are included in the published document.</p>
<p>Notice that you don&#39;t need to define chunk options, but you can using <code>#&#43;</code>. just before code e.g. <code>#&#43; term&#61;True, caption&#61;&#39;Fancy plots.&#39;</code>. If you&#39;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&#39;ll implement lowpass, highpass and &#39; bandpass FIR filters. If you want to read more about DSP I highly recommend <a href="http://www.dspguide.com/">The Scientist and Engineer&#39;s Guide to Digital Signal Processing</a> which is freely available online.</p>
<h2>Calculating frequency response</h2>
<p>DSP.jl package doesn&#39;t &#40;yet&#41; 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 &#40;generic function with 2 methods&#41;
</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&#123;Complex&#123;Float32&#125;,1&#125;:
1.0f0 &#43; 0.0f0im
0.99546844f0 &#43; 0.095055714f0im
0.98191506f0 &#43; 0.1892486f0im
0.95946306f0 &#43; 0.28172377f0im
0.9283168f0 &#43; 0.37164196f0im
0.8887594f0 &#43; 0.45818728f0im
0.84115064f0 &#43; 0.54057467f0im
0.7859234f0 &#43; 0.618057f0im
0.72357976f0 &#43; 0.6899319f0im
0.65468615f0 &#43; 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&gt; </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'>
</span><span class='hljl-nB'>julia&gt; </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'>&quot;Frequency (Hz)&quot;</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'>&quot;Magnitude (db)&quot;</span><span class='hljl-p'>)</span>
</pre>
<img src="data:image/png;base64,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04wnw8jt2LEjFAoZ/7722mtXrVo1/DlE1N7ent5+FYSf/exn1157bZwnHD161OVyHTlyhHP+xz/+cezYsQM/LEiiG2644e/+7u+GP15ZWbl///709ycvdXZ27t279+DBg0Tk9/sHHl++fPkPf/hDzrnX6z3nnHPWrVsX0fDZZ59dsGCBqqqc89WrV99+++1Cx035HNjatWtvuukm47PPTTfdtHbt2uFPWLJkyahRo4joi1/84uHDh/fu3ZvqXhWImTNnGqUVEU2aNKmnpyfq03bs2LF161av15vGrhUEr9f7/vvvNzY28mjjHL///e8XLFhgjNkuW7bM6/WGD+dCUrS3t69bt+4rX/lK1K/u3bt38+bN3d3dae5V/ikpKZk6dWpEjev3+9944w1jXMHlcn3+859/9dVXIxquXbt2xYoVRlkWNSDiS3mAHT9+vL6+3vh3fX398ePH4zzB4XBUV1efOHEi1b0qNKdOnXrppZe+/OUvD/9ScXHx/fff/9WvfrWhoeG1115Lf9/y2L59++67776FCxd++tOfPnPmTMRXw3/zJUkaPXr08L8OGKE1a9bMmTMn6oYObrf7kUceueOOO+rr619++eX09y3vNTc367oefv4ffm6PCIi2tja/32/+ECkPsFAoNDDoabPZjEGSiCcMVAnGcwKBQKp7VVC6u7uvvfbam2++edmyZcO/evr06Y0bN3788cePPvroypUrfT5f+nuYl26++eampqYNGzYcOnRIluUHHngg4gn4zU+DF1988atf/WrUL+3bt+/999/funXrf/7nf952221tbW1p7lveC4VCjLHw8//w3/DwvwKbzcY5D4VC5g+R8gCrra0d+M1oaWmpra2NKDPr6upaW1uNf3PO29raRo8enepeFQ6v1/u5z31u5syZjz32WNQnuFwu4x+33nprT09PY2NjGnuXzwbeWJfLdfPNN2/atCniCbW1tQO/+UTU2tqK3/zk2rx58/79+1esWBH1qwM/oC984Qtut3vnzp1p7FpBqK2t5ZwP3LmppaWlrq5u+HMG/gpaWlqKioqEFiKmPMAWLlw4cAe5t956a+HChca/jVk7IrrkkkuMRfZEtGXLFpvNNn369FT3qkAEAoHrr79+/PjxzzzzTPjnBk3TdF2PePL+/ftDodDwNaIwcrt37x740x34zV+4cOH7779vfCbdv3//2bNn586dm8le5p0XXnhhxYoVZWVlA49E/c0/efLk2bNnh59bYYRKSkrOPffcqOf/gTIrIiAuvfRSoUOk/Dqwb3zjGxdccMHYsWNdLlf47VBra2uNFfNLly6tra390pe+9JnPfOaxxx771re+5XQ6U92rAnHnnXe+9957q1atuvfee4lo3Lhxq1evJqKFCxcaS7NeffXV119//dxzz+3u7n766adXr15dXV2d6V7nia9//eu1tbW1tbUfffTRL3/5y/Xr1xuPT5069Z/+6Z9uueWWBQsWzJkz5/rrr7/22muffPLJO+64o7S0NLN9zic+n+/Xv/51xKqBa665Zu7cuQ899NCGDRteeumlefPmBQKB55577vrrr586dWqmupoHQqHQ3//93xv3KL7//vs9Ho8xZn733Xd/5zvf6e7u3rFjx+HDh2+55RYi2rNnz6c+9amOjo7S0tJVq1bNnj37vvvuq62tfeihh373u98JHTfK0HxyVVVVXXPNNZs2berq6nr88cfnz59vPF5UVHTxxReXl5czxm688caTJ0/u3bv3y1/+8te//nXc7CBZ/H7/rFmz3G63y+VyuVxVVVXGbLbH45k/f/7o0aOLi4ubm5sPHDig6/rq1au//e1vZ7rL+cPtdh84cODQoUP19fVPP/30rFmzjMeLiooWLFhgfFC4/vrr29vbd+7ced111333u9/Fb34SnTx5srq6+sYbbwx/V91u95w5cxoaGjweT0tLy4EDB/x+/8qVK++//368+SOh6/r27dvLysquuOIKt9tdVFR04YUXEtGsWbNmzZplXMj8zDPPVFVVEZEsyzU1NZdccoksyyUlJdddd922bdtaWlp+9KMfLVq0SOi4uJ0KAADkJOyFCAAAOQkBBgAAOQkBBgAAOQkBBgAAOQkBBgAAOQkBBgAAOQkBBpBXvF5vrNsOiOrs7MT2jJDN/n812D8u7FFGsgAAAABJRU5ErkJggg==" />
<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'>&quot;Frequency (Hz)&quot;</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'>&quot;Phase (radians)&quot;</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.8 on 2021-04-29.
</p>
</div>
</div>
</div>
</div>
</BODY>
</HTML>