<<home  <<previous  next>>

Resampling with Chirp Z





Since chirp Z transform can zoom in on a specific segment of a signal's spectrum, I would think it can be used for downsampling or upsampling purposes. That is indeed the case. I did not now what to expect precisely, so I figured out by experiment how to do it.

Below is a test function consisting of two cosines with periodicity 1 and 3 in an FFT framesize of 1024 samples.




twocosines



I zoom in on the spectrum with zoomfactor 2. As ever, this spectrum looks inconspicuous:




spectrum1



I feed this spectrum in a regular inverse FFT. What comes out, is the signal downsampled by a factor 2:



downsampled1



So by zooming in on the spectrum, which is in fact upsampling, the signal can be downsampled. That is funny. Of course, this downsampling was not such a difficult task. It could be done by taking away every other sample, instead of the chirp Z transform with it's two complex FFT's of double size, plus a regular inverse FFT. Therefore, I will try a weird downsampling factor like 1.5:




downsampled2



Such downsampling can also be done by 'fractional resampling', where you first upsample and then downsample, the factors being a ratio of relatively prime integers. That would require a lot of filtering. But, can chirp Z downsample without filtering? To check this, I add a frequency in the second half band, at harmonic 280 (Nyquist is at 512). This is my test signal:




threecosines



Doing chirp Z transform with zoom factor 2.2, for example, the upsampled spectrum has a peak above the Nyquist frequency, originating from harmonic 280. That peak has no conjugate. In fact, after stretching the spectrum, nothing has a conjugate anymore.



spectrum2



Reverting this spectrum back to time domain, would give the signal plotted below. The high frequency comes from the peak above Nyquist. It can not be harmonic 280 since the downsampled signal has harmonics up till around 230 in the positive range. It is an alias of a frequency that was not in the original, and should be eliminited.



threecosines2



The solution seems simple. When we are in frequency domain anyway, a mirrorsymmetric spectrum can be computed from the first half, to get rid of aliases. The result is a bandlimited & downsampled signal:



filtered



Chirp Z can downsample with any factor, integer or not. On the previous page I zoomed in on a 1024 point spectrum with factor 200. An inverse FFT of that would give a 5 point signal, pretty useless I would think. Here is my test signal downsampled with factor 8, to have another impression:



twocosines2




As the signal gets sleeker, the sample value peaks grow. Apparently, the increase is proportional to the zoomafactor so this can be compensated in the normalisation. Also notice that the 'empty' range is not really empty, it even starts with a dreadful peak. A similar peak appears at the start of the downsampled signal, although it is hard to see in the plot. Let me do a magnified plot of the first 75 samples. It turns out that the signal extremes are not so perfectly interpolated at all. The distortion is probably caused by the mirrorsymmetric spectrum computation. Relevant information about the waveshape was in the second spectrum half, which is erased by that action.




downsampled3



I wanted to try signal upsampling as well. With that I had such weird results, until I realised the input signal should leave room for expansion. Just like the downsampled signal shrinked and thereby made room. So here is my input test signal again, but at half the length of the analysis:



upsample1



I feed it into the chirp Z transform with zoom factor 0.8. That is zooming out instead of zooming in. What happens when zooming out? The opposite of zooming in. It is hard to imagine what that means. Only after experimenting, I could understand the effect. You are not seeing a segment of the spectrum, but the whole of it and even a bit more. While the spectrum shrinks, point N (1024) which is also point zero because of the periodical nature of the transform, moves leftward. In the plot below you can see how the coefficients in the lowest part of the spectrum are thereby copied to the right of this shifted N aka zero point.



spectrum3



Just like with zooming in, the spectrum is not mirrorsymmetric anymore. Reverting this to time domain as is, will give the signal plotted below. The upsample factor is the reciprocal of the spectrum-zoom-factor:



upsample2



The high frequencies here are what they call 'image' frequencies, because they are kind of ghost image from the lower spectrum part. Images will always appear in an umsampled signal, no matter how bandlimited that signal was. With chirp Z we can get rid of the images by computing a mirrorsymmetric spectrum from it's first half, exactly like it was done for downsampled signals. Now I get this nicely stretched output:




upsample3



Upsampling with chirp Z brings an extra problem that must be handled. So far, I did low frequencies and it worked well. But with high frequency content in the original, we will be bothered by conjugates. After all, with point N shifting leftward, the conjugates also shift leftward. Let me enter a high frequency to check what will happen. First do a non-zooming transform to see the original spectrum:



hifreq



If I zoom out using factor 0.75, the negative frequency correlations already tresspass the middle of the analysis frame in their leftward movement:



spectrum4



We have to perform bandlimiting to eliminate such tresspassers. The Nyquist frequency must be tracked in it's movement. It moves like:

shiftedNyquist = Nyquist * zoomfactor

Everything between shifted Nyquist and original Nyquist must be zeroed, before computing the mirrorsymmetric spectrum.

To visually check if this works, I have to upsample the signal drastically with factor 100. Otherwise we will only see those indefinite needle bunches. On the left is the non-bandlimited output. It is diluted with zero's, which means it has alias frequencies. On the right is the bandlimited output, it has the pure transposed frequency.



upsample4
upsample5



This extreme upsampling was done for testing purposes, but it would not have worked if there had been frequency content below harmonic 100 of the analysis width. Such content would wrap around in the limited space. There is however also this option to rotate the whole spectrum with a frequency offset. If we make the bandlimiting function dependent on the frequency offset as well, the options for resampling increase further. Although the offset is effectuated by complex multiplication, the offset itself is not a factor but a frequency addition. To find the frequency cut off point:

shiftedNyquist = (Nyquist-frequencyoffset) * zoomfactor

Using this modification, I have checked that exactly the same result as in the above experiment can be obtained with a frequency offset of harmonic 392 (harmonic respective to analysis width) and zoom factor 0.5. But now without worries about possible distortion by low frequencies. In serious applications, this bandlimiting should probably be done with some very short curve instead of hard cut.

In this quick test of chirp Z as resampling method, I have not touched on all possibilities. But so far, I am impressed. The method is computationally intensive, on the other hand it is very flexible. Spectrum rotation for example, is 'included in the price'. You can magnify any aspect of a signal by a combination of rotation, zooming and filtering in one single process.