Un-comment and repair TRRANDOM sources.
Also adds new parameters to AM sources for ngspice-43. Also fixes a bug in the spice parameter parser (which would puke on any parameter name starting with one of the flag parameter strings). Also fixes a bug where the skipped source parameters would get set to "0" instead of their default values. Fixes https://gitlab.com/kicad/code/kicad/-/issues/16393
This commit is contained in:
parent
1649b7dd56
commit
7c5eaed69e
|
@ -196,9 +196,9 @@ SIM_MODEL::INFO SIM_MODEL::TypeInfo( TYPE aType )
|
||||||
case TYPE::V_PINKNOISE: return { DEVICE_T::V, "PINKNOISE", "Pink noise (1/f)" };
|
case TYPE::V_PINKNOISE: return { DEVICE_T::V, "PINKNOISE", "Pink noise (1/f)" };
|
||||||
case TYPE::V_BURSTNOISE: return { DEVICE_T::V, "BURSTNOISE", "Burst noise" };
|
case TYPE::V_BURSTNOISE: return { DEVICE_T::V, "BURSTNOISE", "Burst noise" };
|
||||||
case TYPE::V_RANDUNIFORM: return { DEVICE_T::V, "RANDUNIFORM", "Random uniform" };
|
case TYPE::V_RANDUNIFORM: return { DEVICE_T::V, "RANDUNIFORM", "Random uniform" };
|
||||||
case TYPE::V_RANDNORMAL: return { DEVICE_T::V, "RANDNORMAL", "Random normal" };
|
case TYPE::V_RANDGAUSSIAN: return { DEVICE_T::V, "RANDGAUSSIAN", "Random Gaussian" };
|
||||||
case TYPE::V_RANDEXP: return { DEVICE_T::V, "RANDEXP", "Random exponential" };
|
case TYPE::V_RANDEXP: return { DEVICE_T::V, "RANDEXP", "Random exponential" };
|
||||||
//case TYPE::V_RANDPOISSON: return { DEVICE_T::V, "RANDPOISSON", "Random Poisson" };
|
case TYPE::V_RANDPOISSON: return { DEVICE_T::V, "RANDPOISSON", "Random Poisson" };
|
||||||
case TYPE::V_BEHAVIORAL: return { DEVICE_T::V, "=", "Behavioral" };
|
case TYPE::V_BEHAVIORAL: return { DEVICE_T::V, "=", "Behavioral" };
|
||||||
|
|
||||||
case TYPE::I: return { DEVICE_T::I, "DC", "DC", };
|
case TYPE::I: return { DEVICE_T::I, "DC", "DC", };
|
||||||
|
@ -214,9 +214,9 @@ SIM_MODEL::INFO SIM_MODEL::TypeInfo( TYPE aType )
|
||||||
case TYPE::I_PINKNOISE: return { DEVICE_T::I, "PINKNOISE", "Pink noise (1/f)" };
|
case TYPE::I_PINKNOISE: return { DEVICE_T::I, "PINKNOISE", "Pink noise (1/f)" };
|
||||||
case TYPE::I_BURSTNOISE: return { DEVICE_T::I, "BURSTNOISE", "Burst noise" };
|
case TYPE::I_BURSTNOISE: return { DEVICE_T::I, "BURSTNOISE", "Burst noise" };
|
||||||
case TYPE::I_RANDUNIFORM: return { DEVICE_T::I, "RANDUNIFORM", "Random uniform" };
|
case TYPE::I_RANDUNIFORM: return { DEVICE_T::I, "RANDUNIFORM", "Random uniform" };
|
||||||
case TYPE::I_RANDNORMAL: return { DEVICE_T::I, "RANDNORMAL", "Random normal" };
|
case TYPE::I_RANDGAUSSIAN: return { DEVICE_T::I, "RANDGAUSSIAN", "Random Gaussian" };
|
||||||
case TYPE::I_RANDEXP: return { DEVICE_T::I, "RANDEXP", "Random exponential" };
|
case TYPE::I_RANDEXP: return { DEVICE_T::I, "RANDEXP", "Random exponential" };
|
||||||
//case TYPE::I_RANDPOISSON: return { DEVICE_T::I, "RANDPOISSON", "Random Poisson" };
|
case TYPE::I_RANDPOISSON: return { DEVICE_T::I, "RANDPOISSON", "Random Poisson" };
|
||||||
case TYPE::I_BEHAVIORAL: return { DEVICE_T::I, "=", "Behavioral" };
|
case TYPE::I_BEHAVIORAL: return { DEVICE_T::I, "=", "Behavioral" };
|
||||||
|
|
||||||
case TYPE::SUBCKT: return { DEVICE_T::SUBCKT, "", "Subcircuit" };
|
case TYPE::SUBCKT: return { DEVICE_T::SUBCKT, "", "Subcircuit" };
|
||||||
|
@ -333,9 +333,9 @@ SIM_MODEL::SPICE_INFO SIM_MODEL::SpiceInfo( TYPE aType )
|
||||||
case TYPE::V_PINKNOISE: return { "V", "", "TRNOISE" };
|
case TYPE::V_PINKNOISE: return { "V", "", "TRNOISE" };
|
||||||
case TYPE::V_BURSTNOISE: return { "V", "", "TRNOISE" };
|
case TYPE::V_BURSTNOISE: return { "V", "", "TRNOISE" };
|
||||||
case TYPE::V_RANDUNIFORM: return { "V", "", "TRRANDOM" };
|
case TYPE::V_RANDUNIFORM: return { "V", "", "TRRANDOM" };
|
||||||
case TYPE::V_RANDNORMAL: return { "V", "", "TRRANDOM" };
|
case TYPE::V_RANDGAUSSIAN: return { "V", "", "TRRANDOM" };
|
||||||
case TYPE::V_RANDEXP: return { "V", "", "TRRANDOM" };
|
case TYPE::V_RANDEXP: return { "V", "", "TRRANDOM" };
|
||||||
//case TYPE::V_RANDPOISSON: return { "V", "", "TRRANDOM" };
|
case TYPE::V_RANDPOISSON: return { "V", "", "TRRANDOM" };
|
||||||
case TYPE::V_BEHAVIORAL: return { "B" };
|
case TYPE::V_BEHAVIORAL: return { "B" };
|
||||||
|
|
||||||
case TYPE::I: return { "I", "", "DC" };
|
case TYPE::I: return { "I", "", "DC" };
|
||||||
|
@ -351,9 +351,9 @@ SIM_MODEL::SPICE_INFO SIM_MODEL::SpiceInfo( TYPE aType )
|
||||||
case TYPE::I_PINKNOISE: return { "I", "", "TRNOISE" };
|
case TYPE::I_PINKNOISE: return { "I", "", "TRNOISE" };
|
||||||
case TYPE::I_BURSTNOISE: return { "I", "", "TRNOISE" };
|
case TYPE::I_BURSTNOISE: return { "I", "", "TRNOISE" };
|
||||||
case TYPE::I_RANDUNIFORM: return { "I", "", "TRRANDOM" };
|
case TYPE::I_RANDUNIFORM: return { "I", "", "TRRANDOM" };
|
||||||
case TYPE::I_RANDNORMAL: return { "I", "", "TRRANDOM" };
|
case TYPE::I_RANDGAUSSIAN: return { "I", "", "TRRANDOM" };
|
||||||
case TYPE::I_RANDEXP: return { "I", "", "TRRANDOM" };
|
case TYPE::I_RANDEXP: return { "I", "", "TRRANDOM" };
|
||||||
//case TYPE::I_RANDPOISSON: return { "I", "", "TRRANDOM" };
|
case TYPE::I_RANDPOISSON: return { "I", "", "TRRANDOM" };
|
||||||
case TYPE::I_BEHAVIORAL: return { "B" };
|
case TYPE::I_BEHAVIORAL: return { "B" };
|
||||||
|
|
||||||
case TYPE::SUBCKT: return { "X" };
|
case TYPE::SUBCKT: return { "X" };
|
||||||
|
@ -931,12 +931,12 @@ std::unique_ptr<SIM_MODEL> SIM_MODEL::Create( TYPE aType )
|
||||||
case TYPE::I_BURSTNOISE:
|
case TYPE::I_BURSTNOISE:
|
||||||
case TYPE::V_RANDUNIFORM:
|
case TYPE::V_RANDUNIFORM:
|
||||||
case TYPE::I_RANDUNIFORM:
|
case TYPE::I_RANDUNIFORM:
|
||||||
case TYPE::V_RANDNORMAL:
|
case TYPE::V_RANDGAUSSIAN:
|
||||||
case TYPE::I_RANDNORMAL:
|
case TYPE::I_RANDGAUSSIAN:
|
||||||
case TYPE::V_RANDEXP:
|
case TYPE::V_RANDEXP:
|
||||||
case TYPE::I_RANDEXP:
|
case TYPE::I_RANDEXP:
|
||||||
//case TYPE::V_RANDPOISSON:
|
case TYPE::V_RANDPOISSON:
|
||||||
//case TYPE::I_RANDPOISSON:
|
case TYPE::I_RANDPOISSON:
|
||||||
return std::make_unique<SIM_MODEL_SOURCE>( aType );
|
return std::make_unique<SIM_MODEL_SOURCE>( aType );
|
||||||
|
|
||||||
case TYPE::SUBCKT:
|
case TYPE::SUBCKT:
|
||||||
|
@ -1475,27 +1475,64 @@ template bool SIM_MODEL::InferSimModel<LIB_SYMBOL, LIB_FIELD>( LIB_SYMBOL& aSymb
|
||||||
template <typename T_symbol, typename T_field>
|
template <typename T_symbol, typename T_field>
|
||||||
void SIM_MODEL::MigrateSimModel( T_symbol& aSymbol, const PROJECT* aProject )
|
void SIM_MODEL::MigrateSimModel( T_symbol& aSymbol, const PROJECT* aProject )
|
||||||
{
|
{
|
||||||
if( aSymbol.FindField( SIM_DEVICE_TYPE_FIELD )
|
T_field* existing_deviceTypeField = aSymbol.FindField( SIM_DEVICE_TYPE_FIELD );
|
||||||
|| aSymbol.FindField( SIM_TYPE_FIELD )
|
T_field* existing_typeField = aSymbol.FindField( SIM_TYPE_FIELD );
|
||||||
|| aSymbol.FindField( SIM_PINS_FIELD )
|
T_field* existing_pinsField = aSymbol.FindField( SIM_PINS_FIELD );
|
||||||
|| aSymbol.FindField( SIM_PARAMS_FIELD ) )
|
T_field* existing_paramsField = aSymbol.FindField( SIM_PARAMS_FIELD );
|
||||||
|
|
||||||
|
wxString existing_type;
|
||||||
|
|
||||||
|
if( existing_typeField )
|
||||||
|
existing_type = existing_typeField->GetShownText( false ).Upper();
|
||||||
|
|
||||||
|
if( existing_deviceTypeField
|
||||||
|
|| existing_typeField
|
||||||
|
|| existing_pinsField
|
||||||
|
|| existing_paramsField )
|
||||||
{
|
{
|
||||||
// Has a V7 model field.
|
// Has a current (V7+) model field.
|
||||||
|
|
||||||
// Up until 7.0RC2 we used '+' and '-' for potentiometer pins, which doesn't match
|
// Up until 7.0RC2 we used '+' and '-' for potentiometer pins, which doesn't match
|
||||||
// SPICE. Here we remap them to 'r0' and 'r1'.
|
// SPICE. Here we remap them to 'r0' and 'r1'.
|
||||||
if( T_field* deviceType = aSymbol.FindField( SIM_TYPE_FIELD ) )
|
if( existing_type == wxS( "POT" ) )
|
||||||
{
|
{
|
||||||
if( deviceType->GetShownText( false ).Lower() == wxS( "pot" ) )
|
if( existing_pinsField )
|
||||||
{
|
{
|
||||||
if( T_field* pins = aSymbol.FindField( SIM_PINS_FIELD ) )
|
wxString pinMap = existing_pinsField->GetText();
|
||||||
{
|
|
||||||
wxString pinMap = pins->GetText();
|
|
||||||
pinMap.Replace( wxS( "=+" ), wxS( "=r1" ) );
|
pinMap.Replace( wxS( "=+" ), wxS( "=r1" ) );
|
||||||
pinMap.Replace( wxS( "=-" ), wxS( "=r0" ) );
|
pinMap.Replace( wxS( "=-" ), wxS( "=r0" ) );
|
||||||
pins->SetText( pinMap );
|
existing_pinsField->SetText( pinMap );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Up until 8.0RC1 random voltage/current sources were a bit of a mess.
|
||||||
|
if( existing_type.StartsWith( wxS( "RAND" ) ) )
|
||||||
|
{
|
||||||
|
// Re-fetch value without resolving references. If it's an indirect value then we
|
||||||
|
// can't migrate it.
|
||||||
|
existing_type = existing_typeField->GetText().Upper();
|
||||||
|
|
||||||
|
if( existing_type.Replace( wxS( "NORMAL" ), wxS( "GAUSSIAN" ) ) )
|
||||||
|
existing_typeField->SetText( existing_type );
|
||||||
|
|
||||||
|
if( existing_paramsField )
|
||||||
|
{
|
||||||
|
wxString params = existing_paramsField->GetText().Lower();
|
||||||
|
size_t count = 0;
|
||||||
|
|
||||||
|
// We used to support 'min' and 'max' instead of 'range' and 'offset', but we
|
||||||
|
// wrote all 4 to the netlist which would cause ngspice to barf, so no one has
|
||||||
|
// working documents with min and max specified. Just delete them if they're
|
||||||
|
// uninitialized.
|
||||||
|
count += params.Replace( wxS( "min=0 " ), wxEmptyString );
|
||||||
|
count += params.Replace( wxS( "max=0 " ), wxEmptyString );
|
||||||
|
|
||||||
|
// We used to use 'dt', but the correct ngspice name is 'ts'.
|
||||||
|
count += params.Replace( wxS( "dt=" ), wxS( "ts=" ) );
|
||||||
|
|
||||||
|
if( count )
|
||||||
|
existing_paramsField->SetText( params );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -248,9 +248,9 @@ public:
|
||||||
V_PINKNOISE,
|
V_PINKNOISE,
|
||||||
V_BURSTNOISE,
|
V_BURSTNOISE,
|
||||||
V_RANDUNIFORM,
|
V_RANDUNIFORM,
|
||||||
V_RANDNORMAL,
|
V_RANDGAUSSIAN,
|
||||||
V_RANDEXP,
|
V_RANDEXP,
|
||||||
//V_RANDPOISSON,
|
V_RANDPOISSON,
|
||||||
V_BEHAVIORAL,
|
V_BEHAVIORAL,
|
||||||
|
|
||||||
I,
|
I,
|
||||||
|
@ -266,9 +266,9 @@ public:
|
||||||
I_PINKNOISE,
|
I_PINKNOISE,
|
||||||
I_BURSTNOISE,
|
I_BURSTNOISE,
|
||||||
I_RANDUNIFORM,
|
I_RANDUNIFORM,
|
||||||
I_RANDNORMAL,
|
I_RANDGAUSSIAN,
|
||||||
I_RANDEXP,
|
I_RANDEXP,
|
||||||
//I_RANDPOISSON,
|
I_RANDPOISSON,
|
||||||
I_BEHAVIORAL,
|
I_BEHAVIORAL,
|
||||||
|
|
||||||
SUBCKT,
|
SUBCKT,
|
||||||
|
|
|
@ -66,13 +66,13 @@ namespace SIM_MODEL_SERIALIZER_GRAMMAR
|
||||||
TAO_PEGTL_ISTRING( "thermal" ), // VDMOS
|
TAO_PEGTL_ISTRING( "thermal" ), // VDMOS
|
||||||
TAO_PEGTL_ISTRING( "xpart" )> {}; // BSIM1
|
TAO_PEGTL_ISTRING( "xpart" )> {}; // BSIM1
|
||||||
|
|
||||||
struct fieldParamValuePair : sor<flagParam,
|
struct fieldParamValuePair : sor<if_must<param,
|
||||||
if_must<param,
|
|
||||||
opt<sep>,
|
opt<sep>,
|
||||||
one<'='>,
|
one<'='>,
|
||||||
opt<sep>,
|
opt<sep>,
|
||||||
sor<quotedString,
|
sor<quotedString,
|
||||||
unquotedString>>> {};
|
unquotedString>>,
|
||||||
|
flagParam> {};
|
||||||
struct fieldParamValuePairs : list<fieldParamValuePair, sep> {};
|
struct fieldParamValuePairs : list<fieldParamValuePair, sep> {};
|
||||||
struct fieldParamValuePairsGrammar : must<opt<sep>,
|
struct fieldParamValuePairsGrammar : must<opt<sep>,
|
||||||
opt<fieldParamValuePairs>,
|
opt<fieldParamValuePairs>,
|
||||||
|
|
|
@ -112,8 +112,6 @@ std::string SPICE_GENERATOR_SOURCE::ItemLine( const SPICE_ITEM& aItem ) const
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: dt should be tstep by default.
|
|
||||||
|
|
||||||
case SIM_MODEL::TYPE::V_WHITENOISE:
|
case SIM_MODEL::TYPE::V_WHITENOISE:
|
||||||
case SIM_MODEL::TYPE::I_WHITENOISE:
|
case SIM_MODEL::TYPE::I_WHITENOISE:
|
||||||
args.append( getParamValueString( "rms", "0" ) + " " );
|
args.append( getParamValueString( "rms", "0" ) + " " );
|
||||||
|
@ -142,56 +140,39 @@ std::string SPICE_GENERATOR_SOURCE::ItemLine( const SPICE_ITEM& aItem ) const
|
||||||
case SIM_MODEL::TYPE::I_RANDUNIFORM:
|
case SIM_MODEL::TYPE::I_RANDUNIFORM:
|
||||||
{
|
{
|
||||||
args.append( "1 " );
|
args.append( "1 " );
|
||||||
args.append( getParamValueString( "dt", "0" ) + " " );
|
args.append( getParamValueString( "ts", "0" ) + " " );
|
||||||
args.append( getParamValueString( "td", "0" ) + " " );
|
args.append( getParamValueString( "td", "0" ) + " " );
|
||||||
std::string min = getParamValueString( "min", "0" );
|
args.append( getParamValueString( "range", "1" ) + " " );
|
||||||
std::string max = getParamValueString( "max", "0" );
|
args.append( getParamValueString( "offset", "0" ) + " " );
|
||||||
|
|
||||||
args.append( min + " " );
|
|
||||||
args.append( max + " " );
|
|
||||||
|
|
||||||
double minVal = std::stod( min );
|
|
||||||
double maxVal = std::stod( max );
|
|
||||||
|
|
||||||
double rangeVal = maxVal - minVal;
|
|
||||||
double offsetVal = ( maxVal + minVal ) / 2;
|
|
||||||
|
|
||||||
std::string range = std::to_string( rangeVal );
|
|
||||||
std::string offset = std::to_string( offsetVal );
|
|
||||||
|
|
||||||
args.append( range + " " );
|
|
||||||
args.append( offset + " " );
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case SIM_MODEL::TYPE::V_RANDNORMAL:
|
case SIM_MODEL::TYPE::V_RANDGAUSSIAN:
|
||||||
case SIM_MODEL::TYPE::I_RANDNORMAL:
|
case SIM_MODEL::TYPE::I_RANDGAUSSIAN:
|
||||||
args.append( "2 " );
|
args.append( "2 " );
|
||||||
args.append( getParamValueString( "dt", "0" ) + " " );
|
args.append( getParamValueString( "ts", "0" ) + " " );
|
||||||
args.append( getParamValueString( "td", "0" ) + " " );
|
args.append( getParamValueString( "td", "0" ) + " " );
|
||||||
args.append( getParamValueString( "stddev", "0" ) + " " );
|
args.append( getParamValueString( "stddev", "1" ) + " " );
|
||||||
args.append( getParamValueString( "mean", "0" ) + " " );
|
args.append( getParamValueString( "mean", "0" ) + " " );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SIM_MODEL::TYPE::V_RANDEXP:
|
case SIM_MODEL::TYPE::V_RANDEXP:
|
||||||
case SIM_MODEL::TYPE::I_RANDEXP:
|
case SIM_MODEL::TYPE::I_RANDEXP:
|
||||||
args.append( "3 " );
|
args.append( "3 " );
|
||||||
args.append( getParamValueString( "dt", "0" ) + " " );
|
args.append( getParamValueString( "ts", "0" ) + " " );
|
||||||
args.append( getParamValueString( "td", "0" ) + " " );
|
args.append( getParamValueString( "td", "0" ) + " " );
|
||||||
args.append( getParamValueString( "mean", "0" ) + " " );
|
args.append( getParamValueString( "mean", "1" ) + " " );
|
||||||
args.append( getParamValueString( "offset", "0" ) + " " );
|
args.append( getParamValueString( "offset", "0" ) + " " );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/*
|
|
||||||
case SIM_MODEL::TYPE::V_RANDPOISSON:
|
case SIM_MODEL::TYPE::V_RANDPOISSON:
|
||||||
case SIM_MODEL::TYPE::I_RANDPOISSON:
|
case SIM_MODEL::TYPE::I_RANDPOISSON:
|
||||||
args.append( "4 " );
|
args.append( "4 " );
|
||||||
args.append( getParamValueString( "dt", "0" ) + " " );
|
args.append( getParamValueString( "ts", "0" ) + " " );
|
||||||
args.append( getParamValueString( "td", "0" ) + " " );
|
args.append( getParamValueString( "td", "0" ) + " " );
|
||||||
args.append( getParamValueString( "lambda", "0" ) + " " );
|
args.append( getParamValueString( "lambda", "1" ) + " " );
|
||||||
args.append( getParamValueString( "offset", "0" ) + " " );
|
args.append( getParamValueString( "offset", "0" ) + " " );
|
||||||
break;
|
break;
|
||||||
*/
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
for( const SIM_MODEL::PARAM& param : m_model.GetParams() )
|
for( const SIM_MODEL::PARAM& param : m_model.GetParams() )
|
||||||
|
@ -300,9 +281,7 @@ void SIM_MODEL_SOURCE::doSetParamValue( int aParamIndex, const std::string& aVal
|
||||||
// them out automatically. If a value is nulled, delete everything after it.
|
// them out automatically. If a value is nulled, delete everything after it.
|
||||||
if( aValue.empty() )
|
if( aValue.empty() )
|
||||||
{
|
{
|
||||||
for( int paramIndex = static_cast<int>( aParamIndex );
|
for( int paramIndex = aParamIndex; paramIndex < GetParamCount(); ++paramIndex )
|
||||||
paramIndex < GetParamCount();
|
|
||||||
++paramIndex )
|
|
||||||
{
|
{
|
||||||
m_params.at( aParamIndex ).value = "";
|
m_params.at( aParamIndex ).value = "";
|
||||||
}
|
}
|
||||||
|
@ -313,8 +292,10 @@ void SIM_MODEL_SOURCE::doSetParamValue( int aParamIndex, const std::string& aVal
|
||||||
{
|
{
|
||||||
if( GetParam( paramIndex ).value == "" )
|
if( GetParam( paramIndex ).value == "" )
|
||||||
{
|
{
|
||||||
m_params.at( aParamIndex ).value = "0";
|
std::string defaultValue = m_params.at( aParamIndex ).info.defaultValue;
|
||||||
SIM_MODEL::SetParamValue( paramIndex, "0" );
|
|
||||||
|
m_params.at( aParamIndex ).value = defaultValue;
|
||||||
|
SIM_MODEL::SetParamValue( paramIndex, defaultValue );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -400,12 +381,12 @@ const std::vector<SIM_MODEL::PARAM::INFO>& SIM_MODEL_SOURCE::makeParamInfos( TYP
|
||||||
case TYPE::I_BURSTNOISE: return iburstnoise;
|
case TYPE::I_BURSTNOISE: return iburstnoise;
|
||||||
case TYPE::V_RANDUNIFORM: return vrandomuniform;
|
case TYPE::V_RANDUNIFORM: return vrandomuniform;
|
||||||
case TYPE::I_RANDUNIFORM: return irandomuniform;
|
case TYPE::I_RANDUNIFORM: return irandomuniform;
|
||||||
case TYPE::V_RANDNORMAL: return vrandomnormal;
|
case TYPE::V_RANDGAUSSIAN: return vrandomnormal;
|
||||||
case TYPE::I_RANDNORMAL: return irandomnormal;
|
case TYPE::I_RANDGAUSSIAN: return irandomnormal;
|
||||||
case TYPE::V_RANDEXP: return vrandomexp;
|
case TYPE::V_RANDEXP: return vrandomexp;
|
||||||
case TYPE::I_RANDEXP: return irandomexp;
|
case TYPE::I_RANDEXP: return irandomexp;
|
||||||
//case TYPE::V_RANDPOISSON: return vrandompoisson;
|
case TYPE::V_RANDPOISSON: return vrandompoisson;
|
||||||
//case TYPE::I_RANDPOISSON: return irandompoisson;
|
case TYPE::I_RANDPOISSON: return irandompoisson;
|
||||||
default:
|
default:
|
||||||
wxFAIL_MSG( "Unhandled SIM_MODEL type in SIM_MODEL_SOURCE" );
|
wxFAIL_MSG( "Unhandled SIM_MODEL type in SIM_MODEL_SOURCE" );
|
||||||
static std::vector<SIM_MODEL::PARAM::INFO> empty;
|
static std::vector<SIM_MODEL::PARAM::INFO> empty;
|
||||||
|
@ -660,14 +641,48 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeAMParamInfos( const st
|
||||||
paramInfo.description = "Modulating frequency";
|
paramInfo.description = "Modulating frequency";
|
||||||
paramInfos.push_back( paramInfo );
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
|
paramInfo.name = "md";
|
||||||
|
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
||||||
|
paramInfo.unit = "";
|
||||||
|
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
||||||
|
paramInfo.defaultValue = "1.0";
|
||||||
|
paramInfo.description = "Modulation depth";
|
||||||
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
paramInfo.name = "fc";
|
paramInfo.name = "fc";
|
||||||
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
||||||
paramInfo.unit = "Hz";
|
paramInfo.unit = "Hz";
|
||||||
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
||||||
paramInfo.defaultValue = "";
|
paramInfo.defaultValue = "1/tstop";
|
||||||
paramInfo.description = "Carrier frequency";
|
paramInfo.description = "Carrier frequency";
|
||||||
paramInfos.push_back( paramInfo );
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
|
paramInfo.name = "td";
|
||||||
|
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
||||||
|
paramInfo.unit = "s";
|
||||||
|
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
||||||
|
paramInfo.defaultValue = "0";
|
||||||
|
paramInfo.description = "Delay";
|
||||||
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
|
paramInfo.name = "phases";
|
||||||
|
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
||||||
|
paramInfo.unit = "°";
|
||||||
|
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
||||||
|
paramInfo.defaultValue = "0";
|
||||||
|
paramInfo.description = "Modulation signal phase";
|
||||||
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
|
paramInfo.name = "phasec";
|
||||||
|
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
||||||
|
paramInfo.unit = "°";
|
||||||
|
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
||||||
|
paramInfo.defaultValue = "0";
|
||||||
|
paramInfo.description = "Carrier signal phase";
|
||||||
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
|
appendAcParamInfos( paramInfos, aUnit );
|
||||||
|
appendSpParamInfos( paramInfos, aUnit );
|
||||||
return paramInfos;
|
return paramInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -734,6 +749,8 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeSFFMParamInfos( const
|
||||||
paramInfo.description = "Signal phase";
|
paramInfo.description = "Signal phase";
|
||||||
paramInfos.push_back( paramInfo );
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
|
appendAcParamInfos( paramInfos, aUnit );
|
||||||
|
appendSpParamInfos( paramInfos, aUnit );
|
||||||
return paramInfos;
|
return paramInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -957,28 +974,12 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeRandomUniformParamInfo
|
||||||
std::vector<PARAM::INFO> paramInfos;
|
std::vector<PARAM::INFO> paramInfos;
|
||||||
PARAM::INFO paramInfo;
|
PARAM::INFO paramInfo;
|
||||||
|
|
||||||
paramInfo.name = "min";
|
paramInfo.name = "ts";
|
||||||
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
|
||||||
paramInfo.unit = aUnit;
|
|
||||||
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
|
||||||
paramInfo.defaultValue = "-0.5";
|
|
||||||
paramInfo.description = "Min. value";
|
|
||||||
paramInfos.push_back( paramInfo );
|
|
||||||
|
|
||||||
paramInfo.name = "max";
|
|
||||||
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
|
||||||
paramInfo.unit = aUnit;
|
|
||||||
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
|
||||||
paramInfo.defaultValue = "0.5";
|
|
||||||
paramInfo.description = "Max. value";
|
|
||||||
paramInfos.push_back( paramInfo );
|
|
||||||
|
|
||||||
paramInfo.name = "dt";
|
|
||||||
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
||||||
paramInfo.unit = "s";
|
paramInfo.unit = "s";
|
||||||
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
||||||
paramInfo.defaultValue = "0";
|
paramInfo.defaultValue = "";
|
||||||
paramInfo.description = "Time step";
|
paramInfo.description = "Individual voltage duration";
|
||||||
paramInfos.push_back( paramInfo );
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
paramInfo.name = "td";
|
paramInfo.name = "td";
|
||||||
|
@ -989,6 +990,22 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeRandomUniformParamInfo
|
||||||
paramInfo.description = "Delay";
|
paramInfo.description = "Delay";
|
||||||
paramInfos.push_back( paramInfo );
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
|
paramInfo.name = "range";
|
||||||
|
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
||||||
|
paramInfo.unit = aUnit;
|
||||||
|
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
||||||
|
paramInfo.defaultValue = "1";
|
||||||
|
paramInfo.description = "Range";
|
||||||
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
|
paramInfo.name = "offset";
|
||||||
|
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
||||||
|
paramInfo.unit = aUnit;
|
||||||
|
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
||||||
|
paramInfo.defaultValue = "0";
|
||||||
|
paramInfo.description = "Offset";
|
||||||
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
appendAcParamInfos( paramInfos, aUnit );
|
appendAcParamInfos( paramInfos, aUnit );
|
||||||
appendSpParamInfos( paramInfos, aUnit );
|
appendSpParamInfos( paramInfos, aUnit );
|
||||||
return paramInfos;
|
return paramInfos;
|
||||||
|
@ -1001,12 +1018,20 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeRandomNormalParamInfos
|
||||||
std::vector<PARAM::INFO> paramInfos;
|
std::vector<PARAM::INFO> paramInfos;
|
||||||
PARAM::INFO paramInfo;
|
PARAM::INFO paramInfo;
|
||||||
|
|
||||||
paramInfo.name = "mean";
|
paramInfo.name = "ts";
|
||||||
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
||||||
paramInfo.unit = aUnit;
|
paramInfo.unit = "s";
|
||||||
|
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
||||||
|
paramInfo.defaultValue = "";
|
||||||
|
paramInfo.description = "Individual voltage duration";
|
||||||
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
|
paramInfo.name = "td";
|
||||||
|
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
||||||
|
paramInfo.unit = "s";
|
||||||
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
||||||
paramInfo.defaultValue = "0";
|
paramInfo.defaultValue = "0";
|
||||||
paramInfo.description = "Mean";
|
paramInfo.description = "Delay";
|
||||||
paramInfos.push_back( paramInfo );
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
paramInfo.name = "stddev";
|
paramInfo.name = "stddev";
|
||||||
|
@ -1017,20 +1042,12 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeRandomNormalParamInfos
|
||||||
paramInfo.description = "Standard deviation";
|
paramInfo.description = "Standard deviation";
|
||||||
paramInfos.push_back( paramInfo );
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
paramInfo.name = "dt";
|
paramInfo.name = "mean";
|
||||||
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
||||||
paramInfo.unit = "s";
|
paramInfo.unit = aUnit;
|
||||||
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
||||||
paramInfo.defaultValue = "0";
|
paramInfo.defaultValue = "0";
|
||||||
paramInfo.description = "Time step";
|
paramInfo.description = "Mean";
|
||||||
paramInfos.push_back( paramInfo );
|
|
||||||
|
|
||||||
paramInfo.name = "td";
|
|
||||||
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
|
||||||
paramInfo.unit = "s";
|
|
||||||
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
|
||||||
paramInfo.defaultValue = "0";
|
|
||||||
paramInfo.description = "Delay";
|
|
||||||
paramInfos.push_back( paramInfo );
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
appendAcParamInfos( paramInfos, aUnit );
|
appendAcParamInfos( paramInfos, aUnit );
|
||||||
|
@ -1045,12 +1062,20 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeRandomExpParamInfos( c
|
||||||
std::vector<PARAM::INFO> paramInfos;
|
std::vector<PARAM::INFO> paramInfos;
|
||||||
PARAM::INFO paramInfo;
|
PARAM::INFO paramInfo;
|
||||||
|
|
||||||
paramInfo.name = "offset";
|
paramInfo.name = "ts";
|
||||||
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
||||||
paramInfo.unit = aUnit;
|
paramInfo.unit = "s";
|
||||||
|
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
||||||
|
paramInfo.defaultValue = "";
|
||||||
|
paramInfo.description = "Individual voltage duration";
|
||||||
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
|
paramInfo.name = "td";
|
||||||
|
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
||||||
|
paramInfo.unit = "s";
|
||||||
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
||||||
paramInfo.defaultValue = "0";
|
paramInfo.defaultValue = "0";
|
||||||
paramInfo.description = "Offset";
|
paramInfo.description = "Delay";
|
||||||
paramInfos.push_back( paramInfo );
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
paramInfo.name = "mean";
|
paramInfo.name = "mean";
|
||||||
|
@ -1061,20 +1086,12 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeRandomExpParamInfos( c
|
||||||
paramInfo.description = "Mean";
|
paramInfo.description = "Mean";
|
||||||
paramInfos.push_back( paramInfo );
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
paramInfo.name = "dt";
|
paramInfo.name = "offset";
|
||||||
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
||||||
paramInfo.unit = "s";
|
paramInfo.unit = aUnit;
|
||||||
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
||||||
paramInfo.defaultValue = "0";
|
paramInfo.defaultValue = "0";
|
||||||
paramInfo.description = "Time step";
|
paramInfo.description = "Offset";
|
||||||
paramInfos.push_back( paramInfo );
|
|
||||||
|
|
||||||
paramInfo.name = "td";
|
|
||||||
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
|
||||||
paramInfo.unit = "s";
|
|
||||||
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
|
||||||
paramInfo.defaultValue = "0";
|
|
||||||
paramInfo.description = "Delay";
|
|
||||||
paramInfos.push_back( paramInfo );
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
appendAcParamInfos( paramInfos, aUnit );
|
appendAcParamInfos( paramInfos, aUnit );
|
||||||
|
@ -1089,28 +1106,12 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeRandomPoissonParamInfo
|
||||||
std::vector<PARAM::INFO> paramInfos;
|
std::vector<PARAM::INFO> paramInfos;
|
||||||
PARAM::INFO paramInfo;
|
PARAM::INFO paramInfo;
|
||||||
|
|
||||||
paramInfo.name = "offset";
|
paramInfo.name = "ts";
|
||||||
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
|
||||||
paramInfo.unit = aUnit;
|
|
||||||
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
|
||||||
paramInfo.defaultValue = "0";
|
|
||||||
paramInfo.description = "Offset";
|
|
||||||
paramInfos.push_back( paramInfo );
|
|
||||||
|
|
||||||
paramInfo.name = "lambda";
|
|
||||||
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
|
||||||
paramInfo.unit = aUnit;
|
|
||||||
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
|
||||||
paramInfo.defaultValue = "1";
|
|
||||||
paramInfo.description = "Mean";
|
|
||||||
paramInfos.push_back( paramInfo );
|
|
||||||
|
|
||||||
paramInfo.name = "dt";
|
|
||||||
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
||||||
paramInfo.unit = "s";
|
paramInfo.unit = "s";
|
||||||
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
||||||
paramInfo.defaultValue = "0";
|
paramInfo.defaultValue = "";
|
||||||
paramInfo.description = "Time step";
|
paramInfo.description = "Individual voltage duration";
|
||||||
paramInfos.push_back( paramInfo );
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
paramInfo.name = "td";
|
paramInfo.name = "td";
|
||||||
|
@ -1121,6 +1122,22 @@ std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SOURCE::makeRandomPoissonParamInfo
|
||||||
paramInfo.description = "Delay";
|
paramInfo.description = "Delay";
|
||||||
paramInfos.push_back( paramInfo );
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
|
paramInfo.name = "lambda";
|
||||||
|
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
||||||
|
paramInfo.unit = aUnit;
|
||||||
|
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
||||||
|
paramInfo.defaultValue = "1";
|
||||||
|
paramInfo.description = "Lambda";
|
||||||
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
|
paramInfo.name = "offset";
|
||||||
|
paramInfo.type = SIM_VALUE::TYPE_FLOAT;
|
||||||
|
paramInfo.unit = aUnit;
|
||||||
|
paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
|
||||||
|
paramInfo.defaultValue = "0";
|
||||||
|
paramInfo.description = "Offset";
|
||||||
|
paramInfos.push_back( paramInfo );
|
||||||
|
|
||||||
appendAcParamInfos( paramInfos, aUnit );
|
appendAcParamInfos( paramInfos, aUnit );
|
||||||
appendSpParamInfos( paramInfos, aUnit );
|
appendSpParamInfos( paramInfos, aUnit );
|
||||||
return paramInfos;
|
return paramInfos;
|
||||||
|
|
Loading…
Reference in New Issue