Vb6

Signaler
-
Messages postés
187
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
12 octobre 2020
-
Bonjour,
Dans ce problème on vous suggère de réaliser un programme qui permet la visualisation sur un contrôle graphique (BPS-Graph ou MsChart) un signal Carrée et sinusoïdal.

L'utilisateur doit être en mesure de en temps réel :

· Sélectionner le type du signal (carrée ou sinusoïdal)

· Modifier l’amplitude

· Modifier la fréquence

· Enregistrement du signal

La gestion de toutes les erreurs est primordiale
Qui peut m'aider svp

2 réponses

Messages postés
14855
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 octobre 2020
444
Messages postés
187
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
12 octobre 2020
5
Salut,
Pourquoi utiliser une OCX exotique ?
Une simple image box fait l'affaire...

[Sin.BAS]
Option Explicit

Public buffer(44100) As Byte


Sub main()
Dim f0, Fs As Long
Dim VScale
Dim P, Q, Ck, Sk, Ck_New, Sk_New
Dim Cnt, Oh

Dim nFile2 As Integer ' Output File Hook.

For Cnt = 0 To UBound(buffer)
buffer(Cnt) = 128
Next

Fs = 44100 ' fréquence d'échantillonage.
f0 = 1200 ' Fréquence du signal.
VScale = 90 ' échelle du signal (Amplitude)

' Constantes
Dim pi
pi = 4 * Atn(1)
P = Cos(2 * pi * f0 / Fs)
Q = Sin(2 * pi * f0 / Fs)

' Selection du cadran.

'Partie Haute.
Ck = 0 ' ) Sinus )1 Cosinus \/\ pi/4
Sk = -1 ')       )0

'Partie Basse.
'Ck = 0 'Decallage PI/2
'Sk = 1


' Création du signal.
' -> pour une période.
'OH = Fs \ f0 ' Période.
'Oh = (Fs \ f0) / 2 ' Demie-période.
Oh = UBound(buffer)
For Cnt = 0 To Oh 'UBound(buffer)
buffer(Cnt) = Int((VScale * Ck) + 128) '+ 128 (Azimute du signal)
Ck_New = P * Ck - Q * Sk
Sk_New = Q * Ck + P * Sk
Ck = Ck_New
Sk = Sk_New

'VScale = VScale * (1 - (Cnt / 5000)) ' Amortissement RLC.
Next

nFile2 = FreeFile
Open "Sin_22K_8bits_unsigned.raw" For Binary Access Write As #nFile2
Put #nFile2, 1, buffer
Close #nFile2


FrmScale.Show

End Sub

Dans la frame principale: [FrmScale]
ici on imprime directement dans la frame, mais on peut tout mettre dans une picturebox...
Option Explicit

Public buffer(44100) As Byte


Sub main()
Dim f0, Fs As Long
Dim VScale
Dim P, Q, Ck, Sk, Ck_New, Sk_New
Dim Cnt, Oh

Dim nFile2 As Integer ' Output File Hook.

For Cnt = 0 To UBound(buffer)
buffer(Cnt) = 128
Next

Fs = 44100 ' fréquence d'échantillonage.
f0 = 1200 ' Fréquence du signal.
VScale = 90 ' échelle du signal (Amplitude)

' Constantes
Dim pi
pi = 4 * Atn(1)
P = Cos(2 * pi * f0 / Fs)
Q = Sin(2 * pi * f0 / Fs)

' Selection du cadran.

'Partie Haute.
Ck = 0 ' ) Sinus )1 Cosinus \/\ pi/4
Sk = -1 ')       )0

'Partie Basse.
'Ck = 0 'Decallage PI/2
'Sk = 1


' Création du signal.
' -> pour une période.
'OH = Fs \ f0 ' Période.
'Oh = (Fs \ f0) / 2 ' Demie-période.
Oh = UBound(buffer)
For Cnt = 0 To Oh 'UBound(buffer)
buffer(Cnt) = Int((VScale * Ck) + 128) '+ 128 (Azimute du signal)
Ck_New = P * Ck - Q * Sk
Sk_New = Q * Ck + P * Sk
Ck = Ck_New
Sk = Sk_New

'VScale = VScale * (1 - (Cnt / 5000)) ' Amortissement RLC.
Next

nFile2 = FreeFile
Open "Sin_22K_8bits_unsigned.raw" For Binary Access Write As #nFile2
Put #nFile2, 1, buffer
Close #nFile2


FrmScale.Show

End Sub


Un petit exemple que j'avais fait ... donc, si ça peut aider...