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
+
+