I need to do OFDM and GFDM signal transmission in underwater acoustic channel. I have my underwater acoustic channel as follow.

function [h,delay_bar,gain_tap,varargout] = acousticChannel(setup,gain,delay,doppler)
% Generating the distrubition of delays

distribution_delay = makedist('exponential','mu',delay.mean);  % Generating an exponential pdf for Dtau

Dtau        = random(distribution_delay,setup.paths,1);        % Vector of Dtau exponentially distributed 
Dtau_index  = ceil(Dtau/setup.Ts); % Indexes of Dtau vector in disrete time

v = sum(Dtau_index);
 delay_index = cumsum(Dtau_index);                              % Calculating indexes of multipaths for discrete time
     delay       = (delay_index - 1)*setup.Ts;

% Generating the distribution of gains

alpha = log(10^(gain.attenuation/10))/setup.delayspread;       % Exponential attenuation power factor

gain_variance = exp(-alpha*delay);                             % Calculating the gain variance for each multipath                      
gain_tap      = raylrnd(sqrt(gain_variance*2/(4 - pi)));       % Calculating the gain for each multipath

gain_tap = gain_tap/norm(gain_tap);                            % Normalizing gain taps

% Doppler effect

c = 1500; % Sound speed

% Testing type of doppler effect in channel

    a_max = 0;
    varargout{1} = 1;
    varargout{2} = 1;
    a_max = doppler.velocity/c;
    [Q,M] = rat(1+a_max);
    varargout{1} = Q;
    varargout{2} = M;
elseif (strcmp(type,'non-uniform'))
    a = doppler.velocity/c;
    a_max = max(a);
    [Q,M] = rat(1+a_max);
    varargout{1} = Q;
    varargout{2} = M;
    error('Invalid type.')
delay_index_bar = ceil(delay_index./(1 + a_max))  ;          % Calculating new delays indexes corrected by DSF
delay_bar       = (delay_index_bar - 1)*setup.Ts;              % Calculating new delays corrected by DSF
h(delay_index_bar) = gain_tap;                              % Channel impulse response

I am using these parameters to get the CIR.

setup.Ts = 25e-6;

setup.paths = 6;

setup.delayspread = 0.0246;

gain.attenuation = 20;

delay.mean= 0.001;

doppler.type= 'none';

Bandwidth = 4000;

Since the CIR is a real value, and I need it to pass to baseband, so I did the following

function hl = channel(gain_tap, delay_bar, Bandwidth)
L=20;   %channel taps
hl = zeros(1,L);
for i=1:L
    for n=1:length(delay_bar)
        fl = fl+g;

So my CIR now is in complex and I can do convolution with my OFDM and GFDM signal. My OFDM and GFDM signal is in time domain. However, everytime I simulate I always get a flat BER vs SNR curve, which mean the range of my BER is too small. I guess that it is the channel that had gave me the problem. Can anyone tell me where is the problem and how can I improve it?

  • $\begingroup$ haven't really looked through your code, but: that's an strongly fast-fading channel (fast fading: channel is "coherent", i.e. not much phase and amplitude variation in your symbol duration, and G/OFDM symbols are loooong). You might simply see the effect of the fading induced error floor! $\endgroup$ Oct 11 '19 at 9:07
  • $\begingroup$ also: actually showing the plot might be very helpful here! $\endgroup$ Oct 11 '19 at 9:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.