On Fri, 1 Jul 2022, Luis Mochan wrote:
> # read all data, skip first row
> my ($f, $M11, $A11, $M21, $A21, $M12, $A12, $M22, $A22)=rcols "rem.s2p", 
> {LINES=>"1:-1:1"};
> my $rows=$f->nelem;
> my $M=pdl($M11, $M12, $M21, $M22); # Indices: filerow, position
> my $R=pdl($A11, $A12, $A21, $A22)*PI/180; #   filerow, position
> my $S=$M*exp(i()*$R); #                filerow, position
> my $Sm=$S->mv(0,-1) # position, filerow
>       ->reshape(2,2, $rows); # column, row, filerow

Can you explain what $S->mv(0,-1) does with respect to the -1 value?  The 
pdl docs don't cover what -1 means (or at least its not covered near the 
`mv` function).  Maybe -1 is has a standard meaning in PDL terminology?

I think I have it working for our dataset.  The resulting code is more 
complicated than your beautiful example because I had to handle touchstone 
edge cases (like 2-port is col-major and all others are row-major) as well 
as arbitrary matrix sizes (2x2, 4x4, etc)---but it works!

Questions:

Does PDL parallelize vector arithmetic somehow or do I need to do 
something further to enable threading?  

If so, how does it parallelize the work? 

Is there anything to consider when building PDL code so it scales for 
parallelization?

-Eric

> say $f, $Sm, $Sm->info;
> 
> rcols would read all the data into columns. For each row $M and $R would
> have the magnitudes and the angles in radians, and $S would have the
> corresponding complex numbers. Then, for each row I rearrange the four
> corresponding $S's into a 2x2 matrix by first getting the row index
> out of the way and then doing a reshape. I ran it with a file
> 
> rem2.s2p:
> Freq(MHz)  MagS11  AngS11  MagS21  AngS21   MagS12  AngS12   MagS22  AngS22
> 100         0.588   50.208  0.770   -35.964  0.770   -35.964  0.588   50.208
> 200         0.589   51.209  1.771   -34.965  1.771   -34.965  1.589   51.209
> 300         1       0       1       45       1       90       1       135
> 
> and obtained
> 
> [100 200 300]
> [
>  [
>   [0.376321423329891+0.451803260659953i 0.623227336287862-0.452203148268051i]
>   [0.623227336287862-0.452203148268051i 0.376321423329891+0.451803260659953i]
>  ]
>  [
>   [0.368997536067325+0.459088029005597i   1.45133851899712-1.01491748594417i]
>   [  1.45133851899712-1.01491748594417i  0.995478921580609+1.23852441101849i]
>  ]
>  [
>   [                                    1                
> 6.12323399573677e-17+i]
>   [ 0.707106781186548+0.707106781186547i 
> -0.707106781186547+0.707106781186548i]
>  ]
> ]
> PDL: CDouble D [2,2,3]
> 
> In this case, the filerow index is the last one and I assume that the
> indices in the filecolumn labels are in the usual row-column order, so
> that, for example, the S12 element corresponding to frequency 300MHz
> would be $S->at(1,0,2) (permute the 12 to 21, as pdl uses column index
> first, and substract 1 to make the indices zero-based).
> 
> Hope it helps.
> 
> Regards,
> Luis
> 
> 
> On Thu, Jun 30, 2022 at 11:59:39PM -0700, Eric Wheeler wrote:
> > Hello all,
> >
> > I'm trying to read RF touchstone (.s2p) files that are in a format like so:
> >
> > Freq(MHz)  MagS11  AngS11  MagS21  AngS21   MagS12  AngS12   MagS22  AngS22
> > 100         0.588   50.208  0.770   -35.964  0.770   -35.964  0.588   50.208
> > ...
> > 200         0.589   51.209  1.771   -34.965  1.771   -34.965  1.589   51.209
> >
> > There are thousands of these lines in a file, one line for each measured
> > frequency.  Each line represents a complex scattering (S-parameter) matrix
> > and the mag/angle format needs to be converted to a `cdouble` to work on
> > the matrix mathematically.
> >
> > A single-line 2x2 complex matrix might look as follows, where S_ji is a
> > complex value:
> >
> >  [ S11  S12 ]
> >  [ S21  S22 ]
> >
> > Since we are provided values in magnitude-angle format (in this example)
> > they must be converted to cdoubles so we can work on them.  There are
> > several formats: RI, DB, and MA.  For the MA (mag-angle) format this is
> > the transform where $a is mag and $b is angle:
> >
> >     $complex = cos($b*pi()/180) + $a*sin($b*pi()/180) * i
> >
> > I can generate a vector of 2x4 matrices holding mag-angle pairs by reading
> > the file line by line like this:
> >
> > [
> >   [
> >    [ S11mag S11ang S12mag S12ang ]
> >    [ S21mag S21ang S22mag S22ang ]
> >   ]
> >   ... for each line
> > ]
> >
> > I'm new to using PDL and at this point I'm not sure how to convert them to
> > a computable form. Since the mag/angle values need to be manipulated in
> > parallel before creating a cdouble out of them I'm not sure how to go
> > about this.
> >
> > Here are my questions:
> >
> > 1. How can I efficiently apply the
> >      real = cos($b*pi()/180)
> >      imag = $a*sin($b*pi()/180)
> >    transform to each mag/angle pair where $a is mag and $b is angle?
> >
> > 2. How can I then (or simultaneously) convert the 2x4 real-imag matrix
> >    from #1 into a 2x2 cdouble matrix to look something like this?
> >
> >     [
> >       [
> >        [ S11  S12 ]
> >        [ S21  S22 ]
> >       ]
> >       ... for each line where Sji are cdoubles
> >     ]
> >
> > 3. Now that I've described the issue, is there a better way to do this?
> >
> >
> > Once they are in a matrix format then PDL can convert them efficiently to
> > other matrix types (T, A, Z, Y) to create parallel or series circuits with
> > matrix arithmetic at each frequency.  We can then optimize the RF filter
> > circuits using component models published by manufacturers from actual
> > measurements.
> >
> > The resulting open-source tool will be comprised of Perl modules from this
> > work and published on CPAN.
> >
> > Thanks for your help!
> >
> > --
> > Eric Wheeler
> > KJ7LNW
> >
> >
> > _______________________________________________
> > pdl-general mailing list
> > pdl-general@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/pdl-general
> >
> 
> --
> 
>                                                                   o
> W. Luis Mochán,                      | tel:(52)(777)329-1734     /<(*)
> Instituto de Ciencias Físicas, UNAM  | fax:(52)(777)317-5388     `>/   /\
> Av. Universidad s/n CP 62210         |                           (*)/\/  \
> Cuernavaca, Morelos, México          | moc...@fis.unam.mx   /\_/\__/
> GPG: 791EB9EB, C949 3F81 6D9B 1191 9A16  C2DF 5F0A C52B 791E B9EB
> 
> 
> _______________________________________________
> pdl-general mailing list
> pdl-general@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/pdl-general
> 
_______________________________________________
pdl-general mailing list
pdl-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pdl-general

Reply via email to