embbed function simulink with signal

1 visualización (últimos 30 días)
suribright
suribright el 17 de Jul. de 2013
Hi, I am trying to simulate the signal by Embedded matlab function in sumulink. The function has two input T=10e-6,B=30e6 and one output. The code as below
function y = chirp_gen1(T,B) %#codegen coder.extrinsic('plot');
K=B/T; %chirp slope Fs=10*B;Ts=1/Fs; %sampling frequency and sample spacing N=T/Ts; t=linspace(-T/2,T/2,N); y=exp(1j*pi*K*t.^2); %chirp signal %y=real(St);
plot(t*1e6,real(y),'-+');
If I run in matlab editor the program works fine. But if I run in simulink, it alway shows N is not constant "The number of points N must be a constant", t is "Undefined function or variable 't'. The first assignment to a local variable determines its class". So I went to change N =1000, the function will plot the signal. But if I connect to the scope. It does not show the signal as it is. I think some things relate to continuous of 't'. So, What wrong with the code above and how to get the output 'y' can connect to the scope in simulink block? Thanks

Respuesta aceptada

Denis Gurchenkov
Denis Gurchenkov el 31 de Jul. de 2013
I was able to make your example work in Simulink after adding the following line before call to "linspace":
assert(N<10000);
Basically, this line tells Simulink that the value of N cannot be greater than the given maximum (10000), and so linspace call knows how much memory to allocate for its internal computation. In Simulink, linspace (and all other functions used in MATLAB Function block) need to know the maximum size of their internal data, and they get it by looking at the maximum values of their inputs.
Of course, you should change 10000 to whatever is the right maximum value for N in your example, depending on your inputs.
Here is the updated program:
function chirp_gen1(T,B)
%#codegen
coder.extrinsic('plot');
K=B/T; %chirp slope
Fs=10*B;Ts=1/Fs; %sampling frequency and sample spacing
N=T/Ts;
assert(N<10000);
t=linspace(-T/2,T/2,N);
y=exp(1j*pi*K*t.^2); %chirp signal %y=real(St);
plot(t*1e6,real(y),'-+');
Cheers,
Denis.
  3 comentarios
Denis Gurchenkov
Denis Gurchenkov el 14 de Ag. de 2013
Just in case, here is a link to the Simulink model that I created:
https://www.dropbox.com/s/tw30x1ja030mwio/example1.mdl
suribright
suribright el 14 de Ag. de 2013
Thanks for quick reply!. I do received it. The only different with mine is the output y=chirp_gen1(T,B) signal. I have in my code and connect to scope. It fails to show in scope. I think it should convert to continuous data in somehow. Wont know how.

Iniciar sesión para comentar.

Más respuestas (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by