UFMC demodulates received signal [1, 2]. function [ z ] = UFMC_Demodulator( r, Para ) The function works for SISO and MIMO. Input arguments: r: received signal. Size: matrix [Para.N_R, (Para.nSubcarriers+Para.filt_L-1)*Para.Ns] Para: structure containing the modulation parameters. Outputs arguments: z: demodulated symbols at each subcarrier and multicarrier symbol. Size: matrix [Para.nSubcarriers, Para.Ns] if Para.N_R == 1 or multidimensional array [Para.N_R, Para.nSubcarriers, Para.Ns] if Para.N_R > 1
0001 function [ z ] = UFMC_Demodulator( r, Para) 0002 % UFMC demodulates received signal [1, 2]. 0003 % 0004 % function [ z ] = UFMC_Demodulator( r, Para ) 0005 % 0006 % The function works for SISO and MIMO. 0007 % 0008 % Input arguments: 0009 % 0010 % r: received signal. Size: matrix [Para.N_R, 0011 % (Para.nSubcarriers+Para.filt_L-1)*Para.Ns] 0012 % 0013 % Para: structure containing the modulation parameters. 0014 % 0015 % Outputs arguments: 0016 % 0017 % z: demodulated symbols at each subcarrier and multicarrier symbol. 0018 % Size: matrix [Para.nSubcarriers, Para.Ns] if Para.N_R == 1 or 0019 % multidimensional array [Para.N_R, Para.nSubcarriers, Para.Ns] if 0020 % Para.N_R > 1 0021 0022 % References: 0023 % [1] 5GNow Deliverable 3.2 pp 29-35 0024 % [2] F. Schaich, T. Wild and Y. Chen, "Waveform Contenders for 5G - Suitability for Short Packet and Low Latency Transmissions," 0025 % 2014 IEEE 79th Vehicular Technology Conference (VTC Spring), Seoul, 2014, pp. 1-5 0026 0027 % This file is part of WaveComBox: www.wavecombox.com and is distributed under the terms of the MIT license. See accompanying LICENSE file. 0028 % Original author: Mathieu Van Eeckhaute, May 25, 2018. 0029 % Contributors: François Rottenberg, June 22 0030 % Change log: 0031 0032 if Para.N_R==1 0033 %serial to parallel conversion 0034 rx_tsymbol = reshape(r, Para.nSubcarriers+Para.filt_L-1, Para.Ns); 0035 %2N point FFT (Para.nSubcarriers-L+1 extra zeroes added to reach 2*Para.nSubcarriers) 0036 FFT_input = [rx_tsymbol; zeros(Para.nSubcarriers-Para.filt_L+1, Para.Ns)]; 0037 FFT_output = 1/sqrt(Para.nSubcarriers).*fft(FFT_input,2*Para.nSubcarriers,1); 0038 %discard the useless elements 0039 z = FFT_output(1:2:end,:); 0040 0041 z = proto_f_eq(z, Para); % Equalization of the prototype filter 0042 0043 else 0044 z=zeros(Para.N_R, Para.nSubcarriers, Para.Ns); 0045 for index_N_R=1:Para.N_R 0046 %serial to parallel conversion 0047 rx_tsymbol = reshape(r(index_N_R,:), Para.nSubcarriers+Para.filt_L-1, Para.Ns); 0048 %2N point FFT (Para.nSubcarriers-L+1 extra zeroes added to reach 2*Para.nSubcarriers) 0049 FFT_input = [rx_tsymbol; zeros(Para.nSubcarriers-Para.filt_L+1, Para.Ns)]; 0050 FFT_output = 1/sqrt(Para.nSubcarriers).*fft(FFT_input,2*Para.nSubcarriers,1); 0051 %discard the useless elements 0052 z_temp = FFT_output(1:2:end,:); 0053 0054 z(index_N_R,:,:) = proto_f_eq(z_temp, Para); % Equalization of the prototype filter 0055 end 0056 end 0057 0058 end