spcore 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog.rdoc +14 -1
- data/README.rdoc +10 -2
- data/lib/spcore.rb +45 -14
- data/lib/spcore/{lib → core}/circular_buffer.rb +28 -1
- data/lib/spcore/core/constants.rb +7 -1
- data/lib/spcore/{lib → core}/delay_line.rb +15 -5
- data/lib/spcore/{lib → core}/envelope_detector.rb +13 -1
- data/lib/spcore/{lib → core}/oscillator.rb +33 -3
- data/lib/spcore/core/signal.rb +350 -0
- data/lib/spcore/filters/fir/dual_sinc_filter.rb +84 -0
- data/lib/spcore/filters/fir/fir.rb +87 -0
- data/lib/spcore/filters/fir/sinc_filter.rb +68 -0
- data/lib/spcore/{lib → filters/iir}/biquad_filter.rb +7 -0
- data/lib/spcore/{lib → filters/iir}/cookbook_allpass_filter.rb +2 -0
- data/lib/spcore/{lib → filters/iir}/cookbook_bandpass_filter.rb +2 -0
- data/lib/spcore/{lib → filters/iir}/cookbook_highpass_filter.rb +2 -0
- data/lib/spcore/{lib → filters/iir}/cookbook_lowpass_filter.rb +2 -0
- data/lib/spcore/{lib → filters/iir}/cookbook_notch_filter.rb +2 -0
- data/lib/spcore/interpolation/interpolation.rb +64 -0
- data/lib/spcore/resampling/discrete_resampling.rb +78 -0
- data/lib/spcore/resampling/hybrid_resampling.rb +30 -0
- data/lib/spcore/resampling/polynomial_resampling.rb +56 -0
- data/lib/spcore/transforms/dft.rb +47 -0
- data/lib/spcore/transforms/fft.rb +125 -0
- data/lib/spcore/{lib → util}/gain.rb +3 -0
- data/lib/spcore/{core → util}/limiters.rb +10 -1
- data/lib/spcore/util/plotter.rb +91 -0
- data/lib/spcore/{lib → util}/saturation.rb +2 -9
- data/lib/spcore/util/scale.rb +41 -0
- data/lib/spcore/util/signal_generator.rb +48 -0
- data/lib/spcore/version.rb +2 -1
- data/lib/spcore/windows/bartlett_hann_window.rb +15 -0
- data/lib/spcore/windows/bartlett_window.rb +13 -0
- data/lib/spcore/windows/blackman_harris_window.rb +14 -0
- data/lib/spcore/windows/blackman_nuttall_window.rb +14 -0
- data/lib/spcore/windows/blackman_window.rb +18 -0
- data/lib/spcore/windows/cosine_window.rb +13 -0
- data/lib/spcore/windows/flat_top_window.rb +27 -0
- data/lib/spcore/windows/gaussian_window.rb +15 -0
- data/lib/spcore/windows/hamming_window.rb +16 -0
- data/lib/spcore/windows/hann_window.rb +13 -0
- data/lib/spcore/windows/lanczos_window.rb +15 -0
- data/lib/spcore/windows/nuttall_window.rb +14 -0
- data/lib/spcore/windows/rectangular_window.rb +10 -0
- data/lib/spcore/windows/triangular_window.rb +14 -0
- data/spcore.gemspec +11 -3
- data/spec/{lib → core}/circular_buffer_spec.rb +0 -0
- data/spec/{lib → core}/delay_line_spec.rb +1 -1
- data/spec/{lib → core}/envelope_detector_spec.rb +3 -3
- data/spec/{lib → core}/oscillator_spec.rb +0 -0
- data/spec/filters/fir/dual_sinc_filter_spec.rb +64 -0
- data/spec/filters/fir/sinc_filter_spec.rb +57 -0
- data/spec/filters/iir/cookbook_filter_spec.rb +30 -0
- data/spec/interpolation/interpolation_spec.rb +49 -0
- data/spec/resampling/discrete_resampling_spec.rb +81 -0
- data/spec/resampling/hybrid_resampling_spec.rb +31 -0
- data/spec/resampling/polynomial_resampling_spec.rb +30 -0
- data/spec/transforms/dft_spec.rb +71 -0
- data/spec/transforms/fft_spec.rb +84 -0
- data/spec/{lib → util}/gain_spec.rb +2 -2
- data/spec/{core → util}/limiters_spec.rb +0 -0
- data/spec/{lib → util}/saturate_spec.rb +0 -0
- data/spec/util/signal_generator_spec.rb +54 -0
- data/spec/windows/window_spec.rb +33 -0
- metadata +90 -42
- data/lib/spcore/lib/interpolation.rb +0 -15
- data/spec/lib/cookbook_filter_spec.rb +0 -44
- data/spec/lib/interpolation_spec.rb +0 -21
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
|
3
|
+
describe 'windows' do
|
4
|
+
it 'should produce a window that looks like...' do
|
5
|
+
size = 512
|
6
|
+
|
7
|
+
window_classes = [
|
8
|
+
#SPCore::RectangularWindow,
|
9
|
+
#SPCore::HannWindow,
|
10
|
+
#SPCore::HammingWindow,
|
11
|
+
#SPCore::CosineWindow,
|
12
|
+
#SPCore::LanczosWindow,
|
13
|
+
#SPCore::TriangularWindow,
|
14
|
+
#SPCore::BartlettWindow,
|
15
|
+
#SPCore::GaussianWindow,
|
16
|
+
#SPCore::BartlettHannWindow,
|
17
|
+
#SPCore::BlackmanWindow,
|
18
|
+
#SPCore::NuttallWindow,
|
19
|
+
#SPCore::BlackmanHarrisWindow,
|
20
|
+
#SPCore::BlackmanNuttallWindow,
|
21
|
+
#SPCore::FlatTopWindow
|
22
|
+
]
|
23
|
+
|
24
|
+
windows = {}
|
25
|
+
window_classes.each do |window_class|
|
26
|
+
windows[window_class.to_s] = window_class.new(size).data
|
27
|
+
end
|
28
|
+
|
29
|
+
if windows.any?
|
30
|
+
Plotter.new(:title => "windows").plot_1d windows
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spcore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-02-
|
12
|
+
date: 2013-02-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: hashmake
|
@@ -123,10 +123,15 @@ dependencies:
|
|
123
123
|
- - ! '>='
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0'
|
126
|
-
description: ! "Contains core signal processing
|
127
|
-
\
|
128
|
-
\
|
129
|
-
|
126
|
+
description: ! "Contains core signal processing methods and classes, including:\n
|
127
|
+
\ Resampling (discrete up, down and up/down, polynomial up, and hybrid up/down)\n
|
128
|
+
\ FFT transform (forward and inverse)\n DFT transform (forward and inverse)\n Windows
|
129
|
+
(Blackman, Hamming, etc.)\n Windowed sinc filter for lowpass and highpass.\n Dual
|
130
|
+
windowed sinc filter for bandpass and bandstop.\n Interpolation (linear and polynomial)\n
|
131
|
+
\ Data plotting via gnuplot (must be installed to use).\n Delay line\n Biquad
|
132
|
+
filters\n Envelope detector\n Conversion from dB-linear and linear-dB\n Oscillator
|
133
|
+
with selectable wave type (sine, square, triangle, sawtooth)\n Signal abstraction
|
134
|
+
class.\n\n"
|
130
135
|
email: jamestunnell@lavabit.com
|
131
136
|
executables: []
|
132
137
|
extensions: []
|
@@ -142,34 +147,69 @@ files:
|
|
142
147
|
- README.rdoc
|
143
148
|
- Rakefile
|
144
149
|
- lib/spcore.rb
|
150
|
+
- lib/spcore/core/circular_buffer.rb
|
145
151
|
- lib/spcore/core/constants.rb
|
146
|
-
- lib/spcore/core/
|
147
|
-
- lib/spcore/
|
148
|
-
- lib/spcore/
|
149
|
-
- lib/spcore/
|
150
|
-
- lib/spcore/
|
151
|
-
- lib/spcore/
|
152
|
-
- lib/spcore/
|
153
|
-
- lib/spcore/
|
154
|
-
- lib/spcore/
|
155
|
-
- lib/spcore/
|
156
|
-
- lib/spcore/
|
157
|
-
- lib/spcore/
|
158
|
-
- lib/spcore/
|
159
|
-
- lib/spcore/
|
152
|
+
- lib/spcore/core/delay_line.rb
|
153
|
+
- lib/spcore/core/envelope_detector.rb
|
154
|
+
- lib/spcore/core/oscillator.rb
|
155
|
+
- lib/spcore/core/signal.rb
|
156
|
+
- lib/spcore/filters/fir/dual_sinc_filter.rb
|
157
|
+
- lib/spcore/filters/fir/fir.rb
|
158
|
+
- lib/spcore/filters/fir/sinc_filter.rb
|
159
|
+
- lib/spcore/filters/iir/biquad_filter.rb
|
160
|
+
- lib/spcore/filters/iir/cookbook_allpass_filter.rb
|
161
|
+
- lib/spcore/filters/iir/cookbook_bandpass_filter.rb
|
162
|
+
- lib/spcore/filters/iir/cookbook_highpass_filter.rb
|
163
|
+
- lib/spcore/filters/iir/cookbook_lowpass_filter.rb
|
164
|
+
- lib/spcore/filters/iir/cookbook_notch_filter.rb
|
165
|
+
- lib/spcore/interpolation/interpolation.rb
|
166
|
+
- lib/spcore/resampling/discrete_resampling.rb
|
167
|
+
- lib/spcore/resampling/hybrid_resampling.rb
|
168
|
+
- lib/spcore/resampling/polynomial_resampling.rb
|
169
|
+
- lib/spcore/transforms/dft.rb
|
170
|
+
- lib/spcore/transforms/fft.rb
|
171
|
+
- lib/spcore/util/gain.rb
|
172
|
+
- lib/spcore/util/limiters.rb
|
173
|
+
- lib/spcore/util/plotter.rb
|
174
|
+
- lib/spcore/util/saturation.rb
|
175
|
+
- lib/spcore/util/scale.rb
|
176
|
+
- lib/spcore/util/signal_generator.rb
|
160
177
|
- lib/spcore/version.rb
|
178
|
+
- lib/spcore/windows/bartlett_hann_window.rb
|
179
|
+
- lib/spcore/windows/bartlett_window.rb
|
180
|
+
- lib/spcore/windows/blackman_harris_window.rb
|
181
|
+
- lib/spcore/windows/blackman_nuttall_window.rb
|
182
|
+
- lib/spcore/windows/blackman_window.rb
|
183
|
+
- lib/spcore/windows/cosine_window.rb
|
184
|
+
- lib/spcore/windows/flat_top_window.rb
|
185
|
+
- lib/spcore/windows/gaussian_window.rb
|
186
|
+
- lib/spcore/windows/hamming_window.rb
|
187
|
+
- lib/spcore/windows/hann_window.rb
|
188
|
+
- lib/spcore/windows/lanczos_window.rb
|
189
|
+
- lib/spcore/windows/nuttall_window.rb
|
190
|
+
- lib/spcore/windows/rectangular_window.rb
|
191
|
+
- lib/spcore/windows/triangular_window.rb
|
161
192
|
- spcore.gemspec
|
162
|
-
- spec/core/
|
163
|
-
- spec/
|
164
|
-
- spec/
|
165
|
-
- spec/
|
166
|
-
- spec/
|
167
|
-
- spec/
|
168
|
-
- spec/
|
169
|
-
- spec/
|
170
|
-
- spec/
|
193
|
+
- spec/core/circular_buffer_spec.rb
|
194
|
+
- spec/core/delay_line_spec.rb
|
195
|
+
- spec/core/envelope_detector_spec.rb
|
196
|
+
- spec/core/oscillator_spec.rb
|
197
|
+
- spec/filters/fir/dual_sinc_filter_spec.rb
|
198
|
+
- spec/filters/fir/sinc_filter_spec.rb
|
199
|
+
- spec/filters/iir/cookbook_filter_spec.rb
|
200
|
+
- spec/interpolation/interpolation_spec.rb
|
201
|
+
- spec/resampling/discrete_resampling_spec.rb
|
202
|
+
- spec/resampling/hybrid_resampling_spec.rb
|
203
|
+
- spec/resampling/polynomial_resampling_spec.rb
|
171
204
|
- spec/sigproc_spec.rb
|
172
205
|
- spec/spec_helper.rb
|
206
|
+
- spec/transforms/dft_spec.rb
|
207
|
+
- spec/transforms/fft_spec.rb
|
208
|
+
- spec/util/gain_spec.rb
|
209
|
+
- spec/util/limiters_spec.rb
|
210
|
+
- spec/util/saturate_spec.rb
|
211
|
+
- spec/util/signal_generator_spec.rb
|
212
|
+
- spec/windows/window_spec.rb
|
173
213
|
homepage: https://rubygems.org/gems/spcore
|
174
214
|
licenses:
|
175
215
|
- MIT
|
@@ -185,7 +225,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
185
225
|
version: '0'
|
186
226
|
segments:
|
187
227
|
- 0
|
188
|
-
hash:
|
228
|
+
hash: 272931151
|
189
229
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
190
230
|
none: false
|
191
231
|
requirements:
|
@@ -194,24 +234,32 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
194
234
|
version: '0'
|
195
235
|
segments:
|
196
236
|
- 0
|
197
|
-
hash:
|
237
|
+
hash: 272931151
|
198
238
|
requirements: []
|
199
239
|
rubyforge_project:
|
200
240
|
rubygems_version: 1.8.23
|
201
241
|
signing_key:
|
202
242
|
specification_version: 3
|
203
|
-
summary:
|
204
|
-
detection, etc...).
|
243
|
+
summary: A library of signal processing methods and classes.
|
205
244
|
test_files:
|
206
|
-
- spec/core/
|
207
|
-
- spec/
|
208
|
-
- spec/
|
209
|
-
- spec/
|
210
|
-
- spec/
|
211
|
-
- spec/
|
212
|
-
- spec/
|
213
|
-
- spec/
|
214
|
-
- spec/
|
245
|
+
- spec/core/circular_buffer_spec.rb
|
246
|
+
- spec/core/delay_line_spec.rb
|
247
|
+
- spec/core/envelope_detector_spec.rb
|
248
|
+
- spec/core/oscillator_spec.rb
|
249
|
+
- spec/filters/fir/dual_sinc_filter_spec.rb
|
250
|
+
- spec/filters/fir/sinc_filter_spec.rb
|
251
|
+
- spec/filters/iir/cookbook_filter_spec.rb
|
252
|
+
- spec/interpolation/interpolation_spec.rb
|
253
|
+
- spec/resampling/discrete_resampling_spec.rb
|
254
|
+
- spec/resampling/hybrid_resampling_spec.rb
|
255
|
+
- spec/resampling/polynomial_resampling_spec.rb
|
215
256
|
- spec/sigproc_spec.rb
|
216
257
|
- spec/spec_helper.rb
|
258
|
+
- spec/transforms/dft_spec.rb
|
259
|
+
- spec/transforms/fft_spec.rb
|
260
|
+
- spec/util/gain_spec.rb
|
261
|
+
- spec/util/limiters_spec.rb
|
262
|
+
- spec/util/saturate_spec.rb
|
263
|
+
- spec/util/signal_generator_spec.rb
|
264
|
+
- spec/windows/window_spec.rb
|
217
265
|
has_rdoc:
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module SPCore
|
2
|
-
class Interpolation
|
3
|
-
# Linear Interpolation Equation:
|
4
|
-
#
|
5
|
-
# (x3 - x1)(y2 - y1)
|
6
|
-
# y3 = ------------------ + y1
|
7
|
-
# (x2 - x1)
|
8
|
-
#
|
9
|
-
def self.linear x1, y1, x2, y2, x3
|
10
|
-
y3 = ((x3 - x1) * (y2 - y1)) / (x2 - x1);
|
11
|
-
y3 += y1;
|
12
|
-
return y3;
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
require 'gnuplot'
|
3
|
-
require 'pry'
|
4
|
-
|
5
|
-
describe 'cookbook filter' do
|
6
|
-
#it 'should produce a nice frequency response graph' do
|
7
|
-
# sample_rate = 44000.0
|
8
|
-
# crit_freq = 1000.0
|
9
|
-
# max_test_freq = 10000.0
|
10
|
-
# bw = 2
|
11
|
-
# filter = SPCore::CookbookNotchFilter.new sample_rate
|
12
|
-
# filter.set_critical_freq_and_bw crit_freq, bw
|
13
|
-
#
|
14
|
-
# freqs = []
|
15
|
-
# dbs = []
|
16
|
-
#
|
17
|
-
# start_freq = 10.0
|
18
|
-
# test_freq = start_freq
|
19
|
-
#
|
20
|
-
# 200.times do
|
21
|
-
# mag = filter.get_freq_magnitude_response test_freq
|
22
|
-
#
|
23
|
-
# dbs << SPCore::Gain.linear_to_db(mag)
|
24
|
-
# freqs << test_freq
|
25
|
-
#
|
26
|
-
# test_freq *= 1.035
|
27
|
-
# end
|
28
|
-
#
|
29
|
-
# Gnuplot.open do |gp|
|
30
|
-
# Gnuplot::Plot.new(gp) do |plot|
|
31
|
-
# plot.title "Frequency Magnitude Response for Lowpass Filter with Critical Freq of #{crit_freq} and BW of #{bw}"
|
32
|
-
# plot.xlabel "Frequency (f)"
|
33
|
-
# plot.ylabel "Frequency Magnitude Response (dB) at f"
|
34
|
-
# plot.logscale 'x'
|
35
|
-
#
|
36
|
-
# plot.data << Gnuplot::DataSet.new( [freqs, dbs] ) do |ds|
|
37
|
-
# ds.with = "linespoints"
|
38
|
-
# #ds.linewidth = 4
|
39
|
-
# end
|
40
|
-
# end
|
41
|
-
# end
|
42
|
-
#
|
43
|
-
#end
|
44
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
|
3
|
-
describe SPCore::Interpolation do
|
4
|
-
context '.interpolate_linear' do
|
5
|
-
it 'should interpolate floating-point values' do
|
6
|
-
x1, y1 = 0.0, 2.0
|
7
|
-
x2, y2 = 1.0, 4.0
|
8
|
-
x3, y3 = 0.5, 3.0
|
9
|
-
result = SPCore::Interpolation.linear x1, y1, x2, y2, x3
|
10
|
-
result.should eq(y3)
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'should interpolate integer values' do
|
14
|
-
x1, y1 = 0, 20
|
15
|
-
x2, y2 = 10, 40
|
16
|
-
x3, y3 = 5, 30
|
17
|
-
result = SPCore::Interpolation.linear x1, y1, x2, y2, x3
|
18
|
-
result.should eq(y3)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|