-
mattgomes28
@whale-av Thanks man, I ended up figuring out how to use [sigmund~] for that sort of stuff with the help of a friend. Turns out there's a lot of unpacking business that I didn't know about haha
-
mattgomes28
Hi again guys. I was wondering how I could analyse the envelope spectrum of a signal, and find the peaks of this signal. What I am trying to do is to estimate the formants of speech by finding the peaks of the envelope spectrum in given frequency ranges, after the signal has been passed through [lop~] and [hip~], leaving only the desired frequencies to analyse. Currently, I am having to use [bp~] and [env~] to manually create these "peaks" (sort of like the fourier transform), like shown in the puredata tutorial website, but I was wondering whether I could create these partials dynamically and then get the frequency where the peak (maximum) occurs. I read a little bit about the [sigmun~] object, but I didn't quite get it and I can't really find any tutorials on it.
-
mattgomes28
@gusgus Generating square waves can bedone with [sgn~], it turns positive signals into 1 and negatives into -1. Now, combining this with [osc~] will get you square waves with a consistent pulse (also, [block~] can change the size of samples in your canvas, so it might be worth having a look at that]. In addition, some pretty easy maths can be done to get the square waves between 0 and 1. This is a screenshot of pd code to create a said square wave.
I know this is not exactly what you're looking for, but hopefully it's a starting point and you will be able to figure out the maths you need for the rest of it. Also, code was uploaded in the link here. square_waves.pd
-
-
mattgomes28
@seb-harmonik.ar This is so far the best solution! Thank you, it worked like a charm.
-
mattgomes28
@whale-av Ah I see, but I was trying to avoid using until and tabread as I'm working with real time data, tab_sum seemed to work really well but has compatibility issues.
-
mattgomes28
@whale-av Hi mate, I have been trying to work with [env~ 128 64], however I tend to get values like 90 out of this object when really the zero crossing should be low (like at most 5 out of 64 samples). I'm not entirely sure what maths I need to scale it to the proper range. Do you have any ideas? The screenshot is Note that the [tab_sum] function is behaving weirdly, it loads fine when I open the help for iem/tab_sum then paste it into my abstraction, but when I close Pd and reopen it, it goes red saying "couldn't create...", to which I made a post about but no one seems to know a fix.
-
mattgomes28
@whale-av That makes a lot of sense! I'm fairly new to Pd, hence I haven't got much experience with all the object. Thank you very much tho!
-
mattgomes28
Hi guys,
I am new to Pd, and I have just implemented a function to calculate the zero crossings. The problem is, I am using the [tab_sum] object from the [iem] library which worked fine, however, when I close Pd and open it again, and open my abstraction, the [tab_sum] object becomes red with the error "couldn't create", and Pd only recognises it when I open the help page for this object from the help window.
Any ideas for what is happening?
-
mattgomes28
Hi guys,
So I have been implementing a zero crossing rate detector in Pd. I am currently turning the signal into a square wave (-1s and 1s) and working out the difference between successive samples, then using [fexpr~] in order to check whether this difference is more than 0 in which I turn the block of 64 samples into a block of 0s and 1s (1 means a zero crossing).
All I have to do now is to sum the 1s in that block, but I'm having problems in doing that as I am new to Pd, and I don't really want to use [fexpr~] again as it's computationally intensive.
Has anyone got a solution for this?