Archives de catégorie : HAM Radio

Portable IOTA AS-128 sur une île de la baie de Ha Tien

Mes parents étant au Viêt-Nam pour 3 semaines, nous avons profité d’une semaine de vacances des enfants pour faire une petite escapade sur la côte à Hà Tiên (http://fr NULL.wikipedia NULL.org/wiki/H%C3%A0_Ti%C3%AAn), près de la frontière avec le Cambodge. Comme d’habitude nous logions à l’hôtel Hon Trem sur le cap du même nom, du haut duquel on a une vue imprenable sur la baie. J’avais pris dans mes bagages mon Mountain Topper Rig avec une batterie, la canne à pèche télescopique de 5m et du fil…

Mountain Topper Rig portable QRP (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/10/IMAG0077 NULL.jpg)N’ayant pas l’autorisation d’émettre à ce QTH, je ne fais que de l’écoute, mais c’est toujours agréable de pouvoir monter la station en 5 minutes et d’être QRV, au moins en théorie. Certains se demanderont alors pourquoi j’emporte un manipulateur. La réponse c’est qu’il me permet d’entrer une fréquence directement dans le MTR, au lieu de devoir balayer la bande avec les boutons haut/bas.

Antenne GP portable quart d'onde verticale portable (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/10/IMAG0078 NULL.jpg)Le deuxième jour nous avons loué un bateau pour nous six et sommes partis en mer faire un peu de pèche et passer une partie de la journée sur une des îles de la baie. La plupart des îles sont inhabitées et les deux plus grosses regroupent environ 1000 âmes installées en permanence. D’autres petites îles sont aussi habitées mais le plus souvent par une deux familles de pêcheurs. C’est sur une de ces petites îles que nous sommes allés. Ces familles sont organisées par la société locale de tourisme et propose des repas et des hébergements pour les touristes (en quasi-totalité vietnamiens). A l’heure de la sieste j’avais donc installé ma station au bord de l’eau et j’écoutais la bande. Comme c’était prévisible, en début d’après-midi le 20 mètres et presque totalement vide d’activité sous nos latitudes, mais j’ai pu entendre YB9Y ainsi que d’autres stations “locales”.

Bibliothèque PHP de traitement de fichiers logs ADIF v2

Une nouvelle version de la bibliothèque, compatible ADIF v3, est disponible (http://xv4y NULL.radioclub NULL.asia/2015/03/10/bibliotheque-php-de-traitement-de-fichiers-logs-adif-v3/).

Comme promis, je mets à disposition de la communauté ma version de la librairie de traitement (parser) de fichiers logs ADIF v2 (http://adif NULL.org/). Elle accepte les fichiers issus des logiciels les plus courants actuellement (N1MM, DXKeeper, HAM Radio Deluxe, WinLog…) et en extrait les différents champs.

Aucune vérification n’est faite sur la cohérence des informations et celle-ci dépend donc du logiciel de cahier de trafic qui a généré ces fichiers. Contrairement au parser ADIF de KJ4IWX depuis lequel j’étais parti au début, cette librairie n’a aucune limite de taille et elle peut tout à fait traiter des logs de plusieurs centaines de milliers de lignes. Tout dépend du traitement que vous faites ensuite, mais sur une machine aux performances actuelles, on peut facilement espérer insérer 2000 QSOs par minute dans une base de données. Sur QScope (http://www NULL.qscope NULL.org/) où la qualité d’origine des logs importés est très aléatoire de nombreuses vérifications sont nécessaires et la vitesse chute à environ 500 QSOs par minute.

<?php

/*

=== ADIF v2 Parser library v1.00 (2013-10-11) ===

   This Library his based on work by Jason Harris KJ4IWX but has been simplified and improvedfor better ADIF compatiblity by Yannick DEVOS XV4Y
   Copyright 2011-2013 Jason Harris KJ4IWX (Apache v2.00 License)
   Copyright 2013 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 (with Jelix):
		$ADIFParser = jClasses::createInstance('yourmodule~ADIFParser');
		$file_handler = fopen($complete_path_to_the_file,'r');
		$ADIFParser->initialize($file_handler);

		while(($record = $ADIFParser->get_record($file_handler))!=-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...
			};
		};
		fclose($file_handler);

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

*/

class ADIFParser
{

	var $data; //the adif data
	var $i; //the iterator
	var $headers = array();
	
	public function initialize($fhandler) //this function locates the <EOH>
	{
		$eoh=$eof=false;
		$this->data='';
		while (!$eoh && !$eof) {
			$newdata = fgets($fhandler);
			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?
		{
			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;
	}
	
	//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($fhandle)
	{
		$record ='';
		$out_condition = false;
		while (!$out_condition) {
			$newdata = fgets($fhandle);
			if ($newdata===false) {
				$out_condition = true;
				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
				}
			}
		}
 	}
	
	public function get_header($key)
	{
		if(array_key_exists(strtolower($key), $this->headers))
		{
			return $this->headers[strtolower($key)];
		}else{
			return NULL;
		}
	}
	
}
?>

Retour d’une bonne propagation avec l’automne

Bien que je sois pas mal pris ces derniers jours avec la visite de mes parents et l’arrivée d’un groupe de 10 personnes composés d’oncle et tante et d’amis de la famille, j’ai réussi à placer un peu de temps pour la radio.

Capture carte WSPR XV4Y 40 mètres (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/10/XV4Y_WSPR_40m_15102013 NULL.png)Tout d’abord j’ai vu les conditions sur la bande des 40 mètres s’améliorer peu à peu après la dernière tempête solaire et plusieurs stations NA recevoir mes signaux. La nuit dernière c’était au tour de l’Europe de faire son retour avec une dizaine de stations annonçant la réception des 500mW de ma balise WSPR autonome. 10 stations cela peut paraître faible mais le nombre de participants sur la bande 40 mètres et très très limité en comparaison des bandes 30 mètres et 20 mètres. Je vais pour les nuits suivantes mettre la balise sur 30 mètres et ensuite la replacer sur la bande des 80 mètres pour en étudier la propagation ce qui est son objectif principal.

Ensuite, j’ai aussi pu faire quelques QSOs assez attendus comme celui sur 12 mètres avec Dimitri TU5DF (http://www NULL.qrz NULL.com/db/TU5DF) hier. Cela faisait plusieurs jours que je chaque fois que je le voyais annoncé sur le DX cluster j’allais jeter une oreille sur la bande, sans vraiment de succès. Nous avions discuté par e-mail au sujet de QScope (http://www NULL.qscope NULL.org/) et lui aussi espérait bien pouvoir compter le Viêt-Nam dans la liste de ses contrées DXCC. Hier en soirée je faisais donc une petite pause pour écouter un peu la bande et pour une fois TU5DF arrivait suffisamment fort pour espérer un QSO. Le pile-up était assez large (environ 4 KHz) et la concurrence rude, mais Dimitri faisait tourner son VFO suffisamment souvent pour entendre aussi les stations faibles, et il a donc reconnu mon indicatif au bout de quelques minutes d’appel de ma part. Par malchance, juste à ce moment le QSB devint plus fort et par 3 fois je n’ai pas entendu mon indicatif complet et je n’étais pas sûr qu’il avait bien la dernière lettre. J’ai donc du le faire répéter et “casser son rythme”… nouveau mode et nouvelle bande pour moi ainsi que nouveau pays dans l’année 2013. Dans la même demi-heure j’ai aussi contacté JY9FC sur 10 mètres et 4K9W sur 12 mètres.

Quelques jours auparavant j’avais ajouté KH0M (premiers QSOs avec les îles Mariannes cette année) et V73NS (plusieurs fois depuis le début d’année dont une fois avec 5W en portable) à mon log. Un peu plus tôt dans le mois c’était TO2TT (http://www NULL.i2ysb NULL.com/idt/) sur 17, 15 et 12 mètres (il me manque le 10 mètres) dans des conditions difficiles car leur dégagement est très mauvais dans cette direction. 3D2GC et 3D2GC/P (Rotuma, nouveau pays pour 2013) ainsi que OD5ZZ et T77C m’ont aussi permis d’afficher un large sourire en descendant du shack… Sans être exceptionnelles, j’avoue que les conditions sont suffisamment bonnes pour autoriser accrocher de jolis DX du 20 au 10 mètres. Les bandes basses sont toujours trop bruyantes à cette saison avec les typhons qui s’enchaînent dans la mer de l’Est. Comparativement à l’année dernière, le 10 et le 12 mètres offrent de moins belles ouvertures, mais j’entends parfois des stations NA appeler d’autres stations DX, preuve que la propagation est là!

Seul regret, l’impossibilité de contacter TX5D (http://www NULL.dxcoffee NULL.com/eng/2013/09/27/tx5d-raivavae-island-iota-oc-114/). Une seule fois j’aurai été en mesure de faire QSO sur 20 mètres, mais le pile-up était trop important et je suis arrivé au moment où la propagation entre nous deux commençait à faiblir et le signal se perdre dans le bruit. Leur objectif est clairement l’Amérique du Nord et la planification de leurs opérations à l’opposé de ce qui serait intéressant pour moi. Je ne peux bien entendu pas leur en vouloir, mais c’est tout de même frustrant!

Vidéo chaîne d’assemblage du TS-990s chez Kenwood

Ce petit film publicitaire en japonais ne vous apprendra rien sur le haut de gamme décamètrique de Kenwood. Toutefois les images sont jolies et on découvre les chaînes de montage du TS-990s ainsi que l’assemblage manuel de certaines pièces. Je regrette juste les bruitages ajoutés sur le film pour les scènes des robots de montage des composants par exemple…

Vidéo assemblage TS-990s usine Kenwood (http://www NULL.youtube NULL.com/watch?v=zLLiHqFdmsA)

Merci à Roar LA4AMA pour l’info.

Le Noise Blanker du TS-590s en action

[GTranslate]

La dernière fois je vous montrais la démonstration du fonctionnement du Noise Blanker du Ten-Tec Eagle 599 Eagle, et c’est vrai que la vidéo était éloquente (http://xv4y NULL.radioclub NULL.asia/2013/04/07/efficacite-du-noise-blanker-du-ten-tec-eagle/).

Ce matin, en participant au concours Oceania DX Contest en BLU, j’ai eu l’occasion de faire de même avec mon TS-590s. Ce que je montre ici c’est l’efficacité des deux circuits de Noise Blanker du TS-590s NB1 (analogique sur la FI) et NB2 (100% numérique). Ne confondez pas ce système destiné à supprimer les bruits électriques périodiques (à l’origine allumage de voiture et radars Trans-Horizon russe) avec celui du Noise Reducter (NR) qui lui aussi était enclenché et qui sert à améliorer le rapport signal à bruit en retirant les bruits aléatoires (bruits atmosphériques et bruits de fond de bande HF).

Attention, la vidéo est filmée à main levée avec mon smartphone et la qualité du son n’est pas fameuse, mais elle montre toutefois le rôle rempli par le NB. Le bruit est vraisemblablement celui d’un RADAR ou d’un autre équipement militaire. Au début je pensais à une télé plasma, mais le bruit se déplace en fréquence et on le retrouve de manière cyclique sur plusieurs bandes (14, 18 et 21 MHz typiquement).

WSJT-X version 1.2.1 disponible

K1JT et son équipe de développeur ont mis à disposition une nouvelle version béta de WSJT-X (http://physics NULL.princeton NULL.edu/pulsar/K1JT/wsjtx NULL.html). Cette version 1.2.1 (build 3587 actuellement) apporte plusieurs modifications internes (numérisation en 48KHz sur toutes les plateformes et décimation avec un algorithme sur mesure) mais aussi des améliorations de l’interface utilisateur. Un bogue a été découvert qui l’empêche de fonctionner correctement sur Windows Vista. Une solution a déjà été trouvée et devrait être mise en ligne rapidement. A noter que WSJT-X supporte la réception simultanée de signaux JT65A et JT9, et bascule en émission de l’un à l’autre automatiquement.

Prédictions de propagation et stratégie pour les concours radio par K6TU

Cela fait déjà un petit moment que je voulais faire un article sur ce service mais il était resté inachevé dans les brouillons. Une annonce vue récemment le concernant (mais j’ai oublié où) m’y a fait repenser.

Les avis divergent sur le sujet, mais pour certains OM amateurs de concours radio, la victoire passe par une planification rigoureuse de ses opérations. S’il va de soit que faire tourner une équipe de 20 opérateurs pour 8 stations demande de l’organisation et donc de la planification, d’autres OM (et pas les plus mauvais contesters) vous diront qu’il faut toujours être sur la bande la plus haute ouverte et ne descendre que si le rythme chute vraiment.

Stu de K6TU a lui fait son choix. Participant assidu à de nombreux concours et même vice-président du Nothern California Contest Club, il a depuis longtemps utilisé des outils comme VOACAP pour réaliser ses prédictions de propagation et planifier sa stratégie (ou souvent celle des copains) pour les concours. VOACAP est un outil reconnu de modélisation de la propagation et ses prédictions sont tout à fait pertinentes (mais elles ne restent que des probabilités). Il a toutefois un le défaut d’être long à paramétrer et de nécessiter une mise au point rigoureuse pour réellement donner de bons résultats. C’est là qu’intervient K6TU qui lui a développé des outils d’aide à la stratégie pour les concours, transformant de manière automatique les informations brutes de VOACAP en données utiles pour les contesters (http://k6tu NULL.net/).

Les services qu’offre le site web de Stu sont payants, l’abonnement est de 29,99$ pour 12 mois (http://k6tu NULL.net/?q=Pricing). Toutefois il existe une offre de période d’essai gratuite pendant 30 jours. Ensuite, certains services restent gratuits pour tous les utilisateurs enregistrés, même s’ils ne sont pas à jour d’abonnement. Si vous ne souhaitez pas vous enregistrer, vous pouvez aussi accéder aux service gratuit de prédiction pour les futures DXpéditions FT5ZM ou K9W, dont le résultat pour ma station est affiché ci-dessous.

Prédiction propagation K9W - XV4Y par K6TU (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/10/Propag_K6TU_XV4Y_30-Sep-2013_02-20-50_UTC_00_ut NULL.jpg)

Nouveau récepteur 40 mètres CRX1 chez Etherkit : idéal pour débuter en CMS

Etherkit CRX1 Product (http://blog NULL.etherkit NULL.com/2013/08/31/announcing-the-crx1-receiver/)Ce récepteur suit un design super-hétérodyne simple à VXO. Il couvre de 7,030 MHz à 7,034 MHz avec une bande-passante de 400Hz ce qui le limite à la réception de la télégraphie. Le MDS (la sensibilité) est de -133dBm avec une gamme dynamique à 20 KHz de 82dB ce qui est plutôt flatteur. Les autres caractéristiques sont en ligne avec ce qu’on peut attendre d’une telle conception. L’alimentation se fait entre 9V et 14V DC avec une consommation de 25mA. Une caractéristique intéressante est qu’il peut facilement trouver sa place à côté d’un émetteur séparé car la commutation émission/réception est prévue avec une coupure de la BF réception et un sidetone pour écouter sa propre transmission. Une entrée pour VFO externe est aussi prévue.

Tous les composants sont en CMS 0805 et SOT-23 (les plus gros), ce qui le rend accessible à tout ceux qui veulent se lancer dans l’assemblage de circuits avec composants à montage en surface. Le circuit imprimé est simple face, le nombre total de composant à souder est réduit et tous les connecteurs et contrôles sont fournis avec le kit. Un bon échauffement avant de passer à des circuits plus complexes.

Ni prix ni date de disponibilité sont annoncés pour l’instant.

Plug-in PHP requêtes asynchrones PostgreSQL pour Jelix/jDb

Je mets à disposition au téléchargement ce plug-in jDb (Jelix) écrit en PHP qui est un driver PostgreSQL permettant les requêtes asynchrones avec la base de données (http://xv4y NULL.radioclub NULL.asia/ftp/JELIX_JDB_PGSQL_ASY NULL.zip).

Logo QScope.org (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/08/logo_qscope_b NULL.png)Dans le cadre de mon projet de statistiques en ligne QScope.org (http://www NULL.qscope NULL.org/), je me retrouve à faire des calculs assez intensifs sur la base de données PostgreSQL, en particulier pour calculer le temps d’opération et les nombres réels de QSO/heure en pointe. Sur les gros logs d’expéditions DX ou pour les logs étalés sur plusieurs mois, les requêtes sur la base de données peuvent se chiffrer en milliards de lignes… et jusque 10 minutes de temps d’exécution.

Logo Postgresql (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/09/Postgresqlelephant NULL.png)Si les performances de PostgreSQL sont très bonnes et qu’il gère admirablement bien les connexions multiples, il ne permet pas l’exécution parallèle des requêtes. Cette fonctionnalité est encore une exclusivité des bases de données commerciales comme Oracle, Sybase ou MS SQL Server. Cela veut dire qu’une grosse requête ne pourra être répartie sur plusieurs micro-processeurs (ou coeurs) d’un serveur. La solution pour gagner du temps c’est alors de lancer plusieurs requêtes en parallèle pour réduire le temps d’exécution et profiter au mieux des ressource du serveur. PHP étant nativement un langage interprété mono-thread, ceci n’est pas intuitif à mettre en place. Il dispose toutefois dans son pilote PostgreSQL de commandes permettant de lancer les requêtes de manière asynchrone et de récupérer les résultats ensuite. En ouvrant plusieurs connexions simultanées cela ouvre la voie à une forme de traitement parallèle.

Logo Jelix (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/09/logo_jelix NULL.png)Si vous utilisez le framework PHP Jelix (http://jelix NULL.org/), ce plugin est simple d’utilisation puisqu’il reprend le pilote jDb PostgreSQL d’origine en lui ajoutant 3 fonctions pour gérer les requêtes asynchrones. Dans l’archive ZIP (http://xv4y NULL.radioclub NULL.asia/ftp/JELIX_JDB_PGSQL_ASY NULL.zip), se trouve un Readme en français et en anglais qui vous donne l’API et les exemples pour utiliser ce plugin.