Se devi calcolare i filtri FFT con tanto di Q riferito all'attenuazione per ottava, dovrai rivolgerti a qualche trattato sull'audio.
Se invece cerchi solo di ottenere una rappresentazione grafica approssimata, sappi che la curava che hai postato si approssima con soli 5 punti, anzi 3 perché 2 sono speculari. Non hai bisogno di formule o chart che visualizzino una collezione di punti che rappresentino l'intera curva.
Nell'esempio le curve vengono disegnate usando soli 5 punti, di cui solo 3 vengono variati dalle scrollbar.
In Form1 aggiungi VScrollbar1 e HScrollBar1, è solo un esempio per farti partire...
Public Class Form1
' parametri di costruzione dell'area lavoro
Dim altezza As Integer = 340
Dim larghezza As Integer = 480
Dim setL As Integer = 50
Dim setT As Integer = 50
Dim zero As Integer = setT + altezza / 3 ' la coordinata y che vale zero
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
VScrollBar1.Minimum = setT
VScrollBar1.Maximum = setT + altezza
VScrollBar1.LargeChange = 1
HScrollBar1.Minimum = 0
HScrollBar1.Maximum = 50
Me.Size = New Size(setL * 2 + larghezza, setT * 2 + altezza)
Me.DoubleBuffered = True
End Sub
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
e.Graphics.DrawLine(Pens.Black, setL, setT, setL, setT + altezza)
e.Graphics.DrawLine(Pens.Black, setL, zero, setL + larghezza, zero)
' ************** punti della curva **************
Dim curvePoints(4) As Point
For off As Integer = 0 To 240 Step 120 ' disegna tre volte la stessa curva, spostata di 120 pixel
curvePoints(0) = New Point(setL + off, zero) ' primo punto
curvePoints(1) = New Point(setL + 60 + off - HScrollBar1.Value, VScrollBar1.Value * 0.16 + zero - setT / 2) ' escursione proporzionalmente ridotta
curvePoints(2) = New Point(setL + 120 + off, VScrollBar1.Value) ' punto centrale
curvePoints(3) = New Point(setL + 180 + off + HScrollBar1.Value, VScrollBar1.Value * 0.16 + zero - setT / 2) ' escursione proporzionalmente ridotta
curvePoints(4) = New Point(setL + 240 + off, zero) ' ultimo punto
e.Graphics.DrawCurve(New Pen(Color.Blue, 2), curvePoints) ' tracciamento
Next off
' solo per controllo: punti sull'ultima curva
'For p = 0 To 4
' e.Graphics.DrawEllipse(New Pen(Color.Red, 3), curvePoints(p).X - 1, curvePoints(p).Y - 1, 2, 2)
'Next
End Sub
Private Sub VScrollBar1_Scroll(sender As Object, e As ScrollEventArgs) Handles VScrollBar1.Scroll
Me.Invalidate() ' scatena il paint
End Sub
Private Sub HScrollBar1_Scroll(sender As Object, e As ScrollEventArgs) Handles HScrollBar1.Scroll
Me.Invalidate() ' scatena il paint
End Sub
End Class