forked from chipmuenk/pyfda
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
216 lines (180 loc) · 10.2 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="UTF-8">
<title>pyFDA by chipmuenk</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="stylesheets/normalize.css" media="screen">
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen">
<link rel="stylesheet" type="text/css" href="stylesheets/github-light.css" media="screen">
</head>
<body>
<section class="page-header">
<h1 class="project-name">pyFDA</h1>
<h2 class="project-tagline">Python Filter Design Analysis Tool</h2>
<a href="https://github.com/chipmuenk/pyFDA" class="btn">View on GitHub</a>
<a href="https://github.com/chipmuenk/pyFDA/zipball/master" class="btn">Download .zip</a>
<a href="https://github.com/chipmuenk/pyFDA/tarball/master" class="btn">Download .tar.gz</a>
</section>
<section class="main-content">
<h1>
<a id="pyfda" class="anchor" href="#pyfda" aria-hidden="true"><span class="octicon octicon-link"></span></a>pyFDA</h1>
<h2>
<a id="python-filter-design-analysis-tool" class="anchor" href="#python-filter-design-analysis-tool" aria-hidden="true"><span class="octicon octicon-link"></span></a>Python Filter Design Analysis Tool</h2>
<p><a href="https://gitter.im/chipmuenk/pyFDA?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge"><img src="https://badges.gitter.im/Join%20Chat.svg" alt="Join the chat at https://gitter.im/chipmuenk/pyFDA"></a></p>
<p>The goal of this project is to create a GUI based tool in Python / Qt to analyse, design and synthesize discrete time filters. </p>
<p><strong>Screenshot from the current version:</strong>
<img src="images/pyFDA_screenshot_3.PNG" alt="Screenshot"></p>
<p><img src="webpage/getting_started.html" alt="Getting started"></p>
<h3>
<a id="why-yet-another-filter-design-tool" class="anchor" href="#why-yet-another-filter-design-tool" aria-hidden="true"><span class="octicon octicon-link"></span></a>Why yet another filter design tool?</h3>
<ul>
<li>
<strong>Education:</strong> There is a very limited choice of user-friendly, license-free tools available to teach the influence of different filter design methods and specifications on time and frequency behaviour. It should be possible to run the tool without severe limitations also with the limited resolution of a beamer.</li>
<li>
<strong>Show-off:</strong> Demonstrate that Python is a potent tool for digital signal processing applications as well. The interfaces for textual filter design routines are a nightmare: linear vs. logarithmic specs, frequencies normalized w.r.t. to sampling or Nyquist frequency, -3 dB vs. -6 dB vs. band-edge frequencies ... (This is due to the different backgrounds and the history of filter design algorithms and not Python-specific.)</li>
<li>
<strong>Fixpoint filter design for uCs:</strong> Recursive filters have become a niche for experts. Convenient design and simulation support (round-off noise, stability under different quantization options and topologies) could attract more designers to these filters that are easier on hardware resources and much more suitable e.g. for uCs.</li>
<li>
<strong>Fixpoint filter design for FPGAs</strong>: Especially on low-budget FPGAs, multipliers are rare. However, there are no good tools for designing and analyzing filters requiring a limited number of multipliers (or none at all) like CIC-, LDI- or Sigma-Delta based designs.</li>
<li>
<strong>HDL filter implementation:</strong> Implementing a fixpoint filter in VHDL / Verilog without errors requires some experience, verifying the correct performance in a digital design environment with very limited frequency domain simulation options is even harder. The Python module <a href="http://myhdl.org">myHDL</a> can automate both design and verification.</li>
</ul>
<h3>
<a id="the-following-features-are-currently-implemented" class="anchor" href="#the-following-features-are-currently-implemented" aria-hidden="true"><span class="octicon octicon-link"></span></a>The following features are currently implemented:</h3>
<ul>
<li>
<strong>Filter design</strong>
<ul>
<li>
<strong>Design methods</strong> from scipy.signal: Equiripple, Firwin, Butterworth, Elliptic, Chebychev 1 and Chebychev 2 </li>
<li>
<strong>Remember all specifications</strong> when changing filter design methods</li>
<li>
<strong>Fine-tune</strong> manually the filter order and corner frequencies calculated by minimum order algorithms</li>
<li>
<strong>Compare filter designs</strong> for a given set of specifications and different design methods</li>
<li>
<strong>Filter coefficients and poles / zeroes</strong> can be displayed, edited and quantized</li>
</ul>
</li>
<li>
<strong>Clearly structured GUI</strong>
<ul>
<li>only widgets needed for the currently selected design method are visible</li>
<li>enhanced matplotlib NavigationToolbar (nicer icons, additional functions)</li>
</ul>
</li>
<li>
<strong>Common interface for all filter design methods:</strong>
<ul>
<li>specify frequencies as absolute values or normalized to sampling or Nyquist frequency</li>
<li>specify ripple and attenuations in dB, as voltage or as power ratios</li>
<li>enter expressions like exp(-pi/4 * 1j) with the help of the library <a href="https://pypi.python.org/pypi/simpleeval">simpleeval</a> (included in source files)</li>
</ul>
</li>
<li>
<strong>Graphical Analyses</strong>
<ul>
<li>Magnitude response (lin / power / log) with optional display of specification bands, phase and an inset plot</li>
<li>Phase response (wrapped / unwrapped)</li>
<li>Group delay</li>
<li>Pole / Zero plot</li>
<li>Impulse response and step response (lin / log)</li>
<li>3D-Plots (|H(f)|, mesh, surface, contour) with optional pole / zero display</li>
</ul>
</li>
<li>
<strong>Modular architecture</strong>, facilitating the implementation of new filter design and analysis methods
<ul>
<li>Filter design files not only contain the actual algorithm but also dictionaries specifying which parameters and standard widgets have to be displayed in the GUI. </li>
<li>Special widgets needed by design methods (e.g. for choosing the window type in Firwin) are included in the filter design file, not in the main program</li>
<li>Filter design files can be added and edited <em>without</em> changing or even restarting the program</li>
</ul>
</li>
<li>
<strong>Saving and loading</strong>
<ul>
<li>Save and load filter designs in pickled and in numpy's NPZ-format</li>
<li>Export coefficients and poles/zeros as comma-separated values (CSV), in numpy's NPZ-format, in Excel (R) or in Matlab (R) workspace format</li>
</ul>
</li>
<li>
<strong>Display help files</strong> (own / Python docstrings) as rich text</li>
<li>
<strong>Runs under Python 2.7 and Python 3.4</strong> </li>
</ul>
<p><strong>More screenshots from the current version:</strong></p>
<table>
<tr>
<td><img src="images/pyFDA_screenshot_3d_2.PNG" alt="Screenshot" width="300px"></td>
<td><img src="images/pyFDA_screenshot_hn.PNG" alt="Screenshot" width="300px"></td>
</tr>
<tr>
<td><img src="images/pyFDA_screenshot_3d_3.PNG" alt="Screenshot" width="300px"></td>
<td><img src="images/pyFDA_screenshot_PZ.PNG" alt="Screenshot" width="300px"></td>
</tr>
</table>
<h3>
<a id="release-01-target-end-of-may-june-2015" class="anchor" href="#release-01-target-end-of-may-june-2015" aria-hidden="true"><span class="octicon octicon-link"></span></a>Release 0.1 (target: end of <s>May</s> June 2015)</h3>
<p>The following features are still missing for the first release. </p>
<ul>
<li>Documentation</li>
</ul>
<h3>
<a id="release-02-target-end-of-2015---help-is-very-welcome" class="anchor" href="#release-02-target-end-of-2015---help-is-very-welcome" aria-hidden="true"><span class="octicon octicon-link"></span></a>Release 0.2 (target: end of 2015) - Help is very welcome!</h3>
<ul>
<li><strong>scipy 0.16 SOS features</strong></li>
<li>
<strong>myHDL support</strong>
<ul>
<li>Export of VHDL / Verilog netlists for basic filter topologies</li>
<li>Fixpoint simulation</li>
</ul>
</li>
<li>
<strong>Filter coefficients and poles / zeros</strong><br>
Implement model-view controller architecture for the following features:
<ul>
<li>Display coefficients / poles and zeros with fewer digits while keeping full precision internally</li>
<li>Group multiple poles / zeros</li>
<li>Load coefficients / poles and zeros in various formats </li>
</ul>
</li>
<li>
<strong>Filter Manager</strong>
<ul>
<li>Store multiple designs in one filter dict</li>
<li>Compare multiple designs in plots</li>
</ul>
</li>
<li><strong>Documentation using Sphinx</strong></li>
</ul>
<h3>
<a id="following-releases" class="anchor" href="#following-releases" aria-hidden="true"><span class="octicon octicon-link"></span></a>Following releases</h3>
<ul>
<li>Better help files and messages</li>
<li>Add a tracking cursor</li>
<li>Graphical modification of poles / zeros</li>
<li>Export of filter properties as PDF / HTML files</li>
<li>Show error messages and warnings in the GUI</li>
<li>Design, analysis and export of filters as second-order sections</li>
<li>Multiplier-free filter designs (CIC, GCIC, LDI, SigmaDelta-Filters, ...)</li>
<li>Export of Python filter objects</li>
<li>Analysis of different fixpoint filter topologies (direct form, cascaded form, parallel form, ...) concerning overflow and quantization noise</li>
</ul>
<h3>
<a id="further-ideas-are" class="anchor" href="#further-ideas-are" aria-hidden="true"><span class="octicon octicon-link"></span></a>Further ideas are</h3>
<ul>
<li>Wave-Digital Filters</li>
<li>test filters in real-time with a audio stream</li>
<li>...</li>
</ul>
<footer class="site-footer">
<span class="site-footer-owner"><a href="https://github.com/chipmuenk/pyFDA">pyFDA</a> is maintained by <a href="https://github.com/chipmuenk">chipmuenk</a>.</span>
<span class="site-footer-credits">This page was generated by <a href="https://pages.github.com">GitHub Pages</a> using the <a href="https://github.com/jasonlong/cayman-theme">Cayman theme</a> by <a href="https://twitter.com/jasonlong">Jason Long</a>.</span>
</footer>
</section>
</body>
</html>