Maybe to someone this question may seem quite easy but I have a problem grasping it. Namely, assume that we have two systems A and B with sampling rates $f_A$ and $f_B$ where $f_A>f_B$ and $R=\frac{f_A}{f_B}$. If we upsample system B by $R$ (i.e., $f_B=f_A$) using the zero order hold interpolation what is the relation between the time samples before ($n_{old}$) and after ($n_{new}$) upsampling? More precisely, we defined $\mathcal{N}_{old}=\{1,2,...,n_{old},..N_{old}\}$ and $\mathcal{N}_{new}=\{1,2,...,n_{new},..,R*N_{old}\}$ as sets of time samples before and after upsampling. Based on the definition of ZOH following relation should hold: $$ n_{old}=\frac{n_{new}}{R} $$ i.e., every $R^{th}$ sample from $\mathcal{N}_{new}$ corresponds to the one time sample from $\mathcal{N}_{old}$ but if we for example take some $n_{new}$that is not multiple of $R$ we will get that $n_{old}$ is not an integer what doesn't make sense. What am I doing wrong?

  • $\begingroup$ I want to provide an answer despite the fact the it's rather vague what exactly you are asking. But I think I have an opinion at least. $\endgroup$ – Fat32 May 20 '16 at 23:21

Assuming a digital (discrete-time) sample rate conversion (upsampling) operation carried on old samples of a signal x[n] to upsample it by an integer factor R by the utilization of a zero-order hold interpolation filter, you would essentially replicate (repeat) every new and empty (R-1) samples with the single old sample that they originate from. I guess the problem you have stems from the fact that you misinterpret the relation: $$ n_{old}=\frac{n_{new}}{R} $$

which is correct for continuous variables but not if you consider the fact that both $n_{old}$,$n_{new}$,and $R$ are integers. Therefore it cannot hold true for those samples $n_{new}$ which are not integer multiples of $R$

To remedy your confusion with the ZOH output index calculation, you shall better use the following interpretation as a relation between new and old sample indices: $$ n_{old} = \lfloor \frac{n_{new}}{R} \rfloor$$

Where floor, with brackets $\lfloor$, $\rfloor$ is the mathematical operation that returns the largest integer that is less than or equal to its argument.

Or you could, equally, define a ruling to map old and new samples as: index $n_{old}$ is equivalent to the integer $K$, for all those $n_{new}$ that satisfy $K R \leq n_{new} < (K+1)R$

  • $\begingroup$ If I would index newly sampled samples as $\mathcal{N}_{new}=\{1,1,1,2,2,2...,n_{new},n_{new},n_{new},..,R*N_{old},R*N_{old},R*N_{old}\}$ for R=3 for example, would that be correct? In this way all $n_{new}$ fit to the initial formula (without flooring). I am doing some calculations where it is a little bit difficult to include flooring, i.e., I need that every $n_{new}$ can be included into calculations. $\endgroup$ – Cali May 23 '16 at 10:54
  • $\begingroup$ When creating the new signal from the old signal you don't need that flooring here, all you need is a double-for loop in which outer loop will run trough the range of old indices from n=0 to n=Lold, and inner loop per n, will range through m=0 to m=R-1; and copy the expanded sample into those newly allocated (R-1) empty samples in between two consequitive old samples. (i.e. for(n=0; n<Lold; n++) { for(m=0; m<R; m++){ xnew[R*n + m] = xold[n] ;} } $\endgroup$ – Fat32 May 23 '16 at 13:39
  • $\begingroup$ I agree and thx for your reply but this is solution if somebody has to implement this problem in some programming language. My concern is how to express this in analytical ("mathematical") way. I want to map all $n_{old}$ to each $n_{new}$ in a way that a have relation that I can after easily use in some mathematical computations. That is why I have proposed this new indexing but I am not sure does it hold. $\endgroup$ – Cali May 23 '16 at 14:30
  • $\begingroup$ ok but if your concern is "mathematical" expression then just use floor? but you say it is difficult to compute (I don't know why btw) any way your ""abstract"" indexing is ok. it will give you a map between the two signals xold and xnew. Btw floor is just an integer division in C language. $\endgroup$ – Fat32 May 23 '16 at 14:42
  • $\begingroup$ I agree regrading the flooring, it is quite simple operation but let's say I want to have just equality between $n_{new}$ and $n_{old}$ because I am expressing $n_{old}$ through $n_{new}$ and I am working with variables and not fixed numbers so having flooring makes my notation cumbersome. However, thank you very much for your help. $\endgroup$ – Cali May 23 '16 at 14:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.