Forum Replies Created
- AuthorPosts
PhilParticipantPhil January 15, 2015 at 10:58 am in reply to: TG44A Sweep to Path Loss conversion utility //php bbp_reply_id(); ?>
Thanks Bruce! Really appreciate the response to my feedback and looking forward to trying the new functionality.
If I may suggest – It would be great if one could import multiple path loss files cumulatively to the path loss table. For example – I am sweeping a cavity using cable A to go from the TG to the cavity and cable B from the cavity to the spectrum analyzer. I could import the path loss file for cable A and then for cable B – the resulting path loss table would be the sum of both cable losses. Can’t remember if SH2.18B works this way already but would be handy if it did!
Cheers,
Phil
PhilParticipantI will mention as to Cliff’s point – SMA connectors are usually rated for multi-100s of mating cycles where I have seen N connector specifications up to 10,000 mating cycles. Lifetime is also highly dependent upon the material quality of the connectors used and how they are treated (eg. over-tightening, rotating the cable instead of the nut, excessive vibration, coupling with connectors that have bent, excessively protruding pins, etc.) Treat your connectors with respect. If you are curious I still put male/female adapters on the N connectors on my other test gear as all it takes is a misstep while trying to connect some stiff heliax to ruin your day, be it SMA or N connector.
PhilParticipantPhil January 5, 2015 at 11:51 am in reply to: Measurements with SA44B and TG44A //php bbp_reply_id(); ?>
Agreed the current TG application does some odd things.
Personally I find that I must set and confirm all parameters are correct before pressing TG START. If I change any of the parameters while running, the result is not what I would expect. If a parameter needs changing, one must STOP first, change the parameter, and then START again.
I believe sweep issues and ability to interact with the user interface while sweeping is going to be part of the new upcoming software release, so looking forward to trying when it is available!
Also agreed on the accuracy – it SA/TG44 agrees well with the much more expensive R&S ZVL I have access to, given the huge disparity in price point.
PhilParticipantI know this doesn’t help your current situation, but I have found to preserve my test equipment connectors (who’s connect/disconnect lifetime is limited and well, occasionally one cross threads, etc.) the best preventative measure is to screw a male-female adapter onto the equipment connector and leave it there. That way it is the adapter that takes the abuse in the long run. In the case of the spectrum analyzer, I just keep a DC block connected to it. Double protection.
PhilParticipantPhil November 12, 2014 at 2:19 pm in reply to: TG44A Sweep to Path Loss conversion utility //php bbp_reply_id(); ?>
Hmmm. .cpp files blocked. Ugly text follows:
// SHPathLossGen.cpp : Defines the entry point for the console application.
//
// This is more complex than initially thought. Due to limitations in SignalHound 2.18B
// the .CSV data points must be compressed down to 100 data points or less for the Path Loss file
// otherwise bad things happen WRT to signal levels in the SignalHound application.
// As such, the strategy is to divide the number of data points in the CSV file into less than 100 bins (the max allowable
// number of Path Loss Data points) and average the loss/gain of those CSV data points in each bin to come up with a
// single Path Loss datapoint per bin.
// *** Note this 100 point limitation means that Pass loss files will not be exact replicas of Track Gen loss sweeps,
// particularly if there are sharp changes in loss/gain over the span ***#include “stdafx.h”
#include “stdlib.h”
#include “winerror.h”
#include <fstream>
#include <iostream>
#include <string>
#include <vector>using namespace std;
int main(int argc, char* argv[])
{
struct CSVRecord {
double frequency;
double minAmp;
double maxAmp;
};vector<CSVRecord> CSVList;
string line;
unsigned int pos1, pos2;
CSVRecord tempCSV;ifstream fSHExport;
ofstream fSHPathLoss;if((argv[1] == NULL) || (argv[2] == NULL))
{
printf(“\r\nConversion utility from SignalHound .csv output to SH Path Loss file format\r\n”);
printf(“Missing Arguments!\r\n”);
printf(“Usage:\r\n\r\n”);
printf(“%s <Input file> <Output file>\r\n\r\n”, argv[0]);
printf(“Where:\r\n”);
printf(“\r\n Input File – .csv file exported from SignalHound application\r\n”);
printf(“\r\n Output file – file to be written with PathLoss data for import into SignalHound application\r\n”);
printf(“\r\n Note the utility takes the MINIMUM amplitude from the .csv file for the Path Loss.\r\n”);return ERROR_BAD_ARGUMENTS;
}fSHExport.open(argv[1]);
fSHPathLoss.open(argv[2]);//Load the CSV file records into CSVList vector
if(fSHExport.is_open() && fSHPathLoss.is_open())
{
//Toss the first line
getline(fSHExport, line);while (fSHExport.good())
{
getline(fSHExport, line);if(fSHExport.eofbit)
{
pos1 = line.find(“,”);
if(pos1 != -1)
{
pos2 = line.find(“,”, pos1+1);
tempCSV.frequency = atof((line.substr(0, pos1).c_str()));
tempCSV.minAmp = atof((line.substr(pos1+1, pos1-pos2).c_str()));
tempCSV.maxAmp = atof((line.substr(pos2+1).c_str()));CSVList.push_back(tempCSV);
}
}
}//Calculate the number of CSV records/bin we will need from the number of records in the CSVList vector
// Experimental – divide by 100, round up to nearest whole number – this should give us somewhere
// between 50 and 100 bins
double j = (double) CSVList.size()/100;int bin_size = ceil(j);
//Iterate through the records, adding them up in bins and averaging the frequency and amplitude for each bin
vector<CSVRecord>::iterator it = CSVList.begin();while(it != CSVList.end())
{
CSVRecord totCSVRecord;
totCSVRecord.frequency = 0;
totCSVRecord.minAmp = 0;
totCSVRecord.maxAmp = 0;for(int i = 0; i < bin_size; ++i)
{
if(it == CSVList.end())
{
//if we are here we should be in the last bin – set the bin size to the amount of remaining records
//to allow the averaging for the last bin to be correct.
bin_size = i;
break;
}//cout << “bin: ” << i << ” “;
tempCSV = *it;//invert amplitude for Path loss instead of gain
tempCSV.minAmp = -tempCSV.minAmp;
tempCSV.maxAmp = -tempCSV.maxAmp;totCSVRecord.frequency += tempCSV.frequency;
totCSVRecord.minAmp += tempCSV.minAmp;
totCSVRecord.maxAmp += tempCSV.maxAmp;//cout << tempCSV.frequency << “:” << tempCSV.minAmp << “:” << tempCSV.maxAmp << endl;
++it;
}cout << (totCSVRecord.frequency/bin_size) << “,” << ((totCSVRecord.minAmp/bin_size) + (totCSVRecord.maxAmp/bin_size))/2 << endl;
fSHPathLoss << (totCSVRecord.frequency/bin_size) << “,” << ((totCSVRecord.minAmp/bin_size) + (totCSVRecord.maxAmp/bin_size))/2 << endl;
}fSHExport.close();
fSHPathLoss.close();
}else
{
cout << “Unable to open either input or output file!” << endl;
return ERROR_FILE_NOT_FOUND;
}printf(“Finished!”);
return ERROR_SUCCESS;
}- AuthorPosts