[OpenTRV-dev] Audio/FFT thoughts

Mike Stirling EMAIL ADDRESS HIDDEN
Tue Jun 11 10:56:03 BST 2013


Look up "infinite impulse response filter". You may be able to implement a bandpass function as your decimation filter, although with IIR you can't skip the calculation of the "in-between" samples like you can with FIR.

Beware: IIR filters are sensitive to errors in the coefficients. You might want to do a simulation in <your preferred mathematical package> first. You should implement it using fixed-point arithmetic as floats will be too expensive.

Mike
 
----------------original message-----------------
From: "Damon Hart-Davis" EMAIL ADDRESS HIDDEN 
To: "Closed list for developer discussions" EMAIL ADDRESS HIDDEN 
Date: Tue, 11 Jun 2013 10:07:09 +0100
-------------------------------------------------
 
 
> Hi,
> 
> OK, *that's* a good idea, thanks!
> 
> I would like to screen out radiator gurglings, etc, which was why I thought that I 
> might need more precision.
> 
> But maybe I can do some simple DC removal and band-pass filtering.
> 
> Is there anything as simple as the exponential filtering to do the high-pass 
> element in software?
> 
> Rgds
> 
> Damon
> 
> 
> 
> On 11 Jun 2013, at 09:51, Mike Stirling wrote:
> 
>> What are you planning on doing in the frequency domain? If you have already 
>> filtered to 4 kHz as part of your decimation step then why not just integrate the 
>> square of your 64 samples to give you an indication of voice band power?
>> 
>> Mike
>> 
>> ----------------original message-----------------
>> From: "Damon Hart-Davis" EMAIL ADDRESS HIDDEN 
>> To: "Closed list for developer discussions" 
>> EMAIL ADDRESS HIDDEN 
>> Date: Tue, 11 Jun 2013 08:40:30 +0100
>> -------------------------------------------------
>> 
>> 
>>> Hi,
>>> 
>>> Some initial thoughts on audio occupancy detection with the ATmega, 
>>> listening 
>>> out for voice (of a human or their radio/TV being on). I have done no 
>>> feasibility 
>>> testing yet.
>>> 
>>> My current plan is to (~8-bit) sample with the ADC at 16kHz, in bursts of 
>>> about 8ms 
>>> (between RTC ticks), using a simple exponential filter to reduce to 8kHz 
>>> samples. Take 64 samples which should allow me to examine frequencies in 
>>> the 4kHz 
>>> to 500Hz band which probably covers most of "voice".
>>> 
>>> 1) I think that I can probably achieve this sampling rate even at 1MHz CPU 
>>> clock 
>>> (default Arduino ADC sample rate at 16MHz CPU clock seems to be 9600Hz and I 
>>> have a 
>>> prescaler to play with).
>>> 
>>> 2) I only intend to listen when I'm otherwise in danger of thinking the room 
>>> 
>>> unoccupied, and in any case on a low duty cycle to save juice (eg one 8ms 
>>> sample 
>>> block per minute or less for example).
>>> 
>>> 3) I have headroom to boost the CPU speed dynamically to 4MHz if I need to (I 
>>> already 
>>> dynamically lower it when I need to).
>>> 
>>> What is hideously silly about this plan already?
>>> 
>>> Rgds
>>> 
>>> Damon
>>> 
>>> 
>>> _______________________________________________
>>> OpenTRV-dev mailing list
>>> EMAIL ADDRESS HIDDEN 
>>> http://lists.opentrv.org.uk/listinfo/opentrv-dev
>>> 
>> 
>> -- 
>> 
>> 
>> 
>> _______________________________________________
>> OpenTRV-dev mailing list
>> EMAIL ADDRESS HIDDEN 
>> http://lists.opentrv.org.uk/listinfo/opentrv-dev
>> 
> 
> _______________________________________________
> OpenTRV-dev mailing list
> EMAIL ADDRESS HIDDEN 
> http://lists.opentrv.org.uk/listinfo/opentrv-dev
> 

-- 

 



More information about the OpenTRV-dev mailing list