# Simulating a multipath channel

I have a simple question, that might not be up to the level in this forum:

In theory, a signal $s(t)$ that is received through a multipath channel reads: $$r(t) = \sum\limits_{k=1}^p \alpha_ks(t - \tau_k)$$ where $r(t)$ is the received signal, $\alpha_k$ is the gain of the $k^{th}$ path and $\tau_k$ is the delay of the $k^{th}$ path.

But

In MATLAB, we have $s[n]$, sampled at some sampling period, $T_s$. To simulate $r[n]$, the only problem faced is that $\tau_k$ will not be a multiple of $T_s$. My question is "Is it a good idea to upsample the signal $s[n]$ up to a desired sampling period, say $NT_s$". If so, why should filtering be done after the upsampling process ?

• If you want to simulate the equation you posted, the sampling frequency should be such that you can resolve the individual paths. So, the sampling frequency should be of the same order as the minimum difference between delays you want to simulate. In the last part of your question, what filtering are you referring to? – MBaz Oct 19 '16 at 21:04
• @ElBazzi The amount of delays ($\tau_k$), the number of multipath components ($p$), and the attenuation of each delay ($\alpha_k$) are all random variables. You cannot simply look at the minimum difference between delays (since it can be zero!). What channel model do you consider? You need to discretize the channel according to the specifications of the channel model and choose a delay resolution. This will look similar to a form of "quantization". – msm Oct 19 '16 at 21:30
• Yes @ElBazzi but do you only want to simulate one timeslot (symbol)? Even with one timeslot you need to decide on the delay resolution. – msm Oct 19 '16 at 21:37
• I suggest you choose a channel model first, then choose a delay resolution that conforms with it. Delay spread can vary depending on the indoor channel (it can be up to a few hundred nano seconds for instance). So the delay resolution should be quite small compared to that. By quantization I mean if your delay is between $i$-th and $j$-th component of the discretized channel, then integrate it to one of them. – msm Oct 19 '16 at 21:53
• Hope it can help you @ElBazzi. – msm Oct 19 '16 at 22:00

## 3 Answers

The upsampling solution adds additional difficulties, as mentioned in some posts here. Please consider this solution..

The Discrete Fourier Transform (DFT) properties might support you. Take a look at the time shifting property. It states that $$\mathcal{F}\{x[k-\tau]\} = e^{-j\omega\tau}\mathcal{F}\{x\}$$ I implemented a possible use of the property in your problem in the following octave script. A picture with the result is also attached. A cos signal with 3[Hz] is sampled at 10[Hz], and shifted 33[ms] with the property. I hope it helps.

% sampled signal:
fs          = 10;
Ts          = 1/fs;
T           = 0:Ts:1;
nT          = length(T);
sig_sampled = 0.2 * cos(2*pi*3*T);

% just to plot, signal with high sample rate:
Tb          = 0:(1/1000):1;
sig_better  = 0.2 * cos(2*pi*3*Tb);

% delayed signal where tau is not a multiple of Ts:
% (using Fourier properties):
tau              = 0.033;
w                = 2*pi*(((-nT/2):((nT/2)-1))/nT)*fs;
fft_sig          = fft(sig_sampled);
fft_shift        = exp(-sqrt(-1)*tau*ifftshift(w)) .* fft_sig;
sig_delayed      = ifft(fft_shift);
sig_better_shift = 0.2 * cos(2*pi*3*(Tb-tau));

figure(1); clf;
plot(
Tb, sig_better, 'k-',
T,sig_sampled, 'k-x',
Tb, sig_better_shift, 'r-',
T, sig_delayed, 'r-x'
);
set(gca, 'ylim', 0.3*[-1,1])
grid on
legend('original signal', 'sampled', 'shifted signal', 'shifted sampled signal')
print('-djpg', '-r 200', 'fig.jpg')


• H. H. Dam, "Design of Allpass Variable Fractional Delay Filter," in IEEE Transactions on Signal Processing, vol. 59, no. 12, pp. 6240-6244, Dec. 2011. S. C. Pei and Y. C. Lai, "Closed form variable fractional delay using FFT with transition band trade-off," 2014 IEEE International Symposium on Circuits and Systems (ISCAS), Melbourne VIC, 2014, pp. 978-981. – user28715 Jun 17 '17 at 19:47

Is it a good idea to upsample (and then filter?). No. To be able to resolve the multipath components, your sampling rate (A/D sampling) must be greater than ( i think 2x ) the minimum multi-path delay. Upsampling (and then filtering) will not provide you the information you need.

• This is not about resolving. This is about simulating $r[n]$. Thanks for the answer. – Ahmad Bazzi Oct 19 '16 at 21:43

The problem of simulating a multi-path channel where the delays are not integer multiples of the sampling time is not trivial. The simplest method is just to round each tap to the nearest sample, however this is not what happens in reality:

Consider a discrete-time transmit signal $s[n]$ which is transmitted over a real channel. I.e. there needs to be some digital-analog-converter followed by a lowpass filter, to generate the continuous-time transmit signal:

$$s(t) = \sum_ns[n]g(t-nT)$$ where T is the sampling period and $g(t)$ is the combination of DAC and subsequent low-pass filter. Note that $g(t)$ can be assumed to be RRC or Sinc-filter for example. Then, the multi-path channels comes in:

$$r(t) = \sum_k\alpha_k s(t-\tau_k)=\sum_ns[n]\sum_k\alpha_kg(t-nT-\tau_k)$$

Finally, the received signal is low-pass-filtered with $\gamma(t)$ and discretized: \begin{align} r[n'] &= (\gamma(t)*r(t))|_{t=n'T}\\ &=\sum_ns[n]\sum_k\alpha_ku(n'T-nT-\tau_k) \end{align} where $u(t)=g(t)*\gamma(t)$. Now, we can write this as a discrete convolution:

$$r[n'] = \sum_ns[n]h[n'-n]$$ with $$h[n'-n] = \sum_k\alpha_ku((n'-n)T-\tau_k).$$

Here, $h[n]$ is the discrete-time equivalent channel. Note that this channel is actually neither causal nor finite, since g(t) is bandlimited (and hence infinite in time).

You can understand $h[n]$ as a sampled version of the sum of continuous-time shifts of the overall impulse response without the channel u(t). Normally, u(t) should be a Nyquist-Filter, i.e. it is ISI-free. In this case, and when the channel taps are at integer fractions, you get a well-behaved (i.e. finite and causal) discrete channel.

This is how it works in reality. For simulation, you can generate this h[n] and truncate it, when the tap energy falls below a certain threshold.