⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hp3585b.pm

📁 The Linux GPIB Package is a support package for GPIB (IEEE 488) hardware. The package contains kerne
💻 PM
字号:
package hp3585b;## John R. Ackermann N8UR   (jra@febo.com)# Mon Jun  9 09:19:03 2003## hp3585b - Functions for HP 3585B Spectrum Analyzer## Copyright 2003 by John R. Ackermann  N8UR (jra@febo.com)# Licensed under the GPL version 2 or later; see the file COPYING# included with this distribution.  I request, but do not require, that# any modifications that correct bugs or errors, or increase the program's# functionality, be sent via email to the author at the address above.use strict;use warnings;use diagnostics;use Exporter;use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);use n8ur qw(trim squash collapse round parse_value lower_case);$VERSION     = '0.01';@ISA         = qw(Exporter);@EXPORT      = ();@EXPORT_OK   = qw(make_trace get_settings fix_freq fix_db fix_sweep);sub make_trace {# The binary dump starts with two sync bytes, so we throw those away.# Then we convert 1001 pairs of bytes from 2s-complement to integers, # which represent dBV*100 (unless we're doing B-A, in which case they're # pure dB*100). The calling routine needs to add 13 to convert from dBV # to dBm (50 ohm) if that's required.	my $j;	my $rawtrace = shift;	my @trace = unpack 'n*', substr($rawtrace,2,2002);	for ($j=0;$j<=1000;$j++) {		if ($trace[$j] > 32767) {			$trace[$j] -= 65536;			}		$trace[$j] = ($trace[$j]/100);		}	return @trace;}sub get_settings {my $command;my $reading;my $dev = shift;# get screen annotation$command = "D7T4";LinuxGpib::ibwrt($dev,$command,length($command));LinuxGpib::ibrd($dev,$reading,174);# parse the string into one variable for each reading; there's much more# work to be done latermy ($ref,$top_right,$db_div,$range,$marker,$center,$span,$rbw,$vbw,$sweep) =	 split(/\n/,$reading);# get marker freq and amplitude (overrides the previous dump)$command = "D2T4";LinuxGpib::ibwrt($dev,$command,length($command));LinuxGpib::ibrd($dev,$reading,26);my ($marker_freq,$marker_val) = split(/,/,$reading);$marker_freq = substr(trim($marker_freq),1);$marker_val = trim(sprintf("%5.2f",trim($marker_val)));#---------------# Now, start string handling.  The annotation data is dumped in a # non-parser-friendly way and breaking all the elements out is a lot more# work than it should be.  Varying field lengths and embedded spaces in# frequency strings make life interesting.$ref = trim($ref);my ($ref_pre,$ref_val,$ref_suf) = split(/\s/,$ref);if ($ref_suf eq "DBM") {$ref_suf = "dBm"; }if ($ref_suf eq "DBV") {$ref_suf = "dBV"; }if ($ref_suf eq "DB") {$ref_suf = "dB"; }$top_right = trim($top_right);my $top_right_suf = trim(substr($top_right,length($top_right)-2,2));my $top_right_pre = trim(substr($top_right,0,index($top_right," ")));if ($top_right_pre eq "COUNTER") {$top_right_pre = "Counter"; }   if ($top_right_pre eq "MARKER") {$top_right_pre = "Marker"; }if ($top_right_pre eq "OFFSET") {$top_right_pre = "Offset"; }   if ($top_right_pre eq "MANUAL") {$top_right_pre = "Manual"; }   my $top_right_val = squash(trim(substr(	$top_right,length($top_right_pre),	length($top_right)-length($top_right_pre)-length($top_right_suf))));if ($top_right_suf eq "DBM") {$top_right_suf = "dBm"; }if ($top_right_suf eq "DBV") {$top_right_suf = "dBV"; }if ($top_right_suf eq "DB") {$top_right_suf = "dB"; }$db_div = trim($db_div);my ($db_div_val,$db_div_suf) = split(/\s/,$db_div);$db_div_val = trim($db_div_val);$db_div_suf = trim($db_div_suf);$range = trim($range);my ($range_pre,$range_val,$range_suf) = split(/\s/,$range);$range_pre = trim($range_pre);$range_val = trim($range_val);$range_suf = trim($range_suf);if ($range_suf eq "DBM") {$range_suf = "dBm"; }if ($range_suf eq "DB") {$range_suf = "dB"; }$center = trim($center);my $center_suf = trim(substr($center,length($center)-2,2));my $center_pre = trim(substr($center,0,index($center," ")));my $center_val = squash(trim(substr(	$center,length($center_pre),	length($center)-length($center_pre)-length($center_suf))));$span = trim($span);my $span_suf = trim(substr($span,length($span)-2,2));my $span_pre = trim(substr($span,0,index($span," ")));my $span_val = squash(trim(substr(	$span,length($span_pre),	length($span)-length($span_pre)-length($span_suf))));$rbw = trim($rbw);my ($rbw_pre,$rbw_val,$rbw_suf) = split(/\s/,$rbw);$rbw_pre = trim($rbw_pre);$rbw_val = trim($rbw_val);$rbw_suf = "Hz";$vbw = trim($vbw);my ($vbw_pre,$vbw_val,$vbw_suf) = split(/\s/,$vbw);$vbw_pre = trim($vbw_pre);$vbw_val = trim($vbw_val);$vbw_suf = "Hz";$sweep = trim($sweep);my ($sweep_pre,$sweep_val,$sweep_suf) = split(/\s/,$sweep);$sweep_pre = trim($sweep_pre);$sweep_val = trim($sweep_val);if (trim($sweep_suf) eq "SEC") {$sweep_suf = "Sec."};if (trim($sweep_suf) eq "MIN") {$sweep_suf = "Min."};if (trim($sweep_suf) eq "HR") {$sweep_suf = "Hr."};# get bottom of scalemy $ref_bottom = $ref_val-($db_div_val*10);# figure out start, center, stop, and Hz/binmy $start_freq;my $center_freq;my $stop_freq;my $span_freq;my $bin_freq;if (($center_pre eq "CENTER") && ($span_pre eq "SPAN")) {	$center_freq = $center_val;	$span_freq = $span_val;	$start_freq = $center_freq - ($span_freq/2);	$stop_freq = $center_freq + ($span_freq/2);	$bin_freq = $span_freq/1000;	}if (($center_pre eq "START") && ($span_pre eq "STOP")) {	$span_freq = $span_val - $center_val;	$start_freq = $center_freq;	$stop_freq = $span_freq;	$center_freq = $start_freq + ($span/2);	$bin_freq = $span_freq/1000;	}return $start_freq,$center_freq,$stop_freq,$bin_freq,$top_right_pre,	$top_right_val,$top_right_suf,$marker_freq,$marker_val,$rbw_val,	$vbw_val,$db_div_val,$sweep_val,$sweep_suf,$range_val,$range_suf,	$ref_val,$ref_suf,$ref_bottom,$span_val;}sub fix_freq {	# input is a string with embedded frequency and suffix	# strips commas and spaces (but not periods) from frequency	# returns frequency . suffix in 3585B-compatible format	my $tmp_val = "";	my $tmp_suffix = "";        (undef,$tmp_val,$tmp_suffix) = parse_value(shift);        $tmp_suffix = lower_case($tmp_suffix);        if (    ($tmp_suffix ne "hz") &&                ($tmp_suffix ne "khz") &&                ($tmp_suffix ne "kz") &&                ($tmp_suffix ne "mhz") &&                ($tmp_suffix ne "mz" ) ) {		return "";                }	$tmp_val = squash($tmp_val);	local $_ = $tmp_val;	/s/,//gs;	$tmp_val = $_;        if ($tmp_suffix eq "hz") { $tmp_suffix = "HZ"};        if ($tmp_suffix eq "khz") { $tmp_suffix = "KZ"};        if ($tmp_suffix eq "kz") { $tmp_suffix = "KZ"};        if ($tmp_suffix eq "mhz") { $tmp_suffix = "MZ"};        if ($tmp_suffix eq "mz") { $tmp_suffix = "MZ"};	return $tmp_val . $tmp_suffix;}sub fix_db {	# input is a string with embedded value and suffix	# strips commas and spaces (but not periods) from value	# returns db value . suffix in 3585B-compatible format	my $tmp_val = "";	my $tmp_suffix = "";        (undef,$tmp_val,$tmp_suffix) = parse_value(shift);        $tmp_suffix = lower_case($tmp_suffix);        if (    ($tmp_suffix ne "db") &&                ($tmp_suffix ne "dbm") &&                ($tmp_suffix ne "dbv" ) ) {		return "";                }	$tmp_val = squash($tmp_val);	local $_ = $tmp_val;	/s/,//gs;	$tmp_val = $_;        if ($tmp_suffix eq "db") { $tmp_suffix = "DB"};        if ($tmp_suffix eq "dbm") { $tmp_suffix = "DM"};        if ($tmp_suffix eq "dbv") { $tmp_suffix = "DV"};	return $tmp_val . $tmp_suffix;}sub fix_sweep {	# input is a string with embedded value and suffix	# strips commas and spaces (but not periods) from value	# returns seconds . suffix in 3585B-compatible format	my $tmp_val = "";	my $tmp_suffix = "";        (undef,$tmp_val,$tmp_suffix) = parse_value(shift);	$tmp_val = squash($tmp_val);	local $_ = $tmp_val;	/s/,//gs;	$tmp_val = $_;	return $tmp_val . "SC";}1;=pod=head1 NAMEhp3585b - Functions for HP 3585B Spectrum Analyzer=head1 SYNOPSIS    use hp3585b;    @array = get_settings(@bin_dump)    ($start_freq,$center_freq,$stop_freq,$bin_freq,$top_right_pre,	$top_right_val,$top_right_suf,$marker_freq,$marker_val,$rbw_val,	$vbw_val,$db_div_val,$sweep_val,$sweep_suf,$range_val,$range_suf,	$ref_val,$ref_suf,$ref_bottom,$span_val) = get_settings(device)    $freq = fix_freq($raw_freq)       $db = fix_freq($raw_db)       $sweep_time = fix_sweep($raw_sweep)   =head1 ABSTRACT=head1 DESCRIPTION=head1 FUNCTIONS=head2 C<new>=over 4=item ArgArgument=back=cut=head1 SEE ALSOL<My::Module::Tutorial>, L<perlpod|Pod::perlpod>, L<perlpodspec|Pod::perlpodspec>=head1 LICENSEThis software is released under the same terms as perl itself.If you don't know what that means visit http://perl.com/=head1 AUTHORCopyright (C) root 2003All rights Reserved=cut

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -