Hi list, a bit hard to explain in a few words what i want to do, so i try to describe it a bit
I got an array which gets its information via tabsend~ from a signal (size of array and blocksize of signal are equal but changeable, like a 64-array and a 64-signal or a 1024-array and a 1024-signal)
every block of the Signal looks the same (same shape), with only a difference caused by noise What i want to do is average the Signal by using like 100 Blocks of it and build a mean Block out of them All average objects like average~ or mavarage~ don't work for me cause they calculate only one single value which represents the mean of one signal block, but not the mean block over several blocks
to explain it with an example imagine a sine Signal of appropriate frequency (like 44100/1024 Hz to fit into a 1024-array) with some added white noise with maverage~ the result would be 0 with the average function i need the result would be a clear sine without noise (if you average over enough blocks)
i tried to realize it with the FIR~ object and an array with all values set to 1 ... and it seemed to work greater array leads to a average of more blocks, but the FIR~ object does some weird things, like shifting my signal which makes it not usable for me
it would be great if someone of you got an idea for me how to solve this problem
thx in advance Andreas
Hallo!
to explain it with an example imagine a sine Signal of appropriate frequency (like 44100/1024 Hz to fit into a 1024-array) with some added white noise with maverage~ the result would be 0 with the average function i need the result would be a clear sine without noise (if you average over enough blocks)
hm, I don't know if I understand what you want, but maybe you want to only leave correlated signals ?
E.g. noise is highly uncorrelated ...
i tried to realize it with the FIR~ object and an array with all values set to 1 ... and it seemed to work greater array leads to a average of more blocks, but the FIR~ object does some weird things, like shifting my signal which makes it not usable for me
okay, I understand ...
it would be great if someone of you got an idea for me how to solve this problem
what do you want to do with that - only removing noise from a signal ?
LG Georg
Georg Holzmann schrieb:
Hallo!
to explain it with an example imagine a sine Signal of appropriate frequency (like 44100/1024 Hz to fit into a 1024-array) with some added white noise with maverage~ the result would be 0 with the average function i need the result would be a clear sine without noise (if you average over enough blocks)
hm, I don't know if I understand what you want, but maybe you want to only leave correlated signals ?
E.g. noise is highly uncorrelated ...
i tried to realize it with the FIR~ object and an array with all values set to 1 ... and it seemed to work greater array leads to a average of more blocks, but the FIR~ object does some weird things, like shifting my signal which makes it not usable for me
okay, I understand ...
it would be great if someone of you got an idea for me how to solve this problem
what do you want to do with that - only removing noise from a signal ?
my signal is the magnitude of a frequency response of a filter, like a digital pd filter (lop~,lp1~,lp2~) or a real filter connected to my soundcard using filters with a high attenuation (like >60dB) results in a noisy signal at that frequency parts to make the result looking better i'm searching for a function to average this jittering out (like a function most hardware oscilloscopes have) i don't think that a correlating function would help me with that with *** http://dict.leo.org/ende?lp=ende&p=/gQPU.&search=attenuation* |inlet~| | |biquad~ 0 0 1 1 1| | | |/~ 3| | |outlet~|
i can avarage over three blocks, but i need more than that maybe a recursive solution could help me too but i'm not sure how to do that cause looping is not allowed in pd
Hallo!
to make the result looking better i'm searching for a function to average this jittering out (like a function most hardware oscilloscopes have)
[...]
i can avarage over three blocks, but i need more than that maybe a recursive solution could help me too but i'm not sure how to do that cause looping is not allowed in pd
Ah, okay, I think you mean a moving average filter ?
You can do that e.g. with [z~] from zexy, or directly with [maverage~] in iemlib ! It's also explained here: http://www.dspguide.com/ch15.htm
LG Georg
Georg Holzmann schrieb:
Hallo!
to explain it with an example imagine a sine Signal of appropriate frequency (like 44100/1024 Hz to fit into a 1024-array) with some added white noise with maverage~ the result would be 0 with the average function i need the result would be a clear sine without noise (if you average over enough blocks)
hm, I don't know if I understand what you want, but maybe you want to only leave correlated signals ?
E.g. noise is highly uncorrelated ...
i tried to realize it with the FIR~ object and an array with all values set to 1 ... and it seemed to work greater array leads to a average of more blocks, but the FIR~ object does some weird things, like shifting my signal which makes it not usable for me
okay, I understand ...
ok, now i know why FIR~ didn't work for me, the delay is in samples not in blocks (of course) so what i need is a patch with something like that (for a blocksize of 1024)
|inlet~|
|\ \
||z~ 1024| |z~ 2048| |z~ 3072| ... (n-times)
| / / /
|/ / /
|
|/~ n|
|
|outlet~|
it works this way, but is a bit hard to handle i appretiate any hints for an easier implementation of this
How about something like this
[inlet~] [delread whatever] | / [+~] | [bang~] [/~ 1] [1 ] [+ 1] (the object 1 is a float with default value 1) | [tabwrite~ result] [delwrite whatever block_size_in_ms]
This is meant to be a recursive way of adding them up. You'll just have to be able to start and stop it at the right time. you might be able to use [tabplay~ result] instead of delwrite and delread good luck! Chuck