::touchstoneutilTop, Main, Index
CommandsTop, Main, Index
s2p_read [::touchstoneutil]Top, Main, Index
s2p_read ?args?
Parameters
proc ::touchstoneutil::s2p_read {args} { argparse -help {Read file in touchstone s2p format} { {filePath -help {Path to file}} } variable degtorad set infile [open $filePath r] set i 0 set format "" while { [gets $infile line] >= 0 } { incr i if {[string match !* $line]} { continue } elseif {[string match #* $line]} { set paramList [textutil::split::splitx $line] foreach param $paramList { if {[string tolower $param] == "ri"} { set format "ri" } elseif {[string tolower $param] == "db"} { set format "db" } elseif {[string tolower $param] == "ma"} { set format "ma" } } } else { set lineList [split $line " "] lappend freq [@ $lineList 0] lappend 11a [@ $lineList 1] lappend 11b [@ $lineList 2] lappend 21a [@ $lineList 3] lappend 21b [@ $lineList 4] lappend 12a [@ $lineList 5] lappend 12b [@ $lineList 6] lappend 22a [@ $lineList 7] lappend 22b [@ $lineList 8] } } set len [llength $freq] if {$format=="ri"} { for {set i 0} {$i<$len} {incr i} { lappend 11 [complex [@ $11a $i] [@ $11b $i]] lappend 21 [complex [@ $21a $i] [@ $21b $i]] lappend 12 [complex [@ $12a $i] [@ $12b $i]] lappend 22 [complex [@ $22a $i] [@ $22b $i]] } } elseif {$format=="db"} { for {set i 0} {$i<$len} {incr i} { set 1j [complex 0 1] set mag11 [= {10.0**([@ $11a $i]/20.0)}] set phRad11 [= {$degtorad*[@ $11b $i]}] set mag21 [= {10.0**([@ $21a $i]/20.0)}] set phRad21 [= {$degtorad*[@ $21b $i]}] set mag12 [= {10.0**([@ $12a $i]/20.0)}] set phRad12 [= {$degtorad*[@ $12b $i]}] set mag22 [= {10.0**([@ $22a $i]/20.0)}] set phRad22 [= {$degtorad*[@ $22b $i]}] lappend 11 [* [complex $mag11 0] [exp [* $1j [complex $phRad11 0]]]] lappend 21 [* [complex $mag21 0] [exp [* $1j [complex $phRad21 0]]]] lappend 12 [* [complex $mag12 0] [exp [* $1j [complex $phRad12 0]]]] lappend 22 [* [complex $mag22 0] [exp [* $1j [complex $phRad22 0]]]] } } elseif {$format=="ma"} { for {set i 0} {$i<$len} {incr i} { set 1j [complex 0 1] set mag11 [@ $11a $i] set phRad11 [= {$degtorad*[@ $11b $i]}] set mag21 [@ $21a $i] set phRad21 [= {$degtorad*[@ $21b $i]}] set mag12 [@ $12a $i] set phRad12 [= {$degtorad*[@ $12b $i]}] set mag22 [@ $22a $i] set phRad22 [= {$degtorad*[@ $22b $i]}] lappend 11 [* [complex $mag11 0] [exp [* $1j [complex $phRad11 0]]]] lappend 21 [* [complex $mag21 0] [exp [* $1j [complex $phRad21 0]]]] lappend 12 [* [complex $mag12 0] [exp [* $1j [complex $phRad12 0]]]] lappend 22 [* [complex $mag22 0] [exp [* $1j [complex $phRad22 0]]]] } } else { error {Format of the file is not ri, db or ma} } return [dict create freq $freq 11 $11 21 $21 12 $12 22 $22] }