Mercurial > hg > ltpda
diff m-toolbox/classes/@sigBuilder/cb_addSignal.m @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/classes/@sigBuilder/cb_addSignal.m Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,295 @@ +% CB_ADDSIGNAL callback fires when the user clicks 'add signal' +% +% M Hewitson +% +% $Id: cb_addSignal.m,v 1.1 2008/10/19 11:42:40 hewitson Exp $ +% +function cb_addSignal(varargin) + + myh = varargin{1}; + mainfig = varargin{end}; + + % sigType handle + sh = findobj(mainfig.handle, 'Tag', 'SignalTypeSelect'); + + % Get selected signal + val = get(sh, 'Value'); + sigs = get(sh, 'String'); + sig = sigs{val}; + + % Build signals + switch lower(sig) + case 'sine wave' + obj = buildSineWave(mainfig); + case 'white noise' + obj = buildWhiteNoise(mainfig); + case 'chirp' + obj = buildChirp(mainfig); + case 'gaussian pulse' + obj = buildGaussPulse(mainfig); + case 'square wave' + obj = buildSquarewave(mainfig); + case 'sawtooth' + obj = buildSawtooth(mainfig); + case 'noise generator' + obj = buildNoiseGen(mainfig); + case 'polynomial' + obj = buildPolynomial(mainfig); + case 'custom' + obj = buildCustom(mainfig); + otherwise + error('### I can''t build signal ''%s'' yet', sig); + end + + % Add this AO + mainfig.signals = [mainfig.signals obj]; + + % Refresh list + refreshSignalList(mainfig); + +end + +%-------------------------------------------------------------------------- +% Build a noisegenerator signal +function obj = buildPolynomial(mainfig) + + [fs, t0, name] = getFsT0(mainfig); + + % get coeffs + h = findobj(mainfig.handle, 'Tag', 'Poly_Coeffs'); + coeffs = eval(['[' get(h, 'String') ']']); + if isempty(name) || strcmpi(name, 'none') + name = sprintf('poly(%s)', mat2str(coeffs)); + end + % get Nsecs + h = findobj(mainfig.handle, 'Tag', 'Poly_Length'); + Nsecs = eval(['[' get(h, 'String') ']']); + % Build + obj = ao(plist('polyval', coeffs, ... + 'nsecs', Nsecs, 'fs', fs, 't0', t0, 'name', name)); +end + +%-------------------------------------------------------------------------- +% Build a noisegenerator signal +function obj = buildNoiseGen(mainfig) + + [fs, t0, name] = getFsT0(mainfig); + + % get f0 + h = findobj(mainfig.handle, 'Tag', 'NoiseGen_Gain'); + g = eval(get(h, 'String')); + % get poles + h = findobj(mainfig.handle, 'Tag', 'NoiseGen_Poles'); + poles = eval(get(h, 'String')); + % get zeroes + h = findobj(mainfig.handle, 'Tag', 'NoiseGen_Zeros'); + zeros = eval(get(h, 'String')); + if isempty(name) || strcmpi(name, 'none') + name = sprintf('noisegen'); + end + % get Nsecs + h = findobj(mainfig.handle, 'Tag', 'NoiseGen_Length'); + Nsecs = eval(['[' get(h, 'String') ']']); + % Build + pzm = pzmodel(g, poles, zeros); + obj = ao(plist('pzmodel', pzm, ... + 'nsecs', Nsecs, 'fs', fs, 't0', t0, 'name', name)); +end + +%-------------------------------------------------------------------------- +% Build a sawtooth signal +function obj = buildSawtooth(mainfig) + + [fs, t0, name] = getFsT0(mainfig); + + % get f0 + h = findobj(mainfig.handle, 'Tag', 'Sawtooth_F'); + f0 = eval(get(h, 'String')); + % get duty + h = findobj(mainfig.handle, 'Tag', 'Sawtooth_Width'); + wd = eval(get(h, 'String')); + if isempty(name) || strcmpi(name, 'none') + name = sprintf('saw(%g)', f0); + end + % get Nsecs + h = findobj(mainfig.handle, 'Tag', 'Sawtooth_Length'); + Nsecs = eval(['[' get(h, 'String') ']']); + % Build + obj = ao(plist('waveform', 'Sawtooth', ... + 'f0', f0, 'width', wd, ... + 'nsecs', Nsecs, 'fs', fs, 't0', t0, 'name', name)); +end + +%-------------------------------------------------------------------------- +% Build a square wave signal +function obj = buildSquarewave(mainfig) + + [fs, t0, name] = getFsT0(mainfig); + + % get f0 + h = findobj(mainfig.handle, 'Tag', 'SquareWave_F'); + f0 = eval(get(h, 'String')); + % get duty + h = findobj(mainfig.handle, 'Tag', 'SquareWave_Duty'); + duty = eval(get(h, 'String')); + if isempty(name) || strcmpi(name, 'none') + name = sprintf('square(%g)', f0); + end + % get Nsecs + h = findobj(mainfig.handle, 'Tag', 'SquareWave_Length'); + Nsecs = eval(['[' get(h, 'String') ']']); + % Build + obj = ao(plist('waveform', 'Square wave', ... + 'f0', f0, 'duty', duty, ... + 'nsecs', Nsecs, 'fs', fs, 't0', t0, 'name', name)); +end + +%-------------------------------------------------------------------------- +% Build a gauss pulse signal +function obj = buildGaussPulse(mainfig) + + [fs, t0, name] = getFsT0(mainfig); + + % get f0 + h = findobj(mainfig.handle, 'Tag', 'GPulse_F0'); + f0 = eval(get(h, 'String')); + % get BW + h = findobj(mainfig.handle, 'Tag', 'GPulse_BW'); + bw = eval(get(h, 'String')); + if isempty(name) || strcmpi(name, 'none') + name = sprintf('gpulse(%g)', f0); + end + % get Nsecs + h = findobj(mainfig.handle, 'Tag', 'GPulse_Length'); + Nsecs = eval(['[' get(h, 'String') ']']); + % Build + obj = ao(plist('waveform', 'Gaussian pulse', ... + 'f0', f0, 'bw', bw, ... + 'nsecs', Nsecs, 'fs', fs, 't0', t0, 'name', name)); +end + + +%-------------------------------------------------------------------------- +% Build a chirp signal +function obj = buildChirp(mainfig) + + [fs, t0, name] = getFsT0(mainfig); + + % get f0 + h = findobj(mainfig.handle, 'Tag', 'Chirp_F0'); + f0 = eval(get(h, 'String')); + % get f1 + h = findobj(mainfig.handle, 'Tag', 'Chirp_F1'); + f1 = eval(get(h, 'String')); + if isempty(name) || strcmpi(name, 'none') + name = sprintf('chirp(%g->%g)', f0,f1); + end + % get T1 + h = findobj(mainfig.handle, 'Tag', 'Chirp_T1'); + t1 = eval(get(h, 'String')); + % get Nsecs + h = findobj(mainfig.handle, 'Tag', 'Chirp_Length'); + Nsecs = eval(['[' get(h, 'String') ']']); + % Build + obj = ao(plist('waveform', 'chirp', ... + 'f0', f0, 'f1', f1, 't1', t1, ... + 'nsecs', Nsecs, 'fs', fs, 't0', t0, 'name', name)); +end + + +%-------------------------------------------------------------------------- +% Build a custom signal +function obj = buildCustom(mainfig) + + [fs, t0, name] = getFsT0(mainfig); + + % get type + h = findobj(mainfig.handle, 'Tag', 'Custom_Fcn'); + fcn = get(h, 'String'); + if isempty(name) || strcmpi(name, 'none') + name = fcn; + end + % get Nsecs + h = findobj(mainfig.handle, 'Tag', 'Custom_Length'); + Nsecs = eval(['[' get(h, 'String') ']']); + % Build + obj = ao(plist('tsfcn', fcn, ... + 'nsecs', Nsecs, 'fs', fs, 't0', t0, 'name', name)); +end + + +%-------------------------------------------------------------------------- +% Build a white noise +function obj = buildWhiteNoise(mainfig) + + [fs, t0, name] = getFsT0(mainfig); + + % get type + h = findobj(mainfig.handle, 'Tag', 'WhiteNoise_Type'); + types = get(h, 'String'); + type = types{get(h, 'Value')}; + if strcmpi(name, 'none') || isempty(name) + name = type; + end + % get Sigma + h = findobj(mainfig.handle, 'Tag', 'WhiteNoise_Sigma'); + sigma = eval(['[' get(h, 'String') ']']); + % get Nsecs + h = findobj(mainfig.handle, 'Tag', 'WhiteNoise_Length'); + Nsecs = eval(['[' get(h, 'String') ']']); + % Build + obj = ao(plist('waveform', 'noise', ... + 'type', type, 'sigma', sigma, ... + 'nsecs', Nsecs, 'fs', fs, 't0', t0, 'name', name)); +end + +%-------------------------------------------------------------------------- +% Build a sine wave +function obj = buildSineWave(mainfig) + + [fs, t0, name] = getFsT0(mainfig); + + % get amplitudes + h = findobj(mainfig.handle, 'Tag', 'SineWave_Amplitudes'); + amps = eval(['[' get(h, 'String') ']']); + % get frequencies + h = findobj(mainfig.handle, 'Tag', 'SineWave_Frequencies'); + freqs = eval(['[' get(h, 'String') ']']); + % get phases + h = findobj(mainfig.handle, 'Tag', 'SineWave_Phases'); + phases = eval(['[' get(h, 'String') ']']); + % get Nsecs + h = findobj(mainfig.handle, 'Tag', 'SineWave_Lengths'); + Nsecs = eval(['[' get(h, 'String') ']']); + % get Toffs + h = findobj(mainfig.handle, 'Tag', 'SineWave_Starts'); + Toffs = eval(['[' get(h, 'String') ']']); + if strcmpi(name, 'none') || isempty(name) + name = 'sin('; + name = [name sprintf('%.2g,', freqs)]; + name = [name(1:end-1) ')']; + end + + % Build + obj = ao(plist('waveform', 'sine wave', ... + 'A', amps, 'f', freqs, 'phi', phases*pi/180, ... + 'nsecs', Nsecs, 'toff', Toffs, 'fs', fs, 't0', t0, 'name', name)); + +end + +%-------------------------------------------------------------------------- +% Retrieve the sample rate and start time and name +% +function [fs, t0, name] = getFsT0(mainfig) + % name + h = findobj(mainfig.handle, 'Tag', 'NameEdit'); + name = get(h, 'String'); + % T0 + h = findobj(mainfig.handle, 'Tag', 'T0edit'); + t0 = time(get(h, 'String')); + % FS + h = findobj(mainfig.handle, 'Tag', 'SampleRateEdit'); + fs = eval(get(h, 'String')); +end + +