Analysis filterbank implementation using polyphase network and IFFT [1,2]. function [ y ] = AFB( r, g, Para) Input arguments: r: received signal. Size: vector. g: prototype pulse of length Para.nSubcarriers*Para.kappa Para: structure containing the modulation parameters. Outputs arguments: y: demodulated symbols at each subcarrier and multicarrier symbol. References: [1] P. Siohan, C. Siclet, and N. Lacaille, "Analysis and design of OFDM/OQAM systems based on filterbank theory," IEEE Transactions on Signal Processing, vol. 50, pp. 1170–1183, May 2002. [2] Viholainen, A. et al., "Prototype filter and structure optimization," tech. rep., ICT-211887 PHYDYAS, January 2009.
0001 function [ y ] = AFB( r, g, Para) 0002 % Analysis filterbank implementation using polyphase network and IFFT [1,2]. 0003 % 0004 % function [ y ] = AFB( r, g, Para) 0005 % 0006 % Input arguments: 0007 % 0008 % r: received signal. Size: vector. 0009 % 0010 % g: prototype pulse of length Para.nSubcarriers*Para.kappa 0011 % 0012 % Para: structure containing the modulation parameters. 0013 % 0014 % Outputs arguments: 0015 % 0016 % y: demodulated symbols at each subcarrier and multicarrier symbol. 0017 % 0018 % References: 0019 % [1] P. Siohan, C. Siclet, and N. Lacaille, "Analysis and design of 0020 % OFDM/OQAM systems based on filterbank theory," IEEE Transactions 0021 % on Signal Processing, vol. 50, pp. 1170–1183, May 2002. 0022 % [2] Viholainen, A. et al., "Prototype filter and structure optimization," 0023 % tech. rep., ICT-211887 PHYDYAS, January 2009. 0024 0025 0026 % This file is part of WaveComBox: www.wavecombox.com and is distributed under the terms of the MIT license. See accompanying LICENSE file. 0027 % Original author: François Rottenberg, May 4, 2018. 0028 % Contributors: 0029 % Change log: 0030 0031 M=Para.nSubcarriers/2; 0032 0033 Lg=length(g); 0034 A=kron(reshape(g,2*M,Para.kappa),[1,0]); 0035 beta=exp(-1j*2*pi*(0:2*M-1)'/(2*M)*(Lg-1)/2)*ones(1,2*(Para.Ns+Para.PreambleLength)); 0036 0037 temp=reshape(r(1:floor(length(r)/M)*M),M,floor(length(r)/M)); 0038 temp=[zeros(M,1) flipud(temp(1:end,:))]; 0039 Y_poly=[[temp,zeros(M,1)];[zeros(M,1),temp]]; 0040 0041 0042 Y=conv2along1(Y_poly,A); 0043 y=ifft(Y)*(2*M); 0044 y=y(:,Para.kappa*2+1:Para.kappa*2+2*(Para.Ns+Para.PreambleLength)).*beta; 0045 0046 0047 0048 0049 end 0050