function f = genWaveForms
f.genSinusoid = @genSinusoid;
f.genSquareWave = @genSquareWave;
f.genChirp = @genChirp;
f.genSineNComponents = @genSineNComponents;
f.amplitudeModulation = @amplitudeModulation;
% the AWG doesn't work if the data are at exactly -1 or +1
scaleFactor = 0.8;
% the AWG requires the waveform length to be a multiple of 8
sampleGranularity = 8;
%%
function out = genSinusoid(Fs, frequency, nCycles)
[frequency,durationSec,t] = checkFreq(Fs, frequency, nCycles);
out = scaleFactor * cos(2*pi*frequency*t);
end
%%
function out = genSquareWave(Fs, frequency, nCycles, dutyCycle)
[frequency,durationSec,t] = checkFreq(Fs, frequency, nCycles);
out = scaleFactor * square(2*pi*frequency*t, dutyCycle);
end
%%
function out = genChirp(Fs, fstart, fend, durationSec)
t = ( 0:(1/Fs):durationSec-(1/Fs) );
tlen = floor(length(t)/sampleGranularity) * sampleGranularity;
t = t(1:tlen);
out = scaleFactor * chirp(t, fstart, t(end), fend, 'linear');
end
%%
function out = genSineNComponents(Fs, frequency, nCycles, amplitudeList, phaseList)
nComponents = length(amplitudeList);
freqList = [1:nComponents] * frequency;
[freqLists,durationSec,t] = checkFreq(Fs, freqList, nCycles);
out = zeros(size(t));
for i=1:length(freqList)
out = out + amplitudeList(i) * cos(2*pi*freqList(i)*t + phaseList(i));
end
out = scaleFactor * out / max(abs(out));
end
%%
function out= amplitudeModulation(Fs, carrierfreq, nCycles)
basebandFreq = Fs/1e4;
freqList = [basebandFreq carrierfreq];
[freqLists,durationSec,t] = checkFreq(Fs, freqList, nCycles);
out = cos(2*pi*freqList(1)*t) .* cos(2*pi*freqList(2)*t);
out = scaleFactor * out / max(abs(out));
end
%% ------------------------------------------------------
function [freqList,durationSec,t] = checkFreq(Fs, freqList, nCycles)
if any(freqList > Fs*0.4),
warning('Frequency near Nyquist limit, clipping the value');
freqList(freqList > Fs*0.4) = Fs*0.4;
end
period = 1/min(freqList);
durationSec = period * nCycles;
t = ( 0:(1/Fs):durationSec-(1/Fs) );
tlen = floor(length(t)/sampleGranularity) * sampleGranularity;
t = t(1:tlen);
end
end