Mois : mars 2015

XRef : Kit Horloge de Référence haute précision pour tous transceivers par VK3HZ et VK3XDK

XRef-FT par VK3HZ et VK3XDK (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2015/03/pcbtop1 NULL.gif)L’information me vient de Chris 2E0ILY qui a adapté ce kit sur son Kenwood TS-590s. Graham VK3XDK and David VK3HZ ont développé le XRef, une série de modules adaptables sur des transceivers du marché qui offre un TCXO asservi au signal 10 MHz d’un GPS ou d’une horloge de référence au Rubidium. Les cartes embarquent un générateur Silicon Labs Si-4133 piloté par un micro-contrôleur Atmel qui l’asservit au signal d’une référence 10MHz. Ces circuits améliorent à la fois la stabilité en fréquence et la précision de l’oscillateur local. Le bruit de phase est légèrement dégradé dans certains cas. Bien entendu, la précision final dépend aussi de la qualité de la référence utilisée car tous les circuits ne sont pas égaux en terme de gigue sur le signal 10MHz. Plusieurs type de modules existent suivant le type de transceiver à équiper :

  • le XRef-FT pour les Yaesu FT-817, FT-857 et FT-897 produira un signal 22,625 MHz. En cas d’absence de signal 10 MHz, on retombe sur la précision du Si-4133 qui est meilleure que celle de l’oscillateur local standard.
  • les XRef-VT et XRef-VS sont prévus pour une gamme large de transceiver avec soit un TCXO sur le module XRef, soit un retour vers le TCXO intégré au transceiver quand il est de bonne qualité. Ils génèrent un signal configurable de 15 MHz et plus. Les transceivers déjà testés sont les Kenwood TS-2000, TS-590 et TS-140, Yaesu FT-847, FT-100, FT-736R, Icom IC-7400, IC-706 et IC-910H ainsi que les QS1R et SDR-IQ.
  • le XRef-PLL est destiné aux transceiver utilisant un oscillateur contrôlé en tension (VCXO) comme les derniers modèles Icom (IC-9100 par exemple).

Pour ma part je n’éprouve pas la nécessité d’un tel circuit, mais ceux qui aiment la précision absolue, qui utilisent leurs transceivers en VHF, UHF et SHF ou comme pilote pour un transverter peuvent penser autrement. Le prix va de 120 à 140 AUD, plus 5 AUD de frais de port internationaux. Cela me paraît très raisonnable compte tenu du temps que les OMs en question ont du passer à développer ce circuit. Il est aussi à rapprocher des prix de modules TCXO optionnels comme sur le TS-590s et qui ne sont pas donnés.

Pureté spectrale du Yaesu FTdx-5000 en émission par K9YC

FTDX5000 K9YC après mise à jour firmware (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2015/03/FTDX5000_tx_afterfirmwareupdate_K9YC NULL.png)Après l’article de AC0C (http://xv4y NULL.radioclub NULL.asia/2015/02/24/amelioration-de-la-purete-spectrale-du-yaesu-ftdx-5000-en-emission-par-ac0c/), c’est cette fois Jim K9YC qui s’y colle en écrivant un compte rendu détaillé de ses essais et mesures (http://k9yc NULL.com/FTDX5000_Report NULL.pdf). La conclusion est similaire avec une amélioration très notable des performances du haut de gamme Yaesu après la mise à jour du firmware. Le transceiver s’en tire donc mieux mais sans atteindre le niveau de qualité fixé par Elecraft.

La marque Bencher vendue à Vibroplex

Merci à K4SWL pour l’information (http://qrper NULL.com/2015/03/bencher-inc-sold-to-vibroplex-llc/).

Manipulateur Iambique Bencher BY-2 (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2015/03/by2 NULL.jpg)Par une dépêche de Scott Robins W4PA, nous apprenons que le fabricant de manipulateur et clé morse Bencher a été vendu à son confrère Vibroplex (http://www NULL.vibroplex NULL.com/). Pour mémoire, Bencher (http://www NULL.bencher NULL.com/ham/) est une marque emblématique en particulier pour le marché nord-américain avec plus de 150 000 manipulateur ïambique de la série BY vendus. Ses précédent propriétaires en était Jere Benedict et Bob Locher W9KNI (http://xv4y NULL.radioclub NULL.asia/2014/02/10/jai-lu-pour-vous-the-complete-dxer-de-w9kni/) qui souhaitent aujourd’hui prendre leur retraite.

Vibroplex semble aujourd’hui vouloir consolider le marché des accessoires de Morse dans la moyenne-gamme (autour de 150€). Autour d’une marque au passé glorieux (symbole des clés semi-automatique de type bug), ils ont racheté des brevets (Black Widow de W5JH (http://xv4y NULL.radioclub NULL.asia/2014/02/16/kit-manipulateur-morse-iambic-en-kit-black-widow-par-w5jh/) et ZN Ultimate par N3ZN) et se sont diversifiés aussi dans les antennes en important les SpiderBeams allemandes. Le rachat de Bencher est un pas de plus dans cette direction sur marché qui reste de niche et où les marges doivent être assez réduites.

Les vidéos d’expéditions de 9V1YC disponibles gratuitement

James Brooks 9V1YC (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2015/03/9V1YC NULL.jpg)En plus d’être un de mes “voisins”, correspondant régulier de QSO et amateurs de concours radio comme moi, James Brook 9V1YC est surtout connu pour produire des films vidéos de qualité professionnelle relatant les aventures de nombreuses DXpéditions. Il a lui même participé à de nombreuses opérations et est aussi un opérateur hors-norme.

La nouvelle du jour c’est qu’il nous fait un énorme cadeau en mettant en ligne les vidéos disponibles gratuitement sur Viméo. En tout ce sont onze films de ZL9CI, FO0AAA, VK0IR, A52A, VP8GEO, VP8THU, FT5XO, ZL8R, K4M, VP8ORK, BS7H ainsi qu’un documentaire sur la WRTC 2014 que vous pouvez visionner. De quoi occuper de nombreuses heures et agrémenter les réunions de clubs!

Video

Video

Bibliothèque PHP de traitement de fichiers logs ADIF v3

Logo QScope.org (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/08/logo_qscope_b NULL.png)Ceci est une nouvelle version de la bibliothèque PHP que j’avais précédemment publié (http://xv4y NULL.radioclub NULL.asia/2013/10/15/bibliotheque-php-de-traitement-de-fichiers-logs-adif-v2/). Elle accepte maintenant conforme à la norme ADIF v3 et accepte de manière transparente les fichiers au format traditionnels ADI ou au nouveau format ADX (XML). C’est la librairie que j’utilise pour mon site d’analyse de log en ligne QScope.org.

Ce code ne gagnerait pas un concours de beauté, mais il fonctionne. J’avoue que les tests avec le format XML ont été limités à l’exemple donné avec la norme ADIF v3, car je n’ai pas de logiciel capable de générer de tels fichiers. Aucune comparaison de performance n’a été faite entre les deux formats, mais je soupçonne que le format traditionnel est un peu plus rapide à importer, même si la limite viendra plus rapidement de la base de données que du parsing.

<?php

/*

=== ADIF v3 Parser library v2.00 (2015-03-10) ===

   This Library his based on work by Jason Harris KJ4IWX but has been simplified and improved for better ADIF compatiblity by Yannick DEVOS XV4Y
   Version 2.00 introduces transparent support for ADX (XML) file format coming with ADIF v3 specifications
   
   Copyright 2011-2013 Jason Harris KJ4IWX (Apache v2.00 License)
   Copyright 2015 Yannick DEVOS XV4Y (GNU GPL v3.00 License)
   Any commercial use is subject to authorization from the respective authors
	
	This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

---

	This PHP library is designed to work with the Jelix 1.5 PHP Framework and PHP 5.4.
	However, it can simply be called by any PHP program.
	
	Usage for ADI and ADX files (with Jelix):
		$ADIFParser = jClasses::createInstance('yourmodule~ADIFParser');
		$ADIFParser->initialize($complete_path_to_the_file);

		echo ($ADIFParser->get_header('adif_ver'));			// Will display the ADIF version
		$all_headers_array = $ADIFParser->get_header(); 	// Will return the whole headers in an array
		while(($record = $ADIFParser->get_record())!=-1) {	// Check for end of file
			if ($record!=false) {							// If line is empty we skip
				if(count($record) == 0) {
					break;
				};
				echo ($record['call']);
				echo ($record['qso_date']);
				echo ($record['mode']);
				// Do whatever you like with the ADIF fields...
			};
		};

	Fore more infos find contacts at:
	http://xv4y.radioclub.asia/
	http://www.qscope.org/

*/

class ADIFParser
{
	var $is_adx = false;	// default to ADI file (traditionnal format)
	var $data; 				// the adif data
	var $i; 				// the iterator
	var $headers = array();
	
	public function initialize($file) //this function parses the header
	{
		// We read the first line and check if it is XML (ADX) or not
		$this->file_handler = fopen($file,'r');
		$firstline = fgets($this->file_handler);
		if (stripos($firstline, "<?xml")!==false) $this->is_adx = true;
		fclose($this->file_handler);

		if (!$this->is_adx) {	// This is an old fashion ADI file format
			$eoh=$eof=false;
			$this->data='';
		
			// And we start from the begining
			$this->file_handler = fopen($file,'r');
			while (!$eoh && !$eof) {	// We will try to locate the <EOH> tag
				$newdata = fgets($this->file_handler);	// $this->file_handler contains a handler in the case of ADI files
				if (!$newdata) {
					$eof = true;
				} else {
					if (stripos($newdata, "<eoh>")===false) {
						$this->data .= $newdata;
					} else {
						$eoh = true;
					}
				};
			}
			if($eoh == false) //did we find the end of headers?
			{
				// If this ADIF file has no header (like FT5ZM), we need to re-open the file because we already went to the end
				fclose($this->file_handler);
				$this->file_handler = fopen($file,'r');
				return 0;
			};
		
		
			//get headers
		
			$this->i = 0;
			$in_tag = false;
			$tag = "";
			$value_length = "";
			$value = "";
			$pos = strlen($this->data)-1;
				
			while($this->i < $pos)
			{
				//skip comments
				if($this->data[$this->i] == "#")
				{
					while($this->i < $pos)
					{
						if($this->data[$this->i] == "\n")
						{
							break;
						}
				
						$this->i++;
					}
				}else{
					//find the beginning of a tag
					if($this->data[$this->i] == "<")
					{
						$this->i++;
						//record the key
						while($this->data[$this->i] < $pos && $this->data[$this->i] != ':')
						{
							$tag = $tag.$this->data[$this->i];
							$this->i++;
						}
					
						$this->i++; //iterate past the :
					
						//find out how long the value is
					
						while($this->data[$this->i] < $pos && $this->data[$this->i] != '>')
						{
							$value_length = $value_length.$this->data[$this->i];
							$this->i++;
						}
					
						$this->i++; //iterate past the >
					
						$len = (int)$value_length;
						//copy the value into the buffer
						while($len > 0 && $this->i < $pos)
						{
							$value = $value.$this->data[$this->i];
							$len--;
							$this->i++;
						};

						$this->headers[strtolower(trim($tag))] = $value; //convert it to lowercase and trim it in case of \r
						//clear all of our variables
						$tag = "";
						$value_length = "";
						$value = "";
					
					}
				}
			
				$this->i++;
			};
			return 1;
		} else {	// This is the new ADX (XML) file format
			$this->is_adx = true;
			$this->xml_reader = new XMLReader;
			$this->xml_reader->open($file); // In this case, $file contains a file path
			if (!$this->xml_reader) return -1;	// Not able to open the file

			while ($this->xml_reader->read() && $this->xml_reader->name != 'HEADER');		// Looking for the header

			if ($this->xml_reader->name == 'HEADER') {
				// Load the current xml element into simplexml
				$xml = simplexml_load_string($this->xml_reader->readOuterXML());
				$this->headers = array_change_key_case(json_decode(json_encode($xml),TRUE),CASE_LOWER);

			} else {
				return 0;	// No header, this should mean invalid file for ADX
			}
			while ($this->xml_reader->read() && $this->xml_reader->name != 'RECORD');		// Now we go to the first RECORD
			if ($this->xml_reader->name != 'RECORD') {
				$this->xml_reader->close();
				return -2;	// This is an empty or invalid ADX file
			}
		return 1;	// All is normal
		}
	}
	
	//the following function does the processing of the array into its key and value pairs
	public function record_to_array(&$record)
	{
		$return = array();
		for($a = 0; $a < strlen($record); $a++)
		{
			if($record[$a] == '<') //find the start of the tag
			{
				$tag_name = "";
				$value = "";
				$len_str = "";
				$len = 0;
				$a++; //go past the <
				while($record[$a] != ':') //get the tag
				{
					$tag_name = $tag_name.$record[$a]; //append this char to the tag name
					$a++;
				};
				$a++; //iterate past the colon
				while($record[$a] != '>' && $record[$a] != ':')
				{
					$len_str = $len_str.$record[$a];
					$a++;
				};
				if($record[$a] == ':')
				{
					while($record[$a] != '>')
					{
						$a++;
					};
				};
				$len = (int)$len_str;
				while($len > 0)
				{
					$a++;
					$value = $value.$record[$a];
					$len--;
				};
				$return[strtolower($tag_name)] = $value;
			};
			//skip comments
			if($record[$a] == "#")
			{
				while($a < strlen($record))
				{
					if($record[$a] == "\n")
					{
						break;
					}
					$a++;
				}
			}
		};
		return $return;
	}
	
	
	//finds the next record in the file
	public function get_record()
	{
		if (!$this->is_adx) {
			$record ='';
			$out_condition = false;
			while (!$out_condition) {
				$newdata = fgets($this->file_handler);
				if ($newdata===false) {
					$out_condition = true;
					fclose($this->file_handler);
					return -1;	// This is the end of file
				} else {
					$end = stripos($newdata , "<eor>");
					if($end !== false) { //we got a full line
						$record .= substr($newdata, 0, $end);
						$out_condition = true;
						return $this->record_to_array($record); //process and return output
					} else {
					$record .= $newdata;	// The line is not complete and we need to fetch a new string
					}
				}
			}
		} else {
			// Loop through the Records
			if ($this->xml_reader->name == 'RECORD') {
				// Load the current xml element into simplexml and we’re off and running!
				$xml = simplexml_load_string($this->xml_reader->readOuterXML());
				$this->xml_reader->next('RECORD');
				$array = array_change_key_case(json_decode(json_encode($xml),TRUE),CASE_LOWER);

				return $array;
			} else {
				$this->xml_reader->close();
				return -1;
			}
		}
 	}
	
	public function get_header($key='')	// Changed to return the whole array if no key provided
	{
		if(array_key_exists(strtolower($key), $this->headers))
		{
			return $this->headers[strtolower($key)];
		} else if (empty($key)) {
			return $this->headers;
		} else {
			return NULL;
		}
	}
	
}
?>

Antenne Zeppelin (end-fed) multibandes par PA3HHO

Antenne Zeppelin par PG3N (Photo PA3HHO) (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2015/03/PG3N_PA3HHO_EndFed_Zeppelin NULL.jpg)PA3HHO nous livre les enseignements (en anglais) de différents essais avec les antennes type Zeppelin (dipôle demi-onde alimenté par l’extrémité) pour les utiliser en multi-bande HF.

En général une version 20 mètres sera aussi utilisable en pleine longueur d’onde sur 10 mètres. La version de PG3N présenté ci-contre utilise par exemple une trappe qui permet d’avoir une bande supplémentaire. Suivant les versions et les compromis sur la longueur et le transformateur d’impédance, on peut avoir une réalisation très pratique en portable, mais aux performances réduites.

Hendricks QRP Kits change de propriétaire

Intérieur MBDC KI4DS KD1JV Hendirkcs QRP Kits (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2014/06/KD1JV_ki4ds_mbdc05a NULL.jpg)Doug Hendricks KI6DS, le fondateur du fournisseur de kits bien connu QRP Kits (http://www NULL.qrpkits NULL.com), cède son activité. Dans sa gamme il proposait de nombreuses radios conçues par Steve KD1JV dont le MBDC (http://xv4y NULL.radioclub NULL.asia/2014/06/07/kit-pour-debutants-le-mbdc-de-kd1jv-deja-disponible-chez-hendricks-qrp-kits/) et le PFR-3. Après des années consacrées à cette activité qui n’a jamais vue comme une source de revenu pour lui, mais plutôt comme une passion, il est temps de prendre un peu de recul.

La production de kits est en cours de transfert à James Bennett et Kathy Long de Pacific Antenna. L’objectif est un retour à la normal des activités pour début avril. Aucune autre information n’est disponible sur l’évolution de la gamme et les orientations que les nouveaux propriétaires souhaitent donner. Doug resterait présent comme consultant dans l’immédiat.