2019-03-04 14:22:34 +01:00
<!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;
2020-03-05 19:03:01 +01:00
font-size: 0.9em;
2019-03-04 14:22:34 +01:00
}
@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 >
2020-05-16 18:33:37 +02:00
< / HEAD >
2019-03-04 14:22:34 +01:00
2020-05-16 18:33:37 +02:00
< 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 >
2019-03-04 14:22:34 +01:00
2020-05-16 18:33:37 +02:00
< h1 > Introduction< / h1 >
2019-03-04 14:22:34 +01:00
< 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 >
2020-05-19 09:31:21 +02:00
<!-- this setup dependencies, but doesn't appear in the generated document -->
2019-03-04 14:22:34 +01:00
< 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} :
2020-04-01 11:49:49 +02:00
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
2019-03-04 14:22:34 +01:00
< / 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' >
2020-05-16 12:13:56 +02:00
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
2019-03-04 14:22:34 +01:00
< / 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 >
2020-05-06 16:53:17 +02:00
< img src = "data:image/png;base64,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
2019-03-04 14:22:34 +01:00
< 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 >
2020-05-06 16:53:17 +02:00
< img src = "data:image/png;base64,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
2019-03-04 14:22:34 +01:00
2020-05-16 18:33:37 +02:00
< HR / >
< div class = "footer" >
< p >
Published from < a href = "FIR_design.jmd" > FIR_design.jmd< / a >
2020-05-23 12:59:24 +02:00
using < a href = "http://github.com/JunoLab/Weave.jl" > Weave.jl< / a > v0.10.0 on 2020-05-23.
2020-05-16 18:33:37 +02:00
< / p >
2019-03-04 14:22:34 +01:00
< / div >
< / div >
< / div >
2020-05-16 18:33:37 +02:00
< / div >
< / BODY >
2019-03-04 14:22:34 +01:00
< / HTML >