Un wobuloscope à partir d’un Raspberry Pi et d’un DDS

MI0IOU Wobuloscope Raspberry Pi (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/10/MI0IOU_wobby1 NULL.jpg)Aujourd’hui, les “vrais techniciens” ne jurent que par l’analyseur de spectre ou l’analyseur de réseau vectoriel (VNA). Ces équipements sont devenus relativement bon marché et des versions “simplifiées” du dernier sont même à la portée de toutes les bourses radioamateurs ou presque. Toutefois, il fut un temps où ces équipements étaient rares et où le Wobuloscope était l’équipement de choix pour les amateurs. Largement suffisant pour caractériser un filtre ou un circuit oscillant, j’ai mis les mains sur un appareil vintage lorsque je préparais ma licence au radio-club RCNEG de F6KKU (merci à F6GUB et F9ZS(SK) au passage).

Tom de MI0IOU a conçu un équipement équivalent mais en le remettant à la mode grâce au Raspberry Pi et aux modules DDS AD9850 d’origine chinoise (http://asliceofraspberrypi NULL.blogspot NULL.co NULL.uk/2013/10/raspberry-pi-wobbulator-introduction NULL.html). Le RPi pilote le DDS et en fait varier la fréquence, et il effectue la lecture d’un signal “redressé” par un circuit de détection simple. Le RPi n’ayant pas d’entrée analogique, un module convertisseur analogique-numérique (ADC) est nécessaire. La couverture est uniquement pour les bandes HF, mais c’est suffisant pour la plupart d’entre nous. Des exemples de mesures sont disponibles sur le blog de MI0IOU (http://asliceofraspberrypi NULL.blogspot NULL.co NULL.uk/2013/10/using-raspberry-pi-wobbulator-to-test_28 NULL.html). Tom met aussi à disposition le code Python à installer sur le Raspberry Pi.

Je vais vous avouer que j’avais commencé à travailler sur un circuit similaire en utilisant un LaunchPad MSP430. L’idée était de reprendre mon code de contrôle de l’AD9850 (http://xv4y NULL.radioclub NULL.asia/2013/03/19/code-source-vfo-avec-dds-ad9850ad9851-et-launchpad-msp430/) et de faire la lecture avec le port ADC du micro-contrôleur. L’affichage était en texte sur l’écran d’un micro-ordinateur connecté au MSP430 part le port USB. Faute de temps libre pour ce type de projet, celui-ci est passé en voie de garage tout comme celui de kit station météo complète (http://xv4y NULL.radioclub NULL.asia/2013/02/04/station-meteo-avec-serveur-web-code-source/) avec modules sans-fil et pression atmosphérique.

Antenne active “extra-compacte” par OH7SV / OH2NLT

OK1IAK Antenne active (http://ok1iak NULL.blogspot NULL.cz/2013/10/active-ferrite-rod-antenna-by-oh7sv NULL.html)Vojtech de OK1IAK partage avec nous sa réalisation d’une antenne de réception HF active suivant un design de OH7SV modifié par OH2NLT.

L’utilisation d’une barre de ferrite permet de la rendre très compact, et suivant le choix du matériau soit performante (Amidon 61) ou soit économique (composant tchèque datant de la guerre froide). L’antenne est particulièrement bien adaptée pour la chasse au renard (ARDF).

Le circuit de pré-amplification, assez simple à construire, est accordé et utilise deux transistors faible-bruit BFR93. Pour les détails de construction, reportez-vous à la page d’origine d’OH2NLT (http://www NULL.kolumbus NULL.fi/juha NULL.niinikoski/Ferrite_antenna/Ferrite_antenna NULL.htm).

Nouveau projet de Convertisseur Analogique-Numérique Haute Performance pour SDR par Christos SV1EIA

usb2sdr (SV1EIA) photo par wb5rvz (http://xv4y NULL.radioclub NULL.asia/wp-content/uploads/2013/10/usb2sdr_wb5rvz NULL.gif)Christos, le concepteur de la carte USB2SDR et auteur de la version spéciale “transceiver SDR I/Q homemade” de PowerSDR vient de lancer un nouveau projet.

Pour financer les prototypes et l’achat des composants nécessaires à la production d’une nouvelle série de carte USB2SDR ainsi que d’une toute nouvelle génération (HPADC), il lance une levée de fonds sous forme d’une campagne de crowdfunding. (http://www NULL.indiegogo NULL.com/projects/usb2sdr-software-defined-radio-startup)

Si vous êtes intéressés pour l’aider dans ce projet et avoir les meilleures performances possibles de votre SoftRock ou autre transceiver I/Q, les souscriptions commencent de 10$ et suivant le montant offrent une réduction sur un prochain achat ou la fourniture d’une de ces cartes dès disponibilité.

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!

Comparatif entre les ordinateurs embarqués x86 Gizmo Explorer Kit (AMD) et MinnowBoard (Intel)

Gizmo Benchmarking (courtesy of Symmetry Electronics) (http://symmetryselectronics NULL.distributorpress NULL.com/2013/10/09/unboxing-the-amd-based-gizmo-explorer-kit-and-intel-minnowboard/)Le site Symmetry Electronics a publié un comparatif intéressant entre les deux cartes à ordinateurs embarqué avec architecture x86 : la Gizmo Explorer Kit (avec AMD G-Series) et la MinnowBoard (avec Intel Quark X1000). En bref, les deux cartes sont intéressantes et ont chacune des points forts et des points faibles selon les usages. Il convient donc de faire une étude précise de vos objectifs.

Les points importants :

  • le kit Gizmo Explorer est plus complet pour le même prix que la MinnowBoard
  • la MinnowBoard dispose toutefois de plus d’entrées-sorties rapides exposées pour le bricoleur
  • la Gizmo peut faire tourner des OS “courants” très simplement comme Windows 7 64-bits et Ubuntu 12.04 LTS 64-bits
  • la MinnowBoard sera limité à des OS 32-bits sur-mesure comme la distribution Linux Angström
  • Le processeur principal de la Gizmo est environ 2,5 fois plus performante que celui de la MinnowBoard

 

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).