spcore 0.1.3 → 0.1.4
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 +4 -0
- data/README.rdoc +15 -15
- data/lib/spcore/core/signal.rb +10 -5
- data/lib/spcore/interpolation/interpolation.rb +1 -1
- data/lib/spcore/util/plotter.rb +8 -4
- data/lib/spcore/version.rb +1 -1
- data/spcore.gemspec +15 -15
- metadata +27 -27
data/ChangeLog.rdoc
CHANGED
@@ -24,3 +24,7 @@ Add EnvelopeDetector#attack_time= and EnvelopeDetector#release_time=
|
|
24
24
|
** Discrete and Polynomial resampling classes, each with an .upsample method.
|
25
25
|
** Plotter class to make graphing with gnuplot easier. Has #plot_1d and #plot_2d methods.
|
26
26
|
** Signal class for testing convenience. Contains signal data and has convenience methods for plotting, correlation, energy, etc.
|
27
|
+
|
28
|
+
=== 0.1.4 / 2013-02-19
|
29
|
+
|
30
|
+
Fixed gemspec to always depend on gnuplot (not just for development).
|
data/README.rdoc
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
* {Homepage}[https://rubygems.org/gems/spcore]
|
4
4
|
* {Documentation}[http://rubydoc.info/gems/spcore/frames]
|
5
|
-
* {Email}[
|
5
|
+
* {Email}[jamestunnell@lavabit.com]
|
6
6
|
|
7
7
|
== Description
|
8
8
|
|
@@ -10,20 +10,20 @@ A library of signal processing methods and classes.
|
|
10
10
|
|
11
11
|
== Features
|
12
12
|
|
13
|
-
Resampling (discrete up, down and up/down, polynomial up, and hybrid up/down)
|
14
|
-
FFT transform (forward and inverse)
|
15
|
-
DFT transform (forward and inverse)
|
16
|
-
Windows (Blackman, Hamming, etc.)
|
17
|
-
Windowed sinc filter for lowpass and highpass.
|
18
|
-
Dual windowed sinc filter for bandpass and bandstop.
|
19
|
-
Interpolation (linear and polynomial)
|
20
|
-
Data plotting via gnuplot (must be installed to use).
|
21
|
-
Delay line
|
22
|
-
Biquad filters
|
23
|
-
Envelope detector
|
24
|
-
Conversion from dB-linear and linear-dB
|
25
|
-
Oscillator with selectable wave type (sine, square, triangle, sawtooth)
|
26
|
-
Signal abstraction class
|
13
|
+
* Resampling (discrete up, down and up/down, polynomial up, and hybrid up/down)
|
14
|
+
* FFT transform (forward and inverse)
|
15
|
+
* DFT transform (forward and inverse)
|
16
|
+
* Windows (Blackman, Hamming, etc.)
|
17
|
+
* Windowed sinc filter for lowpass and highpass.
|
18
|
+
* Dual windowed sinc filter for bandpass and bandstop.
|
19
|
+
* Interpolation (linear and polynomial)
|
20
|
+
* Data plotting via gnuplot (must be installed to use).
|
21
|
+
* Delay line
|
22
|
+
* Biquad filters
|
23
|
+
* Envelope detector
|
24
|
+
* Conversion from dB-linear and linear-dB
|
25
|
+
* Oscillator with selectable wave type (sine, square, triangle, sawtooth)
|
26
|
+
* Signal abstraction class
|
27
27
|
|
28
28
|
== Examples
|
29
29
|
|
data/lib/spcore/core/signal.rb
CHANGED
@@ -16,8 +16,8 @@ class Signal
|
|
16
16
|
|
17
17
|
# A new instance of Signal.
|
18
18
|
#
|
19
|
-
# @param [Hash]
|
20
|
-
#
|
19
|
+
# @param [Hash] hashed_args Hashed arguments. Required keys are :data and
|
20
|
+
# :sample_rate. See ARG_SPECS for more details.
|
21
21
|
def initialize hashed_args
|
22
22
|
hash_make Signal::ARG_SPECS, hashed_args
|
23
23
|
end
|
@@ -43,9 +43,14 @@ class Signal
|
|
43
43
|
@data[arg]
|
44
44
|
end
|
45
45
|
|
46
|
-
|
47
|
-
|
48
|
-
|
46
|
+
# Plot the signal data, either against sample numbers or fraction of total samples.
|
47
|
+
# @param plot_against_fraction If false, plot data against sample number. If true,
|
48
|
+
# plot against fraction of total samples.
|
49
|
+
def plot_data plot_against_fraction
|
50
|
+
xtitle = (plot_against_fraction ? "fraction of total samples" : "sample numbers")
|
51
|
+
plotter = Plotter.new(:title => "signal data sequence", :xtitle => xtitle, :ytitle => "sample values")
|
52
|
+
titled_sequence = {"signal data" => @data}
|
53
|
+
plotter.plot_1d titled_sequence, plot_against_fraction
|
49
54
|
end
|
50
55
|
|
51
56
|
# Increase the sample rate of signal data by the given factor using
|
@@ -17,7 +17,7 @@ class Interpolation
|
|
17
17
|
# Given 2 sample points, interpolates a value anywhere between the two points.
|
18
18
|
#
|
19
19
|
# @param [Numeric] y0 First (left) y-value
|
20
|
-
# @param [Numeric]
|
20
|
+
# @param [Numeric] y1 Second (right) y-value
|
21
21
|
# @param [Numeric] x Percent distance (along the x-axis) between the two y-values
|
22
22
|
def self.linear y0, y1, x
|
23
23
|
raise ArgumentError, "x is not between 0.0 and 1.0" unless x.between?(0.0,1.0)
|
data/lib/spcore/util/plotter.rb
CHANGED
@@ -26,8 +26,10 @@ class Plotter
|
|
26
26
|
|
27
27
|
# Plot XY datapoints.
|
28
28
|
# @param [Hash] titled_hashes A hash that maps dataset titles to data. The data itself
|
29
|
-
# is a hash also, that maps x values to y values.
|
30
|
-
#
|
29
|
+
# is a hash also, that maps x values to y values.
|
30
|
+
#
|
31
|
+
# @example
|
32
|
+
# Plotter.plot_2d "somedata" => {0.0 => 4.0, 1.0 => 2.0}
|
31
33
|
def plot_2d titled_hashes
|
32
34
|
datasets = []
|
33
35
|
titled_hashes.each do |title, hash|
|
@@ -45,10 +47,12 @@ class Plotter
|
|
45
47
|
# Plot a sequence of values.
|
46
48
|
# @param [Hash] titled_sequences A hash that maps sequence titles to data. The data itself
|
47
49
|
# is an array of values. In the plot, values will be mapped to
|
48
|
-
# their index in the sequence.
|
49
|
-
# called passing it the hash { "somedataseq" => [0,2,3,6,3,-1]}
|
50
|
+
# their index in the sequence.
|
50
51
|
# @param plot_against_fraction If true, instead of plotting samples against sample number, plot
|
51
52
|
# them against the fraction (sample_number / total_samples).
|
53
|
+
#
|
54
|
+
# @example
|
55
|
+
# Plotter.plot_1d "somedata" => [0,2,3,6,3,-1]
|
52
56
|
def plot_1d titled_sequences, plot_against_fraction = false
|
53
57
|
datasets = []
|
54
58
|
titled_sequences.each do |title, sequence|
|
data/lib/spcore/version.rb
CHANGED
data/spcore.gemspec
CHANGED
@@ -8,20 +8,20 @@ Gem::Specification.new do |gem|
|
|
8
8
|
gem.summary = %q{A library of signal processing methods and classes.}
|
9
9
|
gem.description = <<DESCRIPTION
|
10
10
|
Contains core signal processing methods and classes, including:
|
11
|
-
Resampling (discrete up, down and up/down, polynomial up, and hybrid up/down)
|
12
|
-
FFT transform (forward and inverse)
|
13
|
-
DFT transform (forward and inverse)
|
14
|
-
Windows (Blackman, Hamming, etc.)
|
15
|
-
Windowed sinc filter for lowpass and highpass.
|
16
|
-
Dual windowed sinc filter for bandpass and bandstop.
|
17
|
-
Interpolation (linear and polynomial)
|
18
|
-
Data plotting via gnuplot (must be installed to use).
|
19
|
-
Delay line
|
20
|
-
Biquad filters
|
21
|
-
Envelope detector
|
22
|
-
Conversion from dB-linear and linear-dB
|
23
|
-
Oscillator with selectable wave type (sine, square, triangle, sawtooth)
|
24
|
-
Signal abstraction class.
|
11
|
+
* Resampling (discrete up, down and up/down, polynomial up, and hybrid up/down).
|
12
|
+
* FFT transform (forward and inverse).
|
13
|
+
* DFT transform (forward and inverse).
|
14
|
+
* Windows (Blackman, Hamming, etc.).
|
15
|
+
* Windowed sinc filter for lowpass and highpass.
|
16
|
+
* Dual windowed sinc filter for bandpass and bandstop.
|
17
|
+
* Interpolation (linear and polynomial).
|
18
|
+
* Data plotting via gnuplot (must be installed to use).
|
19
|
+
* Delay line.
|
20
|
+
* Biquad filters.
|
21
|
+
* Envelope detector.
|
22
|
+
* Conversion from dB-linear and linear-dB.
|
23
|
+
* Oscillator with selectable wave type (sine, square, triangle, sawtooth).
|
24
|
+
* Signal abstraction class.
|
25
25
|
|
26
26
|
DESCRIPTION
|
27
27
|
gem.license = "MIT"
|
@@ -35,11 +35,11 @@ DESCRIPTION
|
|
35
35
|
gem.require_paths = ['lib']
|
36
36
|
|
37
37
|
gem.add_dependency 'hashmake'
|
38
|
+
gem.add_dependency 'gnuplot'
|
38
39
|
|
39
40
|
gem.add_development_dependency 'bundler', '~> 1.0'
|
40
41
|
gem.add_development_dependency 'rake', '~> 0.8'
|
41
42
|
gem.add_development_dependency 'rspec', '~> 2.4'
|
42
43
|
gem.add_development_dependency 'yard', '~> 0.8'
|
43
44
|
gem.add_development_dependency 'pry'
|
44
|
-
gem.add_development_dependency 'gnuplot'
|
45
45
|
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.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -27,6 +27,22 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: gnuplot
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
30
46
|
- !ruby/object:Gem::Dependency
|
31
47
|
name: bundler
|
32
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -107,31 +123,15 @@ dependencies:
|
|
107
123
|
- - ! '>='
|
108
124
|
- !ruby/object:Gem::Version
|
109
125
|
version: '0'
|
110
|
-
- !ruby/object:Gem::Dependency
|
111
|
-
name: gnuplot
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
|
-
requirements:
|
115
|
-
- - ! '>='
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
|
-
requirements:
|
123
|
-
- - ! '>='
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: '0'
|
126
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)
|
128
|
-
\ FFT transform (forward and inverse)
|
129
|
-
(Blackman, Hamming, etc.)
|
130
|
-
windowed sinc filter for bandpass and bandstop.\n Interpolation
|
131
|
-
|
132
|
-
|
133
|
-
with selectable wave type (sine, square,
|
134
|
-
class.\n\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
|
129
|
+
\ * Windows (Blackman, Hamming, etc.).\n * Windowed sinc filter for lowpass and
|
130
|
+
highpass.\n * Dual windowed sinc filter for bandpass and bandstop.\n * Interpolation
|
131
|
+
(linear and polynomial).\n * Data plotting via gnuplot (must be installed to use).\n
|
132
|
+
\ * Delay line.\n * Biquad filters.\n * Envelope detector.\n * Conversion from
|
133
|
+
dB-linear and linear-dB.\n * Oscillator with selectable wave type (sine, square,
|
134
|
+
triangle, sawtooth).\n * Signal abstraction class.\n\n"
|
135
135
|
email: jamestunnell@lavabit.com
|
136
136
|
executables: []
|
137
137
|
extensions: []
|
@@ -225,7 +225,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
225
225
|
version: '0'
|
226
226
|
segments:
|
227
227
|
- 0
|
228
|
-
hash:
|
228
|
+
hash: -91888305
|
229
229
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
230
230
|
none: false
|
231
231
|
requirements:
|
@@ -234,7 +234,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
234
234
|
version: '0'
|
235
235
|
segments:
|
236
236
|
- 0
|
237
|
-
hash:
|
237
|
+
hash: -91888305
|
238
238
|
requirements: []
|
239
239
|
rubyforge_project:
|
240
240
|
rubygems_version: 1.8.23
|