Last active
November 26, 2022 13:54
-
-
Save sio4/a4ea6b844f762ba7942ecfe9a8ab2bd4 to your computer and use it in GitHub Desktop.
dsp highpass filter example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"log" | |
"math" | |
"net/http" | |
"github.com/eripe970/go-dsp-utils" | |
"github.com/go-echarts/go-echarts/v2/charts" | |
"github.com/go-echarts/go-echarts/v2/components" | |
"github.com/go-echarts/go-echarts/v2/opts" | |
"github.com/go-echarts/go-echarts/v2/types" | |
"github.com/jfcg/butter" | |
) | |
func main() { | |
http.HandleFunc("/", handler) | |
log.Fatal(http.ListenAndServe(":4000", nil)) | |
} | |
func handler(w http.ResponseWriter, r *http.Request) { | |
if r.URL.Path != "/" { | |
return | |
} | |
fmt.Println("---") | |
// A-1. Read the original signal--------------------------- | |
signal1, err := dsp.ReadSignalFile("./tidal_sample_part.txt", 0.0166666) | |
if err != nil { | |
fmt.Println("error reading signal file:", err) | |
} | |
fmt.Println("source:", signal1) | |
plot_orig := plotSignal(signal1, opts.Title{ | |
Title: "original signal", | |
Subtitle: signal1.String(), | |
}) | |
normalized, _ := signal1.Normalize() | |
// A-4. DO High pass filter------------------------------- | |
filtered, err := signal1.HighPassFilter(0.0005) | |
if err != nil { | |
fmt.Println("filtering error:", err) | |
} | |
fmt.Println("filtered:", filtered.Signal[0:10]) | |
plot_filtered := plotSignal(filtered, opts.Title{ | |
Title: "filtered signal with 86400 sample", | |
Subtitle: filtered.String(), | |
}) | |
normalizedfiltered, err := normalized.HighPassFilter(0.0005) | |
if err != nil { | |
fmt.Println("filtering error:", err) | |
} | |
fmt.Println("filtered:", normalizedfiltered.Signal[0:10]) | |
plot_normalized_filtered := plotSignal(normalizedfiltered, opts.Title{ | |
Title: "normalized-filtered signal with 86400 sample", | |
Subtitle: filtered.String(), | |
}) | |
bFiltered := make([]float64, signal1.Length()) | |
butterHPF := butter.NewHighPass1(2 * math.Pi * 0.0005 / 0.0166666) | |
butterHPF.NextS(signal1.Signal, bFiltered) | |
fmt.Println("bFiltered:", bFiltered[0:10]) | |
filtered.Signal = bFiltered // fake, lazy to implement another plotter | |
plot_butter := plotSignal(filtered, opts.Title{ | |
Title: "butter version, filtered signal with 86400 sample", | |
Subtitle: filtered.String(), | |
}) | |
butterHPF2 := butter.NewHighPass1(2 * math.Pi * 0.0005 / 0.0166666) | |
butterHPF2.NextS(normalized.Signal, bFiltered) | |
fmt.Println("bFiltered:", bFiltered[0:10]) | |
filtered.Signal = bFiltered // fake, lazy to implement another plotter | |
plot_butter_normalized := plotSignal(filtered, opts.Title{ | |
Title: "butter version, normalized-filtered signal with 86400 sample", | |
Subtitle: filtered.String(), | |
}) | |
page := components.NewPage() | |
page.AddCharts( | |
plot_orig, | |
plot_filtered, | |
plot_normalized_filtered, | |
plot_butter, | |
plot_butter_normalized, | |
) | |
page.Render(w) | |
} | |
func plotSignal(signal *dsp.Signal, title opts.Title) *charts.Line { | |
x := make([]string, 0) | |
y := make([]opts.LineData, 0) | |
for i := 0; i < signal.Length(); i++ { | |
x = append(x, fmt.Sprintf("%.1f", float64(i)/signal.SampleRate)) | |
y = append(y, opts.LineData{Value: signal.Signal[i], Symbol: "none"}) | |
} | |
line := charts.NewLine() | |
line.SetGlobalOptions( | |
charts.WithInitializationOpts(opts.Initialization{Theme: types.ThemeWonderland}), | |
charts.WithYAxisOpts(opts.YAxis{Max: signal.Max(), Min: signal.Min(), SplitNumber: 10}), | |
charts.WithXAxisOpts(opts.XAxis{SplitNumber: 10}), | |
charts.WithTitleOpts(title)) | |
line.SetXAxis(x).AddSeries("data", y).SetSeriesOptions( | |
charts.WithLineChartOpts(opts.LineChart{ | |
Smooth: true, | |
}), | |
) | |
return line | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment