Contenuto principale

Sine Wave

Generare un'onda sinusoidale, utilizzando il tempo di simulazione come sorgente temporale

  • Sine Wave block

Librerie:
Simulink / Sources

Descrizione

Il blocco Sine Wave genera un'onda sinusoidale. Il blocco può funzionare in modalità basata sul tempo o in modalità basata sul campione.

Nota

Questo blocco è identico al blocco Sine Wave Function presente nella libreria Math Operations (Operazioni matematiche). Se si seleziona Use external signal per il parametro Time nella finestra di dialogo del blocco, si ottiene il blocco Sine Wave Function.

Modalità basata sul tempo

Il blocco calcola la forma d'onda dell'output.

y=amplitude×sin(frequency×time+phase)+bias.

Nella modalità basata sul tempo, il valore del parametro Sample time determina se il blocco funziona in modalità continua o discreta.

  • 0 (impostazione predefinita) determina il funzionamento del blocco in modalità continua.

  • >0 determina il funzionamento del blocco in modalità discreta.

Per ulteriori informazioni, vedere Specifica del tempo di campionamento.

Comportamento del blocco in modalità continua

Quando funziona in modalità continua, il blocco Sine Wave può diventare impreciso a causa della perdita di precisione man mano che il tempo aumenta.

Comportamento del blocco in modalità discreta

Un valore del parametro Sample time maggiore di zero induce il blocco a comportarsi come se pilotasse un blocco Zero-Order Hold il cui tempo di campionamento è impostato su tale valore.

In questo modo, è possibile costruire modelli con sorgenti di onde sinusoidali esclusivamente discrete, anziché modelli che siano sistemi ibridi continui/discreti. I sistemi ibridi sono intrinsecamente più complessi e, di conseguenza, richiedono più tempo per essere simulati.

In modalità discreta, questo blocco utilizza un algoritmo incrementale differenziale anziché un algoritmo basato sul tempo assoluto. Di conseguenza, il blocco può essere utile nei modelli destinati a funzionare per un periodo di tempo indefinito, come nei test di vibrazione o di fatica.

L'algoritmo incrementale differenziale calcola il seno in base al valore calcolato al tempo di campionamento precedente. Questo metodo utilizza le seguenti identità trigonometriche:

sin(t+Δt)=sin(t)cos(Δt)+sin(Δt)cos(t)cos(t+Δt)=cos(t)cos(Δt)sin(t)sin(Δt)

In forma matriciale, queste identità sono:

[sin(t+Δt)cos(t+Δt)]=[cos(Δt)sin(Δt)sin(Δt)cos(Δt)][sin(t)cos(t)]

Poiché Δt è costante, la seguente espressione è una costante:

[cos(Δt)sin(Δt)sin(Δt)cos(Δt)]

Pertanto, il problema diventa quello di una moltiplicazione matriciale del valore di sin(t) per una matrice costante in modo da ottenere sin(t+Δt).

La modalità discreta riduce, ma non elimina, l'accumulo di errori di arrotondamento. Questo accumulo può verificarsi perché il calcolo dell'output del blocco in ogni passo temporale dipende dal valore dell'output nel passo temporale precedente.

Metodi di gestione degli errori di arrotondamento in modalità discreta

Per gestire gli errori di arrotondamento quando Sine Wave block funziona in modalità discreta basata sul tempo, utilizzare uno dei seguenti metodi.

MetodoLogica

Inserire un blocco Saturation direttamente a valle del blocco Sine Wave.

Impostando i limiti di saturazione sull'output del blocco Sine Wave, è possibile rimuovere la sovraelongazione dovuta all'accumulo di errori di arrotondamento.

Impostare il blocco Sine Wave in modo da utilizzare la funzione della libreria matematica sin() per calcolare l'output del blocco.

  1. Nella finestra di dialogo del blocco Sine Wave, impostare Time su Use external signal in modo che appaia una porta di input sull'icona del blocco.

  2. Collegare un segnale di clock a questa porta di input utilizzando un blocco Digital Clock.

  3. Impostare il tempo di campionamento del segnale di clock sul tempo di campionamento del blocco Sine Wave.

La funzione della libreria matematica sin() calcola l'output del blocco ad ogni passo temporale indipendentemente dai valori di output di altri passi temporali, impedendo l'accumulo di errori di arrotondamento.

Modalità basata sul campione

La modalità basata sul campione utilizza questa formula per calcolare l'output del blocco Sine Wave.

y=Asin(2π(k+o)/p)+b

  • A è l'ampiezza dell'onda sinusoidale.

  • p è il numero di campioni temporali per periodo dell'onda sinusoidale.

  • k è un valore di numero intero, ripetuto, con un intervallo che va da 0 a p–1.

  • o è l'offset (spostamento di fase) del segnale.

  • b è il bias del segnale.

In questa modalità, Simulink® imposta k uguale a 0 al primo passo temporale e calcola l'output del blocco utilizzando la formula. Al passo temporale successivo, Simulink incrementa k e calcola nuovamente l'output del blocco. Quando k raggiunge p, Simulink imposta nuovamente k su 0 prima di calcolare l'output del blocco. Questo processo continua fino alla fine della simulazione.

La modalità basata sul campione per il calcolo dell'output del blocco in un determinato passo temporale non dipende dall'output dei passi temporali precedenti. Pertanto, questa modalità evita l'accumulo di errori di arrotondamento. La modalità basata sul campione supporta la semantica di ripristino nei sottosistemi che la offrono. Ad esempio, se un blocco Sine Wave si trova in un sottosistema ripristinabile che riceve un'attivazione di ripristino, il numero intero ripetuto k viene ripristinato e l'output del blocco viene ripristinato alla condizione iniziale.

Esempi

Porte

Output

espandi tutto

Segnale di output dell'onda sinusoidale creato in base ai valori dei parametri del blocco.

Tipi di dati: double

Parametri

espandi tutto

Specificare il tipo di onda sinusoidale che genera questo blocco. Alcuni parametri nella finestra di dialogo compaiono a seconda che si selezioni la modalità basata sul tempo o quella basata sul campione.

Utilizzo programmatico

Parametro dei blocchi: SineType
Tipo: vettore di caratteri
Valori: 'Time based' | 'Sample based'
Impostazione predefinita: 'Time based'

Specificare se utilizzare il tempo di simulazione come sorgente dei valori per la variabile temporale o una sorgente esterna. Se si specifica una sorgente temporale esterna, il blocco crea una porta di input per la sorgente temporale. Quando si seleziona una sorgente temporale esterna, il blocco è identico al blocco Sine Wave Function.

Utilizzo programmatico

Parametro dei blocchi: TimeSource
Tipo: vettore di caratteri
Valori: 'Use simulation time' | 'Use external signal'
Impostazione predefinita: 'Use simulation time'

Specificare l'ampiezza del segnale di output dell'onda sinusoidale.

Utilizzo programmatico

Parametro dei blocchi: Amplitude
Tipo: vettore di caratteri
Valore: scalare
Impostazione predefinita: '1'

Specificare il valore della costante aggiunta al seno per produrre l'output.

Utilizzo programmatico

Parametro dei blocchi: Bias
Tipo: vettore di caratteri
Valore: scalare
Impostazione predefinita: '0'

Specificare la frequenza, in rad/sec.

Dipendenze

Per abilitare questo parametro, impostare Sine type su Time based.

Utilizzo programmatico

Parametro dei blocchi: Frequency
Tipo: vettore di caratteri
Valore: scalare
Impostazione predefinita: '1'

Specificare lo spostamento di fase dell'onda sinusoidale.

Non è possibile configurare questo parametro in modo che appaia come variabile globale sincronizzabile nel codice generato se si imposta Time (t) su Use simulation time. Ad esempio, se si imposta Default parameter behavior su Tunable o si applica una classe di storage a un oggetto Simulink.Parameter, il parametro Phase non compare come variabile globale sincronizzabile nel codice generato.

Per generare codice che consenta la sincronizzazione della fase durante l'esecuzione, impostare Time (t) su Use external signal. È possibile fornire il proprio segnale di input temporale o utilizzare un blocco Digital Clock per generare il segnale temporale. Per un esempio, vedere Tune Phase Parameter of Sine Wave Block During Code Execution (Simulink Coder).

Dipendenze

Per abilitare questo parametro, impostare Sine type su Time based.

Utilizzo programmatico

Parametro dei blocchi: Phase
Tipo: vettore di caratteri
Valore: scalare
Impostazione predefinita: '0'

Specificare il numero di campioni per periodo.

Dipendenze

Per abilitare questo parametro, impostare Sine type su Sample based.

Utilizzo programmatico

Parametro dei blocchi: Samples
Tipo: vettore di caratteri
Valore: scalare
Impostazione predefinita: '10'

Specificare l'offset (spostamento di fase discreto) in numero di tempi di campionamento.

Dipendenze

Per abilitare questo parametro, impostare Sine type su Sample based.

Utilizzo programmatico

Parametro dei blocchi: Offset
Tipo: vettore di caratteri
Valore: scalare
Impostazione predefinita: '0'

Specificare il periodo di campionamento in secondi. L'impostazione predefinita è 0. Se il tipo di seno è basato sul campione, il tempo di campionamento deve essere maggiore di 0. Vedere Specifica del tempo di campionamento.

Utilizzo programmatico

Parametro dei blocchi: SampleTime
Tipo: vettore di caratteri
Valore: scalare
Impostazione predefinita: '0'

Specificare le dimensioni di output come segnale vettoriale monodimensionale quando gli altri parametri sono matrici a una riga e una colonna. Se non si seleziona questa casella, il blocco genera un segnale con la stessa dimensionalità dei parametri numerici. Vedere Determine the Output Dimensions of Source Blocks. Questo parametro non è disponibile quando un segnale esterno specifica il tempo. In questo caso, se i parametri numerici sono valori di matrici colonna o riga, l'output è un vettore monodimensionale.

Utilizzo programmatico

Parametro dei blocchi: VectorParams1D
Tipo: vettore di caratteri
Valori: 'off' | 'on'
Impostazione predefinita: 'on'

Caratteristiche del blocco

Tipi di dati:

double

Passaggio diretto

Segnali multidimensionali

no

Segnali di dimensioni variabili

no

Rilevamento zero-crossing

no

Funzionalità estese

espandi tutto

Cronologia versioni

Introduzione prima di R2006a