%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Generate Chirp Signal coeficients - 12/03/2018    %
% Arkadi Rafalovich - % Arkadiraf@gmail.com         %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc
clear

%% Set up chirp signal
sampleFreq=1*10^6;
startFreq=100*10^3;
endFreq=20*10^3;

numSamples=5*10^3; % number of samples for chirp signal
sweepTime=numSamples/sampleFreq; %*0.5; % 0.5 for Bidirectional sweep

%generate Chirp signal:
hchirp = dsp.Chirp( ... 
    'Type','Linear',... %Logarithmic
    'SweepDirection','Unidirectional',... %  Unidirectional %Bidirectional
    'InitialFrequency', startFreq,... % startFreq
    'TargetFrequency', endFreq, ...   % endFreq
    'TargetTime',sweepTime,...
    'SweepTime',sweepTime, ...
    'SampleRate', sampleFreq, ...
    'SamplesPerFrame',numSamples);
%generate chirp
chirpData=step(hchirp);
% plot Chirp
figure(1);
plot (chirpData);

figure(2);
spec_window=256;
spec_nfft=256*4;
spec_ovlp=0.5;
spectrogram(chirpData,spec_window,spec_window*spec_ovlp,spec_nfft,sampleFreq,'yaxis');

%% generate trapezoidal wave to wrap chirp signal.
trap_rise=0.1; %rise time in %
trap_step=1/(trap_rise*numSamples);
trap=[trap_step:trap_step:1 , ones(1,numSamples*(1-2*trap_rise)) , 1:-trap_step:trap_step]';
trap=trap*0.7; %scale

figure(3);
plot(trap)

%calculate trapezoidal chirp
chirp_trap=chirpData.*trap;

figure(4);
plot(chirp_trap)

figure(5);
spectrogram(chirp_trap,spec_window,spec_window*spec_ovlp,spec_nfft,sampleFreq,'yaxis');

%% cast data to 12bit (dac resolution)
%figure(101)
%plot(((chirp_trap+1)*4095/2))

chirp_12bit=cast(((chirp_trap+1)*4095/2),'UINT16');

figure(6);
plot(chirp_12bit)

%% generate header file with desire coeficients
% check if file exists, delete if so.
if exist('chirp.h', 'file')==2
  delete('chirp.h');
end

% creat new file
file_id=fopen('chirp.h','w');

% file heading
fprintf(file_id,'/*\r\n');
fprintf(file_id,'Header File Generated by Matlab Script: Chirp_Generator.m \r\n');
fprintf(file_id,'Chirp Design: \r\n');
fprintf(file_id,'Number of Samples: %d \r\n', numSamples);
fprintf(file_id,'Sample Rate: %d kHz \r\n', sampleFreq/1000);
fprintf(file_id,'Start Frequency: %d kHz \r\n', startFreq/1000);
fprintf(file_id,'End Frequency: %d kHz \r\n', endFreq/1000);
fprintf(file_id,'*/\r\n');

%init variable
fprintf(file_id,'#define NUM_SAMPLES %d\r\n', numSamples);
fprintf(file_id,'const uint16_t chirpData[NUM_SAMPLES] = { \r\n');

for i =1:(numSamples-1)
    fprintf(file_id,' %d, ', chirp_12bit(i));
    if (mod(i,10)==0) %insert spaces
        fprintf(file_id,'\r\n');
    end
end
fprintf(file_id,' %d}; \r\n', chirp_12bit(end));
% add last sample

% close file
fclose(file_id);


