Well, The dynamic level setting, was to complicated and unnecessary. The better way to detect events that helps with event visualisation is more sensitive. Even the small ones can be counted .
This has also simplified the interface controls.
A simpler interface |
A collection of shapes and sizes |
The interface now has dynamic level setting so that only high level events are triggered. Found a better way to detect events, helps with event visualisation . Added a Pingo Meter to the right hand side. ...
Update -20121112- New Features in my software.
The interface now has dynamic level setting so that only high level events are triggered. Also added a colourgram counter. A few more features in mind....
Update -20121025 - Mostly small and a few large meteors
Add caption |
Update 20121023 - If you don't want to do the programing with my little script.
Then this is the software that the big guys are using , ARGO can be found here
http://www.sdradio.eu/weaksignals/argo/index.html
It works with the Spaceweather audio stream just as mine does. Have fun......
UPDate: 20121022 - While watching the Audio trace from Space Weather Radio, this large burst happened by. Not sure what type of burst this was, usually they are spikes.
Large dispersed meteor trail.... |
What Roswell Radio saw......Image rights to Roswell Meteor |
Remember my post "Fun With Geminids 2010". It was a bit complicated to get working.
I have been using Processing.org software lately, lots of fun. There are a few examples of how to show an audio spectra gram in real time.
Me whistling... |
I wrapped a simple interface and triggered image saver around it.
I have it running now, but the big meteors just don't want to happen, so here's a few I have captured during testing.
Seven meteors across 1 hour... |
A medium size Meteor .. |
turn on the http://topaz.streamguys.tv/~spaceweather/ audio stream.
It will trigger on the larger Meteors, if you adjust the sensitivity correctly.
A larger longer Meteor trace.... |
And if you make a lot of noise, whistle or speak, it will trigger also.
You will need to be vwary vwary quite when hunting radio meteors....
How to make for your self - Download Processing.org software, load the following text into a new sketch and save. Make a data directory under this sketch folder. Then run it.
The images appear in the sketch folder.
Have fun...... try to catch a few ..... Orionids Oct 21-22, 2012
.......hat tip to http://astroblogger.blogspot.com.au/...
---------------------\/\/\/\/\/\/ cut here \/\/\/\/\/\/ -----------------
/**
*** Radio Meteor Counter **** agw 20121021 ****
*** modified from
*
* LiveSpectrogram
* Takes successive FFTs and renders them onto the screen as grayscale, scrolling left.
*
* Dan Ellis dpwe@ee.columbia.edu 2010-01-15
*/
import ddf.minim.analysis.*;
import ddf.minim.*;
Minim minim;
AudioInput in;
FFT fft;
int colmax = 400;
int rowmax = 256;
int[][] sgram = new int[rowmax][colmax];
int[][] sgramb = new int[rowmax][colmax+1];
int col;
int leftedge;
int count = 0 ;
int sgwt = 0 ;
int sens = 155;
int lvl = 0;
int lvlm = 0;
int trig = 99 ;
String mode = "AUTO";
//
PFont fontA = createFont("Verdana", 12);
//
void setup()
{
size(colmax+ 150, rowmax+125, P3D);
// colorMode(RGB, 255);
background(0);
noStroke();
frameRate(100);
//
fontA = loadFont("CourierNew-12.vlw");
//
textFont(fontA, 12);
textMode(SCREEN);
textAlign(LEFT);
//
//
minim = new Minim(this);
in = minim.getLineIn(Minim.STEREO,2048);
fft = new FFT(in.bufferSize(), in.sampleRate());
fft.window(FFT.HAMMING);
}
void draw()
{
// background(0);
// perform a forward FFT on the samples in the input buffer
fft.forward(in.mix);
for(int i = 0; i < rowmax /* fft.specSize() */; i++)
{
// fill in the new column of spectral values
sgram[i][col] = (int)Math.round(Math.max(0,2*20*Math.log10(1000*fft.getBand(i))));
sgramb[i][col+1] = (int)Math.round(Math.max(0,2*20*Math.log10(1000*fft.getBand(i))));
//
if ( sgramb[i][col] >= sens) {
//
count++;
trig = 10;
//
}
fill(0, sgram[i][col], 255);
rect(460, 381, 5, -((sgram[i][col]*2)));
//
//
}
// next time will be the next column
col = col + 1;
// wrap back to the first column when we get to the end
if (col == colmax) { col = 0; }
// Draw points.
// leftedge is the column in the ring-filled array that is drawn at the extreme left
// start from there, and draw to the end of the array
for (int i = 0; i < colmax-leftedge; i++) {
for (int j = 0; j < rowmax; j++) {
//
// sgwt =(sgram[j][i+leftedge])-(sgramb[j][255]);
//stroke(sgwt);
stroke(sgram[j][i+leftedge]);
//
point(i,height-j);
//rect(i,height-j,2,2);
}
}
// Draw the rest of the image as the beginning of the array (up to leftedge)
for (int i = 0; i < leftedge; i++) {
for (int j = 0; j < rowmax; j++) {
//
stroke(sgram[j][i]);
point(i+colmax-leftedge,height-j);
//rect(i+colmax-leftedge,height-j,2,2);
}
}
// Next time around, we move the left edge over by one, to have the whole thing
// scroll left
leftedge = leftedge + 1;
// Make sure it wraps around
if (leftedge == colmax) { leftedge = 0; }
// Add frequency axis labels
int x = colmax + 5; // to right of spectrogram display
stroke(255);
line(x,0,x,height); // vertical line
// Make text appear centered relative to specified x,y point
textAlign(LEFT,CENTER);
for (float freq = 0.0; freq < in.sampleRate()/2; freq += 500.0) {
int y = height - fft.freqToIndex(freq); // which bin holds this frequency?
line(x,y,x+3,y); // add tick mark
text(Math.round(freq)+" Hz", x+5, y); // add text label
}
// zoom around mouse
//copy((mouseX-25), (mouseY-25), 50, 50, 1, 1, 100, 100);
fill(0, 0, 0);
rect(1, 1, 465, 120);
fill(255, 255, 255);
//
lvlm = mouseY-125;
if(lvlm < 0){ lvlm = 0 ;}
if (lvlm > 255) { lvlm =255;}
lvl = sgramb[lvlm][395] ;
//
text(mouseX+" "+mouseY+" "+lvl, 10,10 );
userinfo() ;
//text( date()+" "+time());
// 395 338 main ffequency location.
if (trig <= 10) {
copy(335, 125, 75, 256, 475, 125, 75, 256);
fill(0, 0, 0);
rect(475, 1, 72, 120);
fill(255, 255, 255);
text(mode+"\nSENS\n"+sens+"\nMtR\n"+count+"\n"+trig, 480,50);
trig-=1 ;
//
if (trig == 1) {
saveimg();
trig = 0 ;
}
}
if (trig <= 0) {
trig = 99 ;
}
}
void keyPressed() {
//
if (key =='x') {
exit();
}
if (key =='c') {
count = 0;
background(0);
text(mode+"\nSENS\n"+sens+"\nMtR\n"+count, 480,50);
}
if (key =='-') {
sens-=1 ;
background(0);
text(mode+"\nSENS\n"+sens+"\nMtR\n"+count, 480,50);
}
if (key =='=') {
sens+=1 ;
background(0);
text(mode+"\nSENS\n"+sens+"\nMtR\n"+count, 480,50);
}
if (key =='m') {
if (mode == "AUTO") { mode = "MANU"; }
else { mode = "AUTO"; }
background(0);
text(mode+"\nSENS\n"+sens+"\nMtR\n"+count, 480,50);
}
}
void saveimg() {
saveFrame("Meteor-####.jpg");
}
void userinfo() {
//
textFont(fontA, 14);
text("RADIO METEOR COUNTER\n"+"[E(x)it][Sensitivity -(-)/+(=)]\n"+"[(C)lear counter][(M)ode AUTO/MANU ]", 50, 50 );
textFont(fontA, 12);
//
}
void stop()
{
// always close Minim audio classes when you finish with them
in.close();
minim.stop();
super.stop();
}
---------------------/\/\/\/\/\ cut here /\/\/\/\/\-----------------