version 1.2.0.0 (4.43 KB) by
Wessel Lubberhuizen

a near perfect reconstruction polyphase filterbank with two times oversampling

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.

Wessel Lubberhuizen (2021). Near Perfect Reconstruction Polyphase Filterbank (https://www.mathworks.com/matlabcentral/fileexchange/15813-near-perfect-reconstruction-polyphase-filterbank), MATLAB Central File Exchange. Retrieved .

Created with
R2007a

Compatible with any release

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!Create scripts with code, output, and formatted text in a single executable document.

Thomas ThronFor those trying to get the paper: https://web.archive.org helps, just enter the link :)

Rory FaganHi Wessel,

Could you share your paper? rory.fagan@ll.mit.edu Thanks, Rory

牛 牛Hello, wessel. I'm doing some research recently. Can you share a paper on the algorithm or send it to me: 952263371@qq.com 。 I thank you very much.

Jack MaJoseph FermentHello-

I was wondering if anyone has success in finding the original paper to go with this submission? The closest I have found is "Channelization using RFNoC (GRCON 2017)". This paper directly sites this matlab page, however the paper describes the basic M/2 Channelizer while the matlab is different using parallel frequency shifted banks.

Thanks for any help, and btw this an EXCELLENT source for anyone trying to understand.

Asl800Hi Wessel, Would you please share the paper about the algorithm or send it to me:solidmanfree@yahoo.com . I would very much appreciate it.

Gilad DaninHi Wessel.

Thank you for publishing your npr code. It's working great!

Though, I'd like to understand your algorithm better. Can you share the paper your code is based on?

Specifically, how can I modify the algorithm to peform without the excessive oversampling by 2?

Thanks, Gilad

Bill Kulpwenlin zhangcan you re-share the paper, since the link is not working any more.

Madhumitha Munusamycould you share this paper using the address "tmmadhumitha@gmail.com", thank you very much

Jin JiluCould you share your paper using the address 'charles.jilu.jin@gmail.com', thanks very much!

MO shizhang chengCan you share your paper using the address 94074663@qq.com,thank you!

Almog HershkoHi. I will also be very glad to receive the paper at almog.hershko@gmail.com. Thank you!

Catherine ZouBjarne BuseyneAli RazaPlease share your paper using the address art.adeel@gmail.com

King WangM PYueyue NaJesse Ver MeerYT ChengHi Wessel,

It is difficult for me to understand how the codes work, could you please tell me the paper's name or send the paper to me:591714086@qq.com. Many Thanks

shilong maHi Wessel,

thanks for your job.I am a freshman,It is difficult for me to understand how the codes work. Would you please share the paper about the algorithm or send it to me:msl_paper@163.com. I would very much appreciate it.

SilviaHi Wessel,

The paper is no longer available at the mentioned site.

Can you or anybody that has the paper, send it to me:

silvia_todorof@hotmail.com

Many thanks

Silvia

kranthi thatikondaThank you Wessel Lubberhuizen

if it compared with integer oversampling and WOLA structures it gives more Reconstruction error.

and ability of the system to separate in the frequency domain the signal under consideration into two or more signals or to compose two or more different signals into a single signal not exceptional if the no. of channels and iterations are more.

XianhaiVery nice jobs!

Homa EsfahanizadehYangHi Wessel,

Thank you for your perfect job!

I have a question here. You mentioned that this is an oversampling implementation (two-times. For the output of npr_analysis, is it already decimated? Similarly, for the output of npr_synthesis, is it already interpolated?

Thank you very much!

KenHello,Wessel Lubberhuizen!

I am a student of Chinese Academy of Sciences.It is really great share your work.I have run your Matlab code on Near Perfect Reconstruction Polyphase Filterbank, but I don't quit understand the principle on this algorithm.Would you please share the paper about the algorithm.

Your response will be appreciated!

KanishkHello Mr Wessel,

I studied your code and I must commend you for your wonderful work.

However, I am not able to understand how it works. All the scripts and references I have read, speak about two analysis IDFT filter banks where the input signal is fed with and without delay of M/2 (M = number of polyphase components).

In your code, you introduced a frequency shift for the lower filter bank signal and inverted the sign for every alternate column. Could you perhaps provide your reference. I would very much appreciate it.

Also, the rref function was genius :)

Gilberto RomeroThanks a lot!

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

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.

Wessel LubberhuizenThe 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.

ArashHi. 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

Rajkumar RamasamyVladHi 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.

Wessel LubberhuizenHi 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

VladHi, 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.

Wu LiangmingI'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.

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

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

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

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

Wei ZhangNice job! Thank you very much!

mahantesh ambolegood