87 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Matlab
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Matlab
		
	
	
		
			Executable File
		
	
	
	
	
| function plot_complex_sig(x,samples_per_symbol,Nmax,plot_style)
 | |
| % plot_complex_sig(x) plots a one-dimensional complex signal as points
 | |
| % in 3-D space : x-axis is the sample (time) axis, y-axis is the real part,
 | |
| % and z-axis the imaginary part
 | |
| %
 | |
| % plot_complex_sig(x,samples_per_symbol) plots all samples in blue and
 | |
| %  one sample per symbol in red.
 | |
| %
 | |
| % plot_complex_sig(x,samples_per_symbol,Nmax) only plots the first Nmax
 | |
| % samples.
 | |
| %
 | |
| % plot_complex_sig(x,samples_per_symbol,Nmax,'arrows') use arrows from
 | |
| % (i_sample,0,0) instead of points to represent samples.
 | |
| %
 | |
| % version compatible with Simulink Version 7.3 (R2009a)
 | |
| 
 | |
| %% process function arguments and perform various tests on function
 | |
| 
 | |
| nargchk(1,3,nargin);
 | |
| 
 | |
| if nargin<2
 | |
|     samples_per_symbol = 1;
 | |
| end
 | |
| 
 | |
| if (isstruct(x))
 | |
|     if(~isfield(x,'signals'))
 | |
|         error('unsupported data type')
 | |
|     else
 | |
|         if (x.signals.dimensions ~= 1)
 | |
|             error('does not support multidimensional signals')
 | |
|         else
 | |
|             vals = x.signals.values;
 | |
|         end
 | |
|     end
 | |
| else % should be array
 | |
|     vals = x;
 | |
| end
 | |
| 
 | |
| if nargin<3
 | |
|     Nmax=length(vals);
 | |
| end
 | |
| 
 | |
| if nargin<4
 | |
|     plot_style = 'points';
 | |
| end
 | |
| 
 | |
| if (~isnumeric(vals))
 | |
|     error('unsupported data type')
 | |
| elseif (isreal(vals))
 | |
|     error('numbers are not complex')
 | |
| end
 | |
| 
 | |
| if ((samples_per_symbol < 1) || ~(round(samples_per_symbol)==samples_per_symbol))
 | |
|     error('samples_per_symbol must be a strictly positive integer')
 | |
| end
 | |
| 
 | |
| if ~strcmp(plot_style,'points') && ~strcmp(plot_style,'arrows')
 | |
|     error('possible values for plot plot_style are : "points" and "arrows"')
 | |
| end
 | |
| %% function implementation
 | |
| 
 | |
| sel=(1:Nmax)';
 | |
| abs_max = max(abs(x(sel)));
 | |
| if (samples_per_symbol==1)
 | |
|     if strcmp(plot_style,'points')
 | |
|         plot3(sel,real(vals(sel)),imag(vals(sel)),'.');
 | |
|     elseif strcmp(plot_style,'arrows')
 | |
|         quiver3(sel,zeros(size(sel)),zeros(size(sel)),zeros(size(sel)),real(vals(sel)),imag(vals(sel)),0);
 | |
|     end
 | |
| else
 | |
|     plot3(sel,real(vals(sel)),imag(vals(sel)),'.');
 | |
|     hold on
 | |
|     sel= (1:samples_per_symbol:Nmax)';
 | |
|     if strcmp(plot_style,'points')
 | |
|         plot3(sel,real(vals(sel)),imag(vals(sel)),'.r');
 | |
|     elseif strcmp(plot_style,'arrows')
 | |
|         quiver3(sel,zeros(size(sel)),zeros(size(sel)),zeros(size(sel)),real(vals(sel)),imag(vals(sel)),0);
 | |
|     end
 | |
|     hold off
 | |
| end
 | |
| ylim([-abs_max,abs_max])
 | |
| zlim([-abs_max,abs_max])
 | |
| axis vis3d
 | |
| grid on
 | |
| xlabel('samples');
 | |
| ylabel('real');
 | |
| zlabel('imag'); |