Index exceeds matrix dimensions. Exsample.m

조회 수: 3 (최근 30일)
Fares Saleh
Fares Saleh 2020년 11월 29일
댓글: KSSV 2020년 11월 29일
I keep running into the same error for my functions. The error and functions (uniquan.m and sampandquant.m) are shown below:
>> Exsample
Index exceeds the number of array elements (4).
Error in uniquan (line 19)
q_out=q_level(qindex); % use index vector to generate output
Error in sampandquant (line 21)
[sq_out,Delta,SQNR]=uniquan(s_out,L);
Error in Exsample (line 12)
[s_out,sq_out,sqh_out,Delta,SQNR]=sampandquant(xsig,16,td,ts);
Here is my function:
% (Exsample.m)
% Example of sampling, quantization and zero-order hold
clear;clf;
td=0.002; %origional sampling rate 500 Hz
t=[0:td:1.]; %time interval of 1 second
xsig=sin(2*pi*t)-sin(6*pi*t); % 1Hz+3Hz sinusoids
Lsig=length(xsig);
ts=0.02; %new sampling rate = 50Hz.
Nfactor=ts/td;
% send the signal through a 16-level uniform quantizer
[s_out,sq_out,sqh_out,Delta,SQNR]=sampandquant(xsig,16,td,ts);
% receive 3 signals
% 1. sampled signal s_out
% 2. sampled and quantized signal sq_out
% 3. sampled, quantized, and zero-order hold signal sqh_out
%
% Calculate the Fourier Transfoms
Lfft=2^ceil(log2(Lsig)+1);
Fmax=1/(2*td);
Faxis=linspace(-Fmax,Fmax,Lfft);
Xsig=fftshift(fft(xsig,Lfft));
S_out=fftshift(fft(s_out,Lfft));
And I'm drawing from:
% (uniquan.m)
function [q_out,Delta,SQNR]=uniquan(sig_in,L)
% Usage
% [q_out,Delta,SQNR]=uniquan(sig_in,L)
% L - number of uniform quantization levels
% sig_in - input signal vector
% Function outputs:
% q_out - quantized output
% Delta - quantization interval
% SQNR - actual signal to quantization noise ratio
sig_pmax=max(sig_in); % finding the positive peak
sig_nmax=min(sig_in); % finding the negative peak
Delta=(sig_pmax-sig_nmax)/L; % quantization interval
q_level=sig_nmax+Delta/2:sig_pmax-Delta/2; % define Q-levels
L_sig=length(sig_in); % find signal length
sigp=(sig_in-sig_nmax)/Delta+1/2; % convert into 1/2 to L+1/2 range
qindex=round(sigp); % round to 1,2, ... L levels
qindex=min(qindex,L); % eliminate L+1 as a rare possibility
q_out=q_level(qindex); % use index vector to generate output
SQNR=20*log10(norm(sig_in)/norm(sig_in-q_out)); % actual SQNR value
end
And:
% (sampandquant.m)
function [s_out,sq_out,sqh_out,Delta,SQNR]=sampandquant(sig_in,L,td,ts)
% Usage
% [s_out,sq_out,sqh_out,Delta,SQNR=sampandquant(sig_in,L,td,ts)
% L - number of uniform quantization levels
% sif_in - input signal vector
% td - origional signal sampling period of sig_in
% ts - new sampling period
% NOTE: td*fs must be a positive integer;
% Function outputs:
% s_out - sampled output
% sq_out - sample-and-quantized output
% sqh_out - sample, quantize, and hold output
% Delta - quantization interval
% SQNR - actual signal to quantization noise ratio
if (rem(ts/td,1)==0)
nfac=round(ts/td);
p_zoh=ones(1,nfac);
s_out=downsample(sig_in,nfac);
[sq_out,Delta,SQNR]=uniquan(s_out,L);
s_out=upsample(s_out,nfac);
sqh_out=kron(sq_out,p_zoh);
sq_out=upsample(sq_out,nfac);
else
warning('Error! ts/td is not an integer!')
s_out=[];sq_out=[];sqh_out=[];Delta=[];SQNR=[];
end
end
  댓글 수: 1
KSSV
KSSV 2020년 11월 29일
This error occurs when you try to extract more number of elemnts than present in an array.
Example:
A = rand(1,10);
A(1) % no error
A(5) % no error
A(10) % no error
A(11) % error as there are only 10 elements in A.

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

답변 (0개)

카테고리

Help CenterFile Exchange에서 Matrices and Arrays에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by