Code covered by the BSD License  

Highlights from
Near Perfect Reconstruction Polyphase Filterbank

4.6

4.6 | 5 ratings Rate this file 31 Downloads (last 30 days) File Size: 4.43 KB File ID: #15813
image thumbnail

Near Perfect Reconstruction Polyphase Filterbank

by Wessel Lubberhuizen

 

03 Aug 2007 (Updated 07 Jun 2010)

a near perfect reconstruction polyphase filterbank with two times oversampling

| Watch this File

File Information
Description

This set of files can be used to construct a polyphase filter bank with near perfect reconstruction. The filter bank is implemented using two uniformly modulated DFT filter banks that are frequency shifted by 1/2 channel width. Effectively, two-times oversampling is used.

The number of channels must be a multiple of two. The number of taps per channel can be freely selected. A script is provided for designing the prototype filter, which is based on a 'root-raised-error-function'. The prototype has exactly linear phase.

With 128 taps per channel an average reconstruction error of -300 dB can be achieved. Channel separation is better than 150 dB for neighboring channels, and better than 300 dB for channels that are further apart.

The processing speed is around 200 kSamples/second, for 32 taps / channel, irrespective of the number of channels.
With enough memory, a large number of channels (e.g. 64K) is feasible.

Required Products Filter Design Toolbox
MATLAB release MATLAB 7.4 (R2007a)
Tags for This File  
Everyone's Tags
Tags I've Applied
Add New Tags Please login to tag files.
Comments and Ratings (15)
05 Feb 2008 mahantesh ambole

good

18 Mar 2008 Wei Zhang

Nice job! Thank you very much!

14 Feb 2009 Maciej Bartkowiak

There is a significant delay introduced by the analysis followed by synthesis. The signal seems to be delayed by N*(L-1)/2 samples

15 Feb 2009 Wessel Lubberhuizen

That is correct. A high spectral resolution inherently requires a large temporal delay.

22 Jul 2009 Hua

The output of analysis filter is complex signal. How to make it real?

30 Aug 2009 Wessel Lubberhuizen

Hua, you can make a complex signal real by upsampling and frequency shifting. But why would you want to do that?

08 Sep 2009 Wu Liangming

I've read your work, and have some questions.
What is the need of doing
    x2(i,:) = x2(i,:) * exp(sqrt(-1)*pi*(i-1)/N);
    x2(i,2:2:M) = -x2(i,2:2:M);
in the analysis part and it's corresponding in synthesis. It seems to make a frequency shift. I understand the first line will make a frequency shift and I don't know what is the second line doing.
Besides, is it possible to reduce the total latency by any means, even with some complexity gain.

28 Sep 2009 Vlad

Hi, I'd like to thank you for this job, but I have a question about real-valued signals too.
Is it possible to replace fft/ifft pair with dct/idct?
Due to theory the only difference: fft shifts prototype only to the 0 .. pi/2 range, while dct shifts prototypes to 0..pi/2 range, and its copy to -pi/2 .. 0.
In fact I don't quite understand why you multiply x2 by exp(-1..) before the fft. Again theoretically fft contains the same exp(-1) which shifts prototype filter.

08 Nov 2009 Wessel Lubberhuizen

Hi Wu Liangming, Vlad,

The two statements:
    x2(i,:) = x2(i,:) * exp(sqrt(-1)*pi*(i-1)/N);
    x2(i,2:2:M) = -x2(i,2:2:M);

Are equivalent to:

    x2(i,j) = x2(i,j) * exp(sqrt(-1)*pi*((i-1)+j*N)/N)

Indeed, this corresponds to a frequency shift by 0.5 times the subband width.

Vlad, you are right, this can also be done by the fft. In that case, you would first combine x1 and x2 to a single matrix, which is passed though the fft. I'll try to update the code so it incorperates this idea, and also check whether it works with dct instead of fft.

For an approach to reduce the delay of a filter bank, see:
http://iwaenc05.ele.tue.nl/proceedings/papers/S04-05.pdf

22 Nov 2009 Vlad

Hi Wessel Lubberhuizen,
Thanks for your response!
In fact, I've carried out some investigations about filter banks.
Now I can say that dct/idct filter bank differs from fft. Sorry for asking about such functionality :)
Actually in case of real-valued filter-banks one should use two different prototype filters and two parrallel phase-shifted dct.
It is told everywhere that real-valued oversampled filter banks has more complex analysis/synthesys than complex-valued.

By the way, I've found the most interesting filter bank implementation in the "Multirate Signal Processing" by Crochiere and Rabiner. It is called Weighted Overlap-Add (WOLA) and it allows to use non-integer oversampling rates.

03 Feb 2010 Rajkumar Ramasamy  
31 Oct 2010 Arash

Hi. would you please explain to me what is Root Raised Error Function meaning? I searched it a lot but I didn`t underestand it. would you please explain it for me or give me some reference?
thanks

05 Mar 2011 Wessel Lubberhuizen

The Root Raised Error Function (RREF) is defined as sqrt(1-erf(x)), where erf(x) is the well known error function. It is used to shape the frequency response of the subband filters in such a way that neighboring filters are power complementary. It is quite similar to a Root Raised Cosine Function. The RREF is a smooth, rapidly decreasing function. The RREF gives better results than the RRCF when approximated by a finite number filter coefficients.

12 Apr 2011 Sanjay Sindhi

@Wessel: Hi, could you please give references for your code? I mean the paper or text book you referred for two times oversampled DFT filter bank structure and its theory. It would be a great help Mr. Wessel.

22 Jun 2011 Sanjay Sindhi

Hi all, Can anybody share code for Modified DFT (MDFT) filter bank?

Please login to add a comment or rating.
Updates
03 Aug 2007

added comments to the code
fixed linter warnings
various improvements

06 Aug 2007

changed category, description

07 Apr 2008

Minor usability enhancements.

27 Nov 2008

removed dependency on Filter Design toolbox

07 Jun 2010

improved prototype filter design method to achieve -300 dB reconstruction error.

Tag Activity for this File
Tag Applied By Date/Time
filter design Wessel Lubberhuizen 22 Oct 2008 09:21:52
filter analysis Wessel Lubberhuizen 22 Oct 2008 09:21:52
near perfect reconstruction polyphase filterbank dft Wessel Lubberhuizen 22 Oct 2008 09:21:52
filter analysis Shamail Saeed 03 Feb 2010 23:57:18
filter analysis lin nengfa 11 Mar 2010 01:55:51
near perfect reconstruction polyphase filterbank dft lin nengfa 11 Mar 2010 02:16:31
filter design Shamail Saeed 19 Aug 2010 05:04:55
near perfect reconstruction polyphase filterbank dft Arash 27 Oct 2010 03:25:03
filter analysis Piotr STEFANIAK 17 Jan 2011 17:03:47

Contact us at files@mathworks.com