2010-05-08 9 views
1

Je voudrais créer une animation pour démontrer le codage LDPC qui est basé sur Sum-Product AlgorithmMatlab Simulation: Point (symbole) Déplacement du point de départ jusqu'au point final et retour

Jusqu'à présent, j'ai créé un graphique qui montre les connexions entre les noeuds de symboles (à gauche) et les noeuds de parité (à droite) alt text http://img29.imageshack.us/img29/9780/ldpc.jpg et souhaite animer des points allant des symboles aux noeuds de parité et inversement.

La figure est dessinée en exécutant la méthode suivante:

function drawVertices(H) 
hold on; 
nodesCount = size(H); 
parityNodesCount = nodesCount(1); 
symbolNodesCount = nodesCount(2); 
symbolPoints = zeros(symbolNodesCount, 2); 
symbolPoints(:, 1) = 0; 
for i = 0 : symbolNodesCount - 1 
    ji = symbolNodesCount - i; 
    scatter(0, ji) 
    symbolPoints(i + 1, 2) = ji; 

end; 
parityPoints = zeros(parityNodesCount, 2); 
parityPoints(:, 1) = 10; 
for i = 0 : parityNodesCount - 1 
    ji = parityNodesCount - i; 
    y0 = symbolNodesCount/2 - parityNodesCount/2; 
    scatter(10, y0 + ji) 
    parityPoints(i + 1, 2) = y0 + ji; 
end; 
axis([-1 11 -1 symbolNodesCount + 2]); 
axis off 

%connect vertices 
d = size(H); 
for i = 1 : d(1) 
    for j = 1 : d(2) 
     if(H(i, j) == 1) 
      plot([parityPoints(i, 1) symbolPoints(j, 1)], [parityPoints(i, 2) symbolPoints(j, 2)]); 
     end; 
    end; 
end; 

Donc ce que je voudrais faire ici est d'ajouter une autre méthode qui prend le point de départ (x et y) et le point final comme arguments et animez un cercle ambulant (point) du début à la fin et de retour le long des lignes affichées.

Je serais reconnaissant si quelqu'un d'entre vous pourrait montrer la solution ou suggérer un tutoriel utile sur les simulations matlab.

Merci!

Répondre

2

Je crois que la meilleure façon d'apprendre est par l'exemple. Donc, je vous suggère de regarder la démo lorenz qui vient avec Matlab:

edit lorenz 

Pour d'autres fraîches animations, recherchez orbits.m et swinger.m démos partie du livre de Cleve Moler: Experiments with MATLAB


Je montre Voici une animation simple d'un point se déplaçant le long d'un chemin circulaire. L'idée de maintien se résume à l'aide EraseMode ensemble à xor, et la mise à jour XData et YData du point pour chaque itération:

%# coordinates 
t = (0:.01:2*pi)';   %# 'fix SO syntax highlight 
D = [cos(t) -sin(t)]; 

%# setup a figure and axis 
hFig = figure('Backingstore','off', 'DoubleBuffer','on'); 
hAx = axes('Parent',hFig, 'XLim',[-1 1], 'YLim',[-1 1], ... 
      'Drawmode','fast', 'NextPlot','add'); 
axis(hAx, 'off','square') 

%# draw circular path 
line(D(:,1), D(:,2), 'Color',[.3 .3 .3], 'LineWidth',1); 

%# initialize point 
h = line('XData',D(1,1), 'YData',D(1,2), 'EraseMode','xor', ... 
     'Color','r', 'marker','.', 'MarkerSize',50); 
%# init text 
hTxt = text(0, 0, num2str(t(1)), 'FontSize',12, 'EraseMode','xor'); 

i=0; 
while true 
    i = rem(i+1,numel(t)) + 1;    %# circular increment 
    set(h,'XData',D(i,1), 'YData',D(i,2)) %# update X/Y data 
    set(hTxt,'String',num2str(t(i)))   %# update angle text 
    drawnow         %# force refresh 
    if ~ishandle(h), return; end    %# in case you close the figure 
end 

Pour une explication détaillée des paramètres utilisés (EraseMode, Backingstore, DoubleBuffer, ..), reportez-vous à cette animation guide

Questions connexes