How to prevent overwrite the graph in looping?

I want to have three eyediagrams and one graph combine three while loop together. The codes is something like the below:
N=2
while (N<=4)
. . . . . .
eyediagram(........)
if(N==2)
figure;
semilogy(........);
hold on;
semilogy(........);
elseif (N==3)
semilogy(........);
hold on;
semilogy(........);
else
semilogy(........);
hold on;
semilogy(........);
. . . . . . .
N=N+1;
end

3 comentarios

KSSV
KSSV el 8 de Mzo. de 2018
Instead of plotting in conditionals....you collect the data in conditionals...and plot at once after the loops.
Alex Phang
Alex Phang el 8 de Mzo. de 2018
Is that possible do it in the while loop?
KSSV
KSSV el 13 de Mzo. de 2018
Yes very much....

Iniciar sesión para comentar.

 Respuesta aceptada

Birdman
Birdman el 8 de Mzo. de 2018
Define figure and hold on just once before while loop. It would be more efficient:
N=2;
figure;hold on;
while (N<=4)
. . . . . .
eyediagram(........)
if(N==2)
semilogy(........);
semilogy(........);
elseif (N==3)
semilogy(........);
semilogy(........);
else
semilogy(........);
semilogy(........);
. . . . . . .
N=N+1;
end

8 comentarios

Alex Phang
Alex Phang el 8 de Mzo. de 2018
It will produce about six blank graphs and three unwanted and unknown graphs.
semi_fig = figure();
semi_ax = axes('Parent', semi_fig);
hold(semi_ax, 'on')
for N = 2 : 4
...
eyediagram(.....); %always produces new figure
if N == 2
semilogy(semi_ax, ...)
semilogy(semi_ax, ...)
elseif N == 3
semilogy(semi_ax, ...)
semilogy(semi_ax, ...)
elseif N == 4
semilogy(semi_ax, ...)
semilogy(semi_ax, ...)
end
end
hold(semi_ax, 'off')
Alex Phang
Alex Phang el 8 de Mzo. de 2018
@Walter Roberson, the solution that you provided is still producing the same results as above
You are incorrect.
semi_fig = figure();
semi_ax = axes('Parent', semi_fig);
hold(semi_ax, 'on')
x = 1 : 50;
for N = 2 : 4
y = rand(1, 50);
eyediagram(y, 3); %always produces new figure
if N == 2
semilogy(semi_ax, x, y, 'k-');
semilogy(semi_ax, x, sin(y), 'k*');
elseif N == 3
semilogy(semi_ax, x, y, 'b-');
semilogy(semi_ax, x, y.^2, 'b*');
elseif N == 4
semilogy(semi_ax, x, y, 'g-');
semilogy(semi_ax, x, cos(y), 'g*');
end
end
hold(semi_ax, 'off')
This produces 3 eye diagrams and one graph that combines all 6 semilogy.
This is my coding and it doesn't work just like yours.
close all; clear; clc;
semi_fig = figure();
semi_ax = axes('Parent', semi_fig);
hold(semi_ax, 'on')
for M = 2:4 % bit resolutions
Lavg=2^M; % average symbol length
nsym=500; % number of PPM symbols
Lsig=nsym*Lavg; % length of PPM slots
Rb=1e6; % bit rate
Ts=M/(Lavg*Rb); % slot duration
Tb=1/Rb; % bit duration
Dt =0.4;
Drms=Dt*Tb; % RMS delay spread
a=12*sqrt(11/13)*Drms;
nsamp=10; % samples per symbols
Tsamp=Tb/nsamp; % sampling time
K=30*nsamp; % number of channel taps
k=0:K;
h=((6*a^6)./(((k*Tsamp)+a).^7)); % channel impulse response
h=h./sum(h);
EbN0=0:12; % energy per slot
EsN0=EbN0+10*log10(M); % energy per symbol
SNR=10.^(EbN0./10);
for ii=1:length(EbN0)
PPM=generate_PPM(M,nsym);
MF_out=awgn(PPM,EsN0(ii)+3,'measured');
% hard decision decoding
Rx_PPM_th=zeros(1,Lsig);
Rx_PPM_th(find(MF_out>0.5))=1;
[No_of_Error(ii) ser_hdd(ii)]=biterr(Rx_PPM_th, PPM);
% soft decision decoding
PPM_SDD=[];
start=1;
finish=2^M;
for k=1:nsym
temp=MF_out(start:finish);
m=max(temp);
temp1=zeros(1,2^M);
temp1(find(temp==m))=1;
PPM_SDD=[PPM_SDD temp1];
start=finish+1;
finish=finish+2^M;
end
[No_of_Error(ii) ser_sdd(ii)]=biterr(PPM_SDD,PPM);
end
Tx_signal=rectpulse(PPM,nsamp); % Pulse shaping function (rectangular pulse)
channel_output=conv(Tx_signal,h); % channel output
eyediagram(channel_output, 3*nsamp);
axis([-0.5 0.5 0 1]);
% theoretical calculation
Pse_ppm_hard=qfunc(sqrt(M*2^M*0.5*SNR));
Pse_ppm_soft=qfunc(sqrt(M*2^M*SNR));
if(M==2)
semilogy(EbN0,(1/log2(M))*Pse_ppm_hard,'k-','linewidth',2);
semilogy(EbN0,(1/log2(M))*Pse_ppm_soft,'r-','linewidth',2);
elseif (M==3)
semilogy(EbN0,(1/log2(M))*Pse_ppm_hard,'k-X','linewidth',2);
semilogy(EbN0,(1/log2(M))*Pse_ppm_soft,'r-X','linewidth',2);
else
semilogy(EbN0,(1/log2(M))*Pse_ppm_hard,'k--','linewidth',2);
semilogy(EbN0,(1/log2(M))*Pse_ppm_soft,'r--','linewidth',2);
end
grid on
legend('M=2 (HDD)','M=2 (SDD)','M=3 (HDD)','M=3 (SDD)','M=4 (HDD)','M=4 (SDD)');
xlabel('Eb/N0, dB');
ylabel('Bit Error Rate');
Title('Bit error probability curve for PPM modulation');
end
hold(semi_ax, 'off')
Unrecognized function or variable 'generate_PPM'.
Error in idaho (line 30)
PPM=generate_PPM(M,nsym);
Save this in a file named as generate_PPM.m
function PPM=generate_PPM(M,nsym)
% function to generate PPM
% 'M' bit resolution
% 'nsym': number of PPM symbol
PPM=[];
for i= 1:nsym
temp=randint(1,M); % random binary number
dec_value=bi2de(temp,'left-msb'); % converting to decimal value
temp2=zeros(1,2^M); % zero sequence of length 2^M
temp2(dec_value+1)=1; % placing a pulse according to decimal value
% note that in matlab index does not start from zero, so need to add 1;
PPM=[PPM temp2]; % PPM symbol
end
end
Walter Roberson
Walter Roberson el 11 de Mzo. de 2018
You did not follow the structure I posted! When you follow the structure I posted, it works fine.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Line Plots en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 8 de Mzo. de 2018

Comentada:

el 13 de Mzo. de 2018

Community Treasure Hunt

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

Start Hunting!

Translated by