To measure discrete events, I would prefer as unit "events per second" instead of Hz.
202 karma · joined January 2, 2025
To measure discrete events, I would prefer as unit "events per second" instead of Hz.
There is a problem in general: Units do not refer to what they count. For instance, when you have dashed road markings and you want to quantify the length of the dashes per road length you get as unit "meters per meters". And then people go and say this is unitless since the units "cancel". But for me, they do not: It stays "dash meter per road meter".
An alternative would be to construct a new function (or matrix) that is not only periodic in azimuth, but also in elevation (i.e., extend elevation to a full circle -pi to +pi). Then, one can simply compute two independent Fourie r transforms: along azimuth and along elevation. [1] The same idea works on matrices using the Discrete Fourier transform (DFT/FFT). However, you then have to accept things like that your data points are all equal at the poles.
[1] https://en.wikipedia.org/wiki/Double_Fourier_sphere_method
I liked my job at the university - independent of the final PhD. I enjoyed what I was doing. Most of the time I also enjoyed writing my dissertation, since I was given the opportunity to write about my stuff. And mostly I could write it in a way how I felt things are supposed to be explained.
However, I switched to Python during the last years.
Remote: yes
Willing to relocate: no
Technologies:
Digital signal processing, linear algebra, array signal processing, radar, C++, C#, Python, JupyterLab, Octave/Matlab, Git, Jenkins etc.
Résumé/CV:
1) PhD in direction of arrival estimation using antenna arrays
2) 8+ years as senior and/or lead developer in different environments (e.g. Music recognition, embedded devices)
3) Currently researcher in the field of Integrated Communications & Sensing (ICAS) bringing together wireless communications and radar functionalities
Email: quaternion {at} web {dot} de
Remote: Yes
Willing to relocate: No
Technologies: - Digital signal processing: linear algebra, estimation theory, statistical/Bayesian signal processing, compressed sensing and others - Programming: C++, C, C#, ARM assembly, AVX/SSE, Python, Bash, PowerShell 5/7.x, GNU Octave, Matlab - Used libraries: Boost (C++), ffmpeg, gSOAP, gRPC, libcurl, NumPy, SciPy, Pandas, PyTorch and others - Target platforms: x64, ARM Cortex M0/M3 - Tools: Git, Mercurial, SVN, CMake, GNU Make, Jenkins, Gitlab, rpmbuild - OS: GNU Linux (eg., Arch), Windows
Résumé/CV: - PhD and diploma in Electrical Engineering and Information Technology. - PhD study about digital signal processing applied to antenna arrays.
I am a software engineer and researcher with a strong background in digital signal processing. I worked in the field of music recognition (C++ & Python), in embedded systems (esp. ARM Cortex) and in the communication between control centers (ITCS systems) and public transportation vehicles. Currently I am into Integrated Communications and Sensing (ICAS) which brings together Radar and mobile communications.
I like to solve challenging problems - via software engineering, via signal processing, or via a combination of both. Linux and algorithms are topics I have a strong interest in. While I educate myself regarding other technologies like transformers and deep neural networks (e.g. applied to OFDM), and cyber security ("playing" OWASP Juice Shop).
In past jobs, I worked as a Senior Software Engineer and as a Lead Software Developer, respectively. Currently, I am a post-doc researcher at a German university.
Email: quaternion [at] web [dot] de
The problem is that your code has to work within this abstraction and can only solve problems covered by the inventors of the abstraction.
And I think twice before I use a framework. Frameworks enforce a certain way of programming which you can never be sure to match the problems you will have to solve in the future. Libraries don't do this - at least not to the extent of a framework. Libraries are composable building blocks.
Nevertheless, there may be applications where frameworks are beneficial (e.g. GNU Radio).
Zero-padding helps you to find the true position (frequency) of a peak in the DFT-spectrum. So, your frequency estimates can get better. However, the peaks of a DFT are the summits of hills that are usually much wider than compared to other techniques (like Capon or MUSIC) whose spectra tend to have much narrower hills. Zero-padding does not increase the sharpness of these hills (does not make them narrower). Likewise the DFT tends to be more noisy in the frequency domain compared to other techniques which could lead to false detections (e.g. with a CFAR variant).
You can even use these algorithms with a single snapshot (spatial smoothing).
And as the previous answer said: compressed sensing (or compressive sensing) can help as well for some non-standard cases.
Though the DFT can be implemented efficiently using the Fast Fourier Transform (FFT) algorithm, the DFT is far from being the best estimator for frequencies contained in a signal. Other estimators (like Maximum Likelihood [ML], [Root-]MUSIC, or ESPRIT) are in general far more accurate - at the cost of higher computational effort.
I was always bad at solving equations with more than 3 unknowns, since this includes enough steps to have a significant probability that I forget a sign or mix something up - even though the algorithm itself was completely clear to me.
Today I acceppted myself much more: I think my real advantages are that I am a) interested in a lot of things and b) I am enduring in reading about a topic. Even if I need to read explanations of 5 different authors to grasp something, I do so. And I care much less today than ealier. However, I still like to be faster at times.
While I think I am a decent programmer/SWE, I do not like pair programming. My path of coding is not linear and most of the stuff I type will be erased until I am confident about my solution.
And getting enough sleep is also a big issue.
My rescue was that I had a more experienced friend who knew that IIRC the compiler would choose the data type of the left operand of a comparison also for the right operand leading to potential sign switches.