Update -20121116- New Features in my software.
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 |
Update -20121114- New Features in my software.
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 |
Original post -
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... |
With this little gem of code, LiveSpectrogram - Takes successive FFTs and renders them onto the screen as gray scale, scrolling left. From Dan Ellis
dpwe@ee.columbia.edu 2010-01-15.
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 .. |
Now, it seems to work only if you have your mic line on or a headset mic on.But, if you now go to
http://spaceweatherradio.com/ and
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.... |
Just beware it will create a lot of images if the sensitivity is to low.
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 /\/\/\/\/\-----------------