필터 지우기
필터 지우기

How can convert variable-size signal ?

조회 수: 4 (최근 30일)
Sarfaraz Ahmed
Sarfaraz Ahmed 2018년 11월 12일
편집: Sarfaraz Ahmed 2018년 11월 13일
Hi, I am getting this error in simulink. can anybody help how can be removed this error ? I only get this error when I attach switch with my ADC block. Also, I have attached the design snap.
The signal at input port 1 of 'ADC_Sign_E_ref_12/Switch2' is a variable-size signal with a nondiscrete sample time. The sample time for any variable-size signal must be discrete.
  댓글 수: 4
Walter Roberson
Walter Roberson 2018년 11월 12일
When a MATLAB Function Block is used, Simulink would tend to assume that the output is variable length. I would not count on the analyzer being able to prove that the output will be scalar: I would recommend configuring the output port.
Also can you post the code so we can see if there is an accidental variable length output path?
Sarfaraz Ahmed
Sarfaraz Ahmed 2018년 11월 12일
편집: Sarfaraz Ahmed 2018년 11월 13일
Yes sir. I can list code here also I have attached the model. So when you run the model you will see that error and it would be easy to diagnose. I think also it's configuring issue. But I don't know how to configure the output port.
here Vin, Vip are the sampler values.
ADC code:
function y = ADC(Vin, Vip)
coder.extrinsic('stem');
coder.extrinsic('get_param')
sim_t=get_param('ADC_Sign_E_ref_12','SimulationTime')
Nbit = 7;
Vref = 64;
% generating empty plot
ax1=subplot(2,2,([3,4]));
ax2=subplot(2,2,([3,4]));
axis ([ax1 ax2], [0 0.2 -64 64]);
title('Dout Scaler Value');
xlabel('Time(s)');
ylabel('Amplitude');
hold on;
persistent Dout;
if isempty(Dout)
Dout = zeros(1,2);
end
persistent B;
if isempty(B)
B = zeros(1,Nbit);
end
% Conventional Set-and-Down SAR ADC
% 64C, 32C, 16C, 8C, 4C, 2C, C, C
Vxp = Vip;
Vxn = Vin;
for kbit = 1:Nbit
if Vxp - Vxn > 0
B(kbit) = 1;
Vxp = Vxp - Vref*2^(-kbit);
else
B(kbit) = 0;
Vxn = Vxn - Vref*2^(-kbit);
end
end
Dout = B(1)*64 + B(2)*32 + B(3)*16 + B(4)*8 + B(5)*4 + B(6)*2 + B(7)*1 -64 +0.5 ;
stem(sim_t,Dout);
hold on;
y = Dout;
The control signal of switch is coming from below cnt block. The control signal either 0 or 1.
cnt block code:
function y = clk(ip1)
persistent x;
persistent i;
persistent cnt;
persistent out;
if isempty(x) % Initialization
x=1;
end
if isempty(out) % Initialization
out=1;
end
if isempty(cnt) % Initialization
cnt=1;
end
if isempty(i) % Initialization
i=0;
end
while i>=0
cnt = ip1+i;
i=i+1;
break
end
if cnt ==x
out=1;
x=x+4;
else if cnt~=x
out=0;
end
end
y=out;
Please have a look. Thanks

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

Help CenterFile Exchange에서 Signal Operations에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by