Pagina 1 di 2

funzioni di trasferimento trascendenti in matlab...come?

Inviato: 7 feb 2008, 13:07
da TheClue
salve a tutti!

in una simulazione simulink ho da introdurre in serie ad un anello di controllo un ricostruttore ad uscita continua espresso mediante la seguente funzione di trasferimento:

s = tf('s');
Z = (1/Tc)*((1 - Exp(-s*Tc))/s)^2

con Tc il periodo di campionamento

ottengo però il seguente errore:

Codice: Seleziona tutto

??? Function 'exp' is not defined for values of class 'tf'.

Error in ==> exp at 15
  [varargout{1:nargout}] = builtin('exp', varargin{:});


come posso ovviare?

Re: funzioni di trasferimento trascendenti in matlab...come?

Inviato: 7 feb 2008, 14:45
da dario
Nel tuo caso non comparendo come prodotto per la funzione di trasferimento penso che l'unica soluzione sia quella di utilizzare le approssimanti di Padé per l'esponenziale.

Re: funzioni di trasferimento trascendenti in matlab...come?

Inviato: 7 feb 2008, 14:58
da TheClue
il fatto è che con l'approssimazione di pade' posso modellizzare discretamente un ricostruttore di ordine zero...ma per il ricostruttore ad uscita continua?

Re: funzioni di trasferimento trascendenti in matlab...come?

Inviato: 7 feb 2008, 23:48
da dario
Allora, non conoscevo il ricostruttore ad uscita continua e quindi mi sono documentato.
Se devi simulare un sistema di controllo e vuoi utilizzare un ricostruttuore, non ti serve utilizzare la funzione di trasferimento, il cui scopo è quello di caratterizzare il comportamento in frequenza del blocco di ricostruzione.
L'operazione che devi effettuare è semplicemente quella di utilizzare l'equazione ricorsiva del ricostruttore, così come faresti se dovessi implementare il ricostruttore su un dispositivo digitale.

In ambiente MATLAB sarebbe molto semplice realizzarlo, in Simulink può essere più complicato perché non hai il campione al passo precedente.
Ti consiglio di realizzare una function che implementi l'algoritmo del controllore digitale ed il ricostruttore, utilizzando poi i blocchi MATLABfunction importi la funzione all'interno del Simulink. Forse così dovresti riuscire ad aggirare il problema.

Re: funzioni di trasferimento trascendenti in matlab...come?

Inviato: 12 feb 2008, 11:58
da TheClue
ok, ho fatto cosi' ^^ nn era esattamente quello che avevo in mente, ma funziona :)

mille grazie!

Re: funzioni di trasferimento trascendenti in matlab...come?

Inviato: 16 feb 2008, 17:32
da dona79
secondo me se scrivevi semplicemente s=jw arginavi il problema sin dall'inizio

Re: funzioni di trasferimento trascendenti in matlab...come?

Inviato: 16 feb 2008, 18:03
da dario
Il problema è diverso, le 'tf' MATLAB non permettono di scrivere una funzione di trasferimento come quella inserita nel primo post.
Al massimo si può inserire un ritardo sull'uscita, ma nulla di più.

Ponendo s=jw cosa avrebbe risolto?

Re: funzioni di trasferimento trascendenti in matlab...come?

Inviato: 16 feb 2008, 18:20
da dona79
che non serviva passare attraverso la trasfer function. matlab riconosce j od i come variabile complessa.

Re: funzioni di trasferimento trascendenti in matlab...come?

Inviato: 17 feb 2008, 2:06
da dario
Se non la dichiari come funzione di trasferimento non ci combini nulla.
Il suo scopo era quello di filtrare un segnale tramite quella funzione di trasferimento, senza dichiararla come 'tf' poteva ricavare solo la risposta a regime per segnali sinusoidali, rappresentata come fasore...

Re: funzioni di trasferimento trascendenti in matlab...come?

Inviato: 17 feb 2008, 19:17
da dona79
cioè voleva vederla nel tempo o in freq?
se voleva vederla in freq allora bastava scriverla come jw, farsi un asse delle frequenze e plottarne, ovviamente, il modulo.