/r/DSP
Anything related to digital signal processing (DSP), including image and video processing (papers, books, questions, hardware, algorithms, news, etc.)
Interesting technical papers or articles are particularly welcome!
/r/DSP
Hey guys, super sorry if this sort of post isn't really allowed or is looked down upon here. I just wanted some feedback on my resume, and things it could be lacking, as I am currently pursuing a full time job in signal processing. Immediately I can see I am lacking in FPGA experience -- I'm not sure how to fix that. I have one semester left of my masters program so I've looked into courses on that -- but other than that, all I have to fall back on are my basic digital logic courses and a computer systems course. I feel comfortable programming in C/C++ so there's that.
How would I go about doing this? I'm unsure of the voltage but it should be low due to the SMD transistors, I've had it apart to know that it is a powered device and the pictures posted will show that, the goal is to plug it into a standard microphone 3.5mm jack, with whatever circuitry I need to send power into it and not send that power to the microphone port. The original use is a car microphone for onstar and I'm using it for a similar purpose in the same location.
Hi guys, is someone here who is familiar with the topic I mentioned above? If someone does it professionally I’d be willing to pay as well. Please hit me up :)
Edit: allows = allpass*
I am reading from temperature sensor. The power supply is adding the noise and I can't fix it because I'm a software developer. I am sampling the sensor at 10 hz and averaging the last 10 readings every second. Then I use a low pass filter for the temperature. Is this too much?
The low pass filter I'm using is this.
T_filtered = ((new_temp × alpha) + old_filtered_temp) / (1 + alpha)
alpha = 0.4
I am having some problems with my digital filter design exercises. When designing a FIR bandpass filter in the continuous-time domain, we calculate the cutoff frequency (omegac) by averaging two frequencies f1 and f2. Specifically, f1 is calculated as the average of fp1 and fp2, and the same process is used for f2 with fs1 and fs2. ( fp is passband cutoff frequency and fs is stopband cutoff frequency)
However, as far as I know, we can't calculate omegac this way for an IIR bandpass filter. My question is: How do we calculate omegac (the cutoff frequency) for an IIR bandpass filter? Do we need to calculate two transfer functions for each cutoff frequency? I am very confused about this. Please help me!
Btw, Can someone help me determine the order of the filter for the given exercise? i'm not really sure about my answer ( 6th order is what i calculated )
Hello, I am working on a project involving an ESP32 and a WM8960 codec. The goal of the project is to add a reverb effect to an incoming audio signal. I looked into the Faust language for the reverb effect and tried to follow the tutorial named "DSP on the ESP32 With Faust" on the Faust documentation website but failed to make it work with my codec as it is not supported by Faust.
Does anyone know how I could make my faust program compatible with my codec ? I'm new to DSP so if you know any alternatives to faust for a reverb effect that are easier to implement for beginners please let me know.
Thank you for taking the time to read my question!
I am a university student who has just exposed to DSP, namely laplace and z transform, I will be sitting for a final exam which will involves these two for sure, I would appreciate any useful advice from the community 🙏
I'm working on a speaker diarization system using GStreamer for audio preprocessing, followed by PyAnnote 3.0 for segmentation (it can't handle parallel speech), WeSpeaker (wespeaker_en_voxceleb_CAM) for speaker identification, and Whisper small model for transcription (in Rust, I use gstreamer-rs).
Since the performance of the models is limited, I m looking for signal processing insights to improve accuracy of speaker identification. Actually currently achieving ~80% accuracy but seeking to enhance this through better DSP techniques. (code I work)
Current Implementation:
Current Challenges:
Questions:
gstreamer
's following pipeline:Using audioqueue -> audioamplify -> audioconvert -> audioresample -> capsfilter (16kHz, mono, F32LE)
additional info:
Using gstreamer, I tried improving with high-quality resampling (kaiser method, full sinc table, cubic interpolation) - Experimented with webrtcdsp for noise suppression and echo cancellation. But Results vary between different video sources. etc: Sometimes kaiser gives better results but sometimes not. So while some videos produce great diarization results while others perform poorly after such normalization methods.
Hello,
I am a beginner in dsp and my math background is very very far from understanding FFT completly. I am a sound engineer student and i make music.
I code sometime but only things like website and scripts.
My dilema is that i want to write plugins but im not a pro dsp like you guys. I think (sorry if i judge) you are either very passionate or working in dsp field. So writing plugins is necessary for you. You study it very hard.
For my case, i wont work in dsp. I dont love it as much, im just interested. The thing is i am a very creative guy and i like to make things that are unique to me. When i make songs, it could be the same 4/4 and minor song but its mine, my sound design.
If i build an eq or a distorsion. How is it going to be differente than any distorsion of the market ?
Video games for example is a field where i can differentiate myself with character design, stories..
I hope you understand what i feel because ive been dreaming of writing a plugin since years. I love audio.
And i know that it requires to study dsp, but why the hell im doing dsp when i should study composition , rec, mix and mastering. I feel like i got too much interests (but thats an another existential topic).
If I have a PSD if a variable at 1 node (say PSD1) and PSD of the same variable at node 2 (say PSD2).
How do I compute the relative PSD?
Hello!
I am working on an audio plugin that morphs two sounds together. I would like to create a minimum phase filter from a given magnitude spectrum from the sidechain and apply it to the main signal in the frequency domain. I have some parameters that should ideally be met. My input is a magnitude spectrum of positive frequencies from 0 to nyquist. I want to use a hilbert transform to create a minimum phase frequency response from here, and convolve this impulse with the main audio in the frequency domain. I do not understand how to create the minimum phase impulse from the hilbert transform, but I am fairly confident it is possible from sources I have found online. I am also curious how to apply this impulse to the main signal. Do I just use complex multiplication to convolve them in the frequency domain?
Hey everyone, I do not know if this is the place to ask this but I am learning about the Iterative Shrinkage Thresholding Algorithm for a sparse signal recovery problem. The signal x is supposed to be reconstructed from observation y = Ax + w where A is a sensing matrix and w is a Gaussian noise vector.
The problem is recast in its Lasso formulation as follows:$min_x (1/2) ||y-Ax||2.^ 2 + (lambda)*||x||1$
So the objective function is clearly convex .
The ISTA algorithm is a simple recursion:
I tried working this out with some example values for A, x, steo size B and a threshold T. A couple of iterations in, I realized I kept getting the same result for s_t with every iteration. ISTA is also so formulated that one cannot change the step size B or shrinkage threshold T. Naturally, I wondered if such a problem would then ever converge at all and upon probing around, I learnt that ISTA ALWAYS CONVERGES regardless of the chosen B and T. The question is not whether it converges but really how fast it converges. As I was exploring this further, I learnt that this convergence is guaranteed because the problem satisfies some global constraints, one of them being that the 0 < step size B < 1/L where L is the Lipschitz constant. The definition of L I am seeing most often is: A function f satisfies the Lipschitz condition on an interval [a,b] if there exists a constant L>0 such that |f(x1) - f(x2)| < L |x1-x2| for all x1, x2 belonging to [a,b]. I am struggling to understand this, So this L has to be some constant value within the closed interval [a,b] so that the difference in the function values at two points within this interval must always be lesser than L times the distance between the two points? I can see this would possibly limit the value of the function at these two points to be small enough that the function is close to being completely smooth there.
But ChatGPT brought this up:
Imagine you have a curve that represents the gradient of a function. The Lipschitz constant L is like an upper bound on how steep that curve can get. For quadratic functions like ∥y−Ax∥2.^ 2, this constant is related to the maximum singular value (or eigenvalue) of A^T.A.
If you think of it like hiking down a hill, L tells you the steepest possible slope on the hill. If you take too big a step, you could "overshoot" the bottom of the hill. But if you keep your step size smaller than 1/L, you will never overshoot, and you will eventually reach the bottom of the valley (the global minimum).
Please help me understand why we take 1/L? Why would we overshoot the minima if we took a bigger stepsize?
I'm a newbie to DSP and have been reading through the first chapter of Vadim Zavalishin's The Art Of VA Filter Design. I understand most of it so far, but I'm a little confused about this formula on the bottom of page 4, describing how to represent a Fourier series by a Fourier integral:
I think I understand what this is doing in principal - by convolving X[n] with the Dirac Delta Function, it defines an X(w) such that the Fourier integral still produces a discrete spectrum matching that of the original series? From what I can tell "wf" is the fundamental radian frequency of the original series, while "w" is the (also radian frequency) variable of integration, so it makes sense to me that the origin is where w=n*wf. What I don't understand is why the result needs to be converted to radians by multiplying by 2pi. Why is this necessary when both X[n] and X(w) are just complex amplitudes?
Thanks for any help. Don't have much of a math background so this is still pretty new to me.
Hi fellow nerds,
For anyone interested, I've created an open-source (CC0) 2-D VBAP library for spatializing audio sources across a speaker array using gain interpolation.
It's a drag'n'drop library written in portable C17 with no dependencies.
Here's a link to the GitHub repo: https://github.com/drbafflegab/vbap.
Any feedback/complaints/suggestions would be much appreciated!
https://gist.github.com/psyon/be3b163dab73905c72b3f091a4e33f4e
https://mgasior.web.cern.ch/pap/biw2004_poster.pdf
I have been doing some FFT tests, and currently playing with interpolation. I use the little program above for testing. It generates a pure cosine wave, and then runs FFT on it. It has options for different sample rates, sample length, ADC resolution (bits), frequency, and stuff. I've always been under the assumption, that if I generate a sine wave on the exact fundamental frequency of an FFT bin, that the bins on either side of it would be of equal value. Lookign at the paper I linked to about interpolation, that appears to be what is expected there as well. There is a bin at 1007.8125 Hz, so I generate a sine wave at that frequency, and the bins on either side are pretty close, but off enough that the interpolation gets skewed a bit. The higher I go in frequency, the more offset there appears to be. At 10007.8125 Hz (an extra zero in there), the difference on the two side bins is more pronounced, and the interpolation is skewed even further. In order for the side bins to be equal, and the interpolation to think it's the fundamental, I have to generate a sine that is at 10009.6953. It seeems the closer I get to half the sample rate, the larger the errror is. If I change the sampling rate, and use the same frequency, the error is reduced.
Error in frequencies that aren't exact bins can be further off. Even being off by 10hz is probably not an issue, but I am just curious if this is just a limitation of discreet FFT, or if something is off in my code because I don't understand something correctly.
Old guy, Amateur Radio licensee looking for advice and a reasonably priced DSP eval board and software to experiment with discrete-time filtering of audio signals (band-limited to about 2.5-3.0kHz). Would be nice if there were examples in the public domain for the board, and perhaps accompanying text-book support for the board as well. Years and years ago (maybe 3 decades ha ha), I received some formal DSP theory / instruction using Oppenheim and Schafer's "Discrete-Time Signal Processing", and Rabiner and Schafer's "Digital Processing of Speech Signals" and wish to experiment while my brain still works.
I am the beginner in DSP and i'm confused with some DSP questions, please help me answer it. (1) In real filter design, the reason of using the maximum order of element system of two. Does it make our filter more stable? Is there any theorem or formula to prove it?. (2) What is the minimum phase filter? and What is the meaning of using the minimum phase filter. (3) Why are the two ripples in the stop- band and the passband equal to each other when using the window method?. I appreciate all your help
I was looking at some code that computes amplitude and phase after an FFT. For phase unwrapping, the FFT was zero-padded up to 20x original length! A comment in code said this was needed to obtain fine sampling in frequency domain for accurate unwrapping. I know I have seen phase unwrapping in various packages where you see 360 degree jumps in the trend. Is such overkill necessary?
This course seems to be the only learning resource I've been able to find that seems to cover DSP and the application of these concepts to audio processing at an introductory level. The course price is a little steep however, and I haven't been able to find any feedback/reviews of the course online (aside from the testimonies on the site). Can anyone who has purchased this course speak to the quality of the content?
I'm currently in my second semester of grad school, I would like to work in signal processing. My undergrad is also in mathematics and I've taken a few physics/engineering courses on waves, vibrations, em etc. I'm doing my masters thesis on the change-point problem, and my coursework and research interests are primarily in probability.
I've taken a look at some job descriptions and its definitely the type of technical work I would like to do. The main concern I have is that I'm not seeing a very straightforward "entry level" feeder role into DSP roles, all of them are requiring around 3+ yoe. So I'm hoping to find some insight on what those roles might be.
My hard skills consist of:
- intermediate level C++, R, and Python programming
- basic MatLab programming, mainly because I haven't had a reason to use it so far
- strong computational skills, optimization, linear programming, stochastic calculus, transforms
- US Citizen, since I know its relevant
How would this compare to a candidate with an EE background, and what knowledge gaps would I have to fill in to be competitive with such a candidate? Finally If anyone thinks they know of any other niche roles that my profile could be a good fit for please let me know. Thanks in advance.
TLDR: Graduate math student, wants to work in DSP/adjacent fields, all advice/criticism is welcome.
I’m exploring state-of-the-art research on beamforming, particularly for robotics applications involving sound localization and voice command processing. Does anyone have insights into recent advancements in beamforming techniques optimized for robotic environments? Additionally, I’m looking for guidance on how to whiten the cross-correlation signal effectively when dealing with human speech—any recommended methods or papers?
I notice that when I design a BPF & LPF using butter function.
With the same order, BPF will need double the number of coefficients compared with LPF.
Is it correct ?
this is in the context of writing audio effects plugins
is one faster than the other (even with inlining)? Is one easier to maintain than the other?
I feel like most of the process() functions I see in classes for audio components take a pointer to an array and a size. Is this for performance reasons? Also anecdotally, I can say that certain effects that utilized ring buffers were easier to implement with a process() function that worked on a single float at a time. Is it usually easier to implement process() functions in this way?
I’m an undergraduate CS student and would like to learn more about the fundamentals of DSP.
Hi guys,
I have an excel sheet from a vibration monitor that has timestamps and particle velocities columns. I want to perform an FFT to get the data in frequencies and amplitude. I have tried using the excel packages and also coding it in python to perform and plot the FFT, but I cant see that the results make any sense. Am i trying to do something impossible here because vibrations signals include so much noise? Thanks in advance for any help and replies.
Best regards
I've been trying to do research on how to literally hookup the GPI/O on a DSP and start using it, but there are no videos about it, or even a name of the cables that are used for hooking up the GPI/O ports on a DSP. I feel like I am missing something obvious, any help?
On a Blu-100 DSP: https://bssaudio.com/en-US/products/blu-100#product-thumbnails-2
On the back there are logic input and outputs, what kind of wires are those? Is it just regular power wires? Some special connector?