{"id":219,"date":"2013-10-28T17:50:36","date_gmt":"2013-10-29T00:50:36","guid":{"rendered":"http:\/\/www.earlevel.com\/main\/?p=219"},"modified":"2016-12-11T13:01:23","modified_gmt":"2016-12-11T21:01:23","slug":"pole-zero-placement-v2","status":"publish","type":"post","link":"https:\/\/www.earlevel.com\/main\/2013\/10\/28\/pole-zero-placement-v2\/","title":{"rendered":"Pole-Zero placement v2"},"content":{"rendered":"<div id=\"magnitude_polezero2\" style=\"width:600px; height:200px;\"><\/div>\n<\/p>\n<table style=\"border: none; border-collapse: collapse; padding: 0px 0px; vertical-align: center;\">\n<tr style=\"border:none; border-collapse: collapse; padding: 0px 0px;\">\n<td style=\"border:none; border-collapse: collapse; padding: 0px 0px; width: 228px; height: 228px;\">\n<canvas id=\"zplane_polezero2\" width=\"228\" height=\"228\"><\/canvas>\n<\/td>\n<td style=\"border: none; border-collapse: collapse; padding: 0px 0px; vertical-align: top\">\n<table style=\"border: none; border-collapse: collapse; padding: 0px 0px;\">\n<tr>\n<td rowspan=\"2\" style=\"border:none; border-collapse: collapse; padding: 0px 6px; vertical-align: middle; width: 40px;\">\n<label><input type=\"checkbox\" id=\"polePair_polezero2\" checked=\"true\" onchange='updateSliderNames(); updateValues(); updateZplane();'> Pair <\/label>\n<\/td>\n<td style=\"border: none; border-collapse: collapse; padding: 0px 0px; width: 80px;\">\n<input id=\"pole1_polezero2_field\" value=\"0.5\" style=\"text-align:right;width:4em;margin: 0 6px 6px 0;\" type=\"text\" onchange='updateSlider(\"pole1_polezero2\"); updateZplane();' \/>\n<\/td>\n<td style=\"border:none; border-collapse: collapse; padding: 0px 0px; width: 150px;\">\n<input type=\"range\" min=\"0\" max=\"200\" value=\"100\" id=\"pole1_polezero2\" onchange='updateValue(\"pole1_polezero2\"); updateZplane();' oninput='updateValue(\"pole1_polezero2\"); updateZplane();'>\n<\/td>\n<td style=\"border:none; border-collapse: collapse; padding: 0px 0px;\">\n<output id=\"p1_name_polezero2\" rows=\"1\" cols=\"12\" readonly=\"readonly\">Pole mag<\/output>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border:none; border-collapse: collapse; padding: 0px 0px;\">\n<input id=\"pole2_polezero2_field\" value=\"0.25\" style=\"text-align:right;width:4em;margin: 0 6px 6px 0;\" type=\"text\" onchange='updateSlider(\"pole2_polezero2\"); updateZplane();' \/>\n<\/td>\n<td style=\"border:none; border-collapse: collapse; padding: 0px 0px;\">\n<input type=\"range\" min=\"0\" max=\"200\" value=\"50\" id=\"pole2_polezero2\" onchange='updateValue(\"pole2_polezero2\"); updateZplane();' oninput='updateValue(\"pole2_polezero2\"); updateZplane();'>\n<\/td>\n<td style=\"border:none; border-collapse: collapse; padding: 0px 0px;\">\n<output id=\"p2_name_polezero2\" rows=\"1\" cols=\"12\" readonly=\"readonly\">Pole angle<\/output>\n<\/td>\n<\/tr>\n<tr>\n<td rowspan=\"2\" style=\"border:none; border-collapse: collapse; padding: 0px 6px; vertical-align: middle;\">\n<label><input type=\"checkbox\" id=\"zeroPair_polezero2\" checked=\"true\" onchange='updateSliderNames(); updateValues(); updateZplane();'> Pair <\/label>\n<\/td>\n<td style=\"border:none; border-collapse: collapse; padding: 0px 0px;\">\n<input id=\"zero1_polezero2_field\" value=\"1\" style=\"text-align:right;width:4em;margin: 0 6px 6px 0;\" type=\"text\" onchange='updateSlider(\"zero1_polezero2\"); updateZplane();' \/>\n<\/td>\n<td style=\"border:none; border-collapse: collapse; padding: 0px 0px;\">\n<input type=\"range\" min=\"0\" max=\"200\" value=\"200\" id=\"zero1_polezero2\" onchange='updateValue(\"zero1_polezero2\"); updateZplane();' oninput='updateValue(\"zero1_polezero2\"); updateZplane();'>\n<\/td>\n<td style=\"border:none; border-collapse: collapse; padding: 0px 0px;\">\n<output id=\"z1_name_polezero2\" rows=\"1\" cols=\"12\" readonly=\"readonly\">Zero mag<\/output>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border:none; border-collapse: collapse; padding: 0px 0px;\">\n<input id=\"zero2_polezero2_field\" value=\"1\" style=\"text-align:right;width:4em;margin: 0 6px 6px 0;\" type=\"text\" onchange='updateSlider(\"zero2_polezero2\"); updateZplane();' \/>\n<\/td>\n<td style=\"border:none; border-collapse: collapse; padding: 0px 0px;\">\n<input type=\"range\" min=\"0\" max=\"200\" value=\"200\" id=\"zero2_polezero2\" onchange='updateValue(\"zero2_polezero2\"); updateZplane();' oninput='updateValue(\"zero2_polezero2\"); updateZplane();'>\n<\/td>\n<td style=\"border:none; border-collapse: collapse; padding: 0px 0px;\">\n<output id=\"z2_name_polezero2\" rows=\"1\" cols=\"12\" readonly=\"readonly\">Zero angle<\/output>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border:none; border-collapse: collapse; padding: 0px 0px;\">\n<\/td>\n<td style=\"border:none; border-collapse: collapse; padding: 0px 0px;\">\n<input id=\"Fs_polezero2\" value=\"44100\" style=\"text-align:right;width:4em;margin: 0 6px 6px 0;\" type=\"text\" onchange='updateZplane();'>\n<\/td>\n<td style=\"border:none; border-collapse: collapse; padding: 0px 0px;\">\nSample rate (Hz)\n<\/td>\n<\/tr>\n<tr>\n<td style=\"border:none; border-collapse: collapse; padding: 0px 0px;\">\n<\/td>\n<td style=\"border:none; border-collapse: collapse; padding: 0px 0px;\">\n<select id=\"plotType_polezero2\" onchange='updateZplane();'><option value=\"linear\">linear<\/option><option value=\"log\">log<\/option><\/select>\n<\/td>\n<td style=\"border:none; border-collapse: collapse; padding: 0px 0px;\">\nPlot\n<\/td>\n<\/tr>\n<\/table>\n<\/td>\n<\/tr>\n<\/table>\n<p><textarea id=\"coefsList_polezero2\" rows=\"8\" cols=\"64\" readonly=\"readonly\"><\/textarea><\/p>\n<h3>A new pole-zero calculator<\/h3>\n<p>An JavaScript remake of the old Java-based pole-zero placement <a href=\"\/main\/2003\/02\/27\/pole-zero-placement\/\">applet<\/a>\u2014visit that page for tips on pole-zero locations for standard biquads. The main additions are input fields for precision pole-zero placement, and an option to display the response with a log frequency scale.<\/p>\n<p>The basic idea is that poles blow, zeros suck. Think of poles as controlling a frequency-dependent feedback or resonance\u2014the impulse response of a pole inside the unit circle decays, while one outside is like runaway feedback (think of a mic feeding back into a loudspeaker). A pole on the unit circle gives a sustained oscillation (but watch out for numerical errors\u2014keep your poles inside the unit circle, typically). Zeros absorb a particular frequency; when on the unit circle, they absorb the corresponding frequency completely.<\/p>\n<p>So, poles push the frequency response up around their corresponding frequency, and zeros pull down around theirs. Keep in mind that the frequency response graph is normalized, just as the filter coefficients are. So, while a pole pushes up the response, it appears as though all other frequencies are being pushed down instead. Of course, normalization is important in practical application, but be aware of it when visualizing how poles and zeros interact.<br \/>\n<script type=\"text\/javascript\" src=\"\/scripts\/utils\/flotr2.min.js\"><\/script><script type=\"text\/javascript\" src=\"\/scripts\/widgets\/20131028\/PoleZero2.js\"><\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pair Pole mag Pole angle Pair Zero mag Zero angle Sample rate (Hz) linearlog Plot A new pole-zero calculator An JavaScript remake of the old Java-based pole-zero placement applet\u2014visit that page for tips on pole-zero locations for standard biquads. The &hellip; <a href=\"https:\/\/www.earlevel.com\/main\/2013\/10\/28\/pole-zero-placement-v2\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21,4,8,9,30],"tags":[],"_links":{"self":[{"href":"https:\/\/www.earlevel.com\/main\/wp-json\/wp\/v2\/posts\/219"}],"collection":[{"href":"https:\/\/www.earlevel.com\/main\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.earlevel.com\/main\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.earlevel.com\/main\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.earlevel.com\/main\/wp-json\/wp\/v2\/comments?post=219"}],"version-history":[{"count":3,"href":"https:\/\/www.earlevel.com\/main\/wp-json\/wp\/v2\/posts\/219\/revisions"}],"predecessor-version":[{"id":571,"href":"https:\/\/www.earlevel.com\/main\/wp-json\/wp\/v2\/posts\/219\/revisions\/571"}],"wp:attachment":[{"href":"https:\/\/www.earlevel.com\/main\/wp-json\/wp\/v2\/media?parent=219"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.earlevel.com\/main\/wp-json\/wp\/v2\/categories?post=219"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.earlevel.com\/main\/wp-json\/wp\/v2\/tags?post=219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}