$35
ASAS Homework 2: Convolution and Linear Time-invariant Filtering
1. Averaging and โdifferencingโ (Remarks: Yes, here we are going to use โdifferenceโ as a verb). Please first find a piece of music or any sound and read it into MATLAB. Denote the signal as ๐ฅ[๐].
(a) Check the sampling rate, the number of channels, and the number of bits per sample.
(b) The simplest low-pass filter is to average over consecutive samples; that is, let
1 !
๐ฆ[๐] =+ ๐ฅ[๐ โ ๐ + 1] ,
๐ "#$
where ๐ is the order of the filter, and ๐ฆ[๐] is the output of the filter. Implement this filter and listen to the output. Increase ๐ from 1 to 10 to see if you can hear the difference.
(c) Check your result in (b) against the following results. They should essentially be identical.
y_conv = conv(x, 1/p*ones(p,1));
(d) In fact, the array 1/p*ones(p,1) can be regarded as the impulse response of this FIR
(finite impulse-response) filter. Denote h = 1/p*ones(p,1) and use freqz(h) to plot the frequency response of the filter.
(e) Now, define ๐ฆ% = ๐ฅ[๐] โ ๐ฅ[๐ โ 1]. Of course this can be done with a โforโ loop, but alternatively, please use conv() to do the job.
(f) Set x = 0.1*randn(A_CERTAIN_LENGTH, 1) so it is an instance of Gaussian white noise with mean zero and standard deviation ๐ = 0.1. Listen and compare the result before and after averaging/differencing. Does it feel more unpleasant before or after averaging/differencing? Describe how you feel about it and explain, perhaps, the reason why.
Remark: When you listening to a signal stored in a vector, make sure that its range is between ยฑ1 to avoid clipping effect. Or, alternatively, use soundsc() to avoid clipping. Always remember to specify the sampling rate.
2. Infinite impulse response (IIR). Take any audio signal ๐ฅ[๐] and for any ๐ 1 implement the following by a for loop,
๐ฆ[๐] = ๐ผ๐ฆ[๐ โ 1] + ๐ฅ[๐],
Where 0 < |๐ผ| < 1 is a constant. You can assume ๐ฆ[1] = 0.
(a) Check your result against y = filter([1], [1 -alpha], x).
(b) Create an instance of Gaussian white noise for about 1 second long. Listen and compare the result before and after filtering. (c) Create a periodic impulse train:
๐ฅ[๐] = 700.5, , otherwiseif ๐ = 80.๐
Where ๐ is an integer. In other words, ๐ฅ[๐] is non-zero at every 80th sample. Listen and compare the result before and after filtering.
(d) Discuss how to restore ๐ฅ[๐] from ๐ฆ[๐]. (Hint: if ๐ผ is known, it is quite easy. However, if ๐ผ is unknown, you may need to make assumptions.)