The Stack Overflow podcast is back! Listen to an interview with our new CEO.
13

If you are keeping to "standard algorithms" like IIR, FIR, radix-2 or 4 FFT (ie stuff that fits DSP architectures well without much control flow), you can try this: Count up how many "multiply accumulates" you need per second in all your algorithms. < 10 million you can probably get a fast microcontroller to do the job (or even a slow one if you are &...


11

As far as I know, ARM should be considered an architecture rather than a platform. However, the question is quite relevant as to what platform to use for RT signal (in this case audio) processing. You could begin by asking following questions, not in strict order: How much time do I have for the implementation? What are my power constraints? What ...


10

Oppenheim and Willsky's Signals and Systems or Lathi's Linear Systems and Signals are intended for Sophomores who have only a single semester of differential equations under their belts, so it is a bit unfair to criticize them for leaving out the functional analysis and the conformal mapping. At the sophomore level my favorite book is Siebert's Circuits, ...


10

The concept is based on the convolution theorem, which states that for two signals $x(t)$ and $y(t)$, the product of their Fourier transforms $X(f)$ and $Y(f)$ is equal to the Fourier transform of the convolution of the two signals. That is: $$ \mathcal{F}\{x(t) * y(t)\} = \mathcal{F}\{x(t)\}\mathcal{F}\{y(t)\} $$ You can read more on the derivation of ...


9

To be honest, most people end up doing something else other than what they directly study. The career follows the job you get. Get a good background in your departments core strengths. you really can’t anticipate what skills you will eventually develop with precision. Soft skills are actually important.


8

Q format numbers are fixed-point, which means they can be manipulated by integer ALUs, rather than needing to use a floating-point unit. In a DSP setting, this is useful for greater speed and lower power consumption, since fixed-point arithmetic is much simpler than floating-point. On the other hand, the main advantage of using a floating-point ...


8

I usually do this by creating a low pass filter that entirely passes through the signal that I want to delay. I create the LPF "manually" by creating a windowed sinc function. Something along the lines of- filt = sinc(-80:.8:80); filt = filt .* hamming(length(filt)).'; This gets you a filter that passes about 80% of the nyquist region (the 80% is set by ...


7

The PCM values are proportional to the sound pressure. 8-bit PCM is stored with an offset of 128, so PCM coded values from 0 to 255 code for 'pressure values' from -128 to 127. These values are often normalized to the range -1.0..+1.0. The PCM values are linear representation of the sound pressure, and a log operation is only required if you want to express ...


7

When I interview people, my questions depend a lot on the CV they've submitted. If they're fresh from university, I am much more interested in whether they have ever heard of some of the basic image processing concepts: What is their definition of noise and background? What does a Gaussian filter do? And of course, I want to know if they know how to ...


7

Octave is a multi-platform open source math and matrix toolkit. It has a command line interpreter aimed to be very similar to MATLAB, but there is also a C++ API available for use. Since you refer to signal processing in contrast to image processing, I assume you mean audio processing, so you might need to look into the "signal" and "audio" packages in ...


7

If your signal is real-valued, then it's spectrum is conjugate symmetric. That means, that negative frequencies (or frequencies from $\frac{f_s}{2}$ up to $f_s$) are mirrored. Thus we can always neglect frequencies above Nyquist range. Although, if your signal is complex valued, then such symmetry won't exist, and frequencies above $\frac{f_s}{2}$ contain ...


6

You can do a lot for "free" by working with python/numpy. You can work with .wav files. Most computers have some kind of sound proceseeing hardware for audio I/O, but you may want to get a sound card if you're computer doesn't already have this. You can record audio for processing using Windows Sound Recorder. Numpy has tools for importing and exporting ....


6

Since what interests you is the "embedded system" part, and since you have a low budget (this excludes anything that requires proprietary compilers), I'd recommend building yourself a board with an ARM MCU and a codec, like this one. There's less than $50 of parts - the processor, the codec and the bare minimum to get them to work. I'm recommending this ...


6

Essentially, the reason why you need two tones is to ensure that a normal human voice can't replicate the tones. As such, by simultaneously generating a tone from a high-frequency group and low-frequency group, it is highly improbable that a human voice can replicate a sound from such differing ends of the frequency spectrum at the same time. If we were ...


5

If you are pretty sure that the problem is not with the ADC, meaning that the input to the FIR is as expected then the problem might be the following: Your input is in Q31 and as I understand from your post that coefficients are also represented in Q31. If your output is also represented in Q31 you will have problems if your code looks something like this /...


5

Addition and subtraction usimg floating point representations requires a normalization step at the end, which requires more instructions in a software FP implementation and more transistors and longer (thus probably having higher electrical capacitance) wires in a hardware implementation. Thus, depending on the DSP implementation, using floating point may ...


5

You should take a look at "Mathematical Methods and Algorithms for Signal Processing" by Moon and Stirling. The only downside is its long list of errata, so hopefully there will be a new edition soon. A beautiful book about the Fourier transform as it's used in signal and system theory is "The Fourier Integral and its Applications" by Papoulis. It's quite ...


5

The analytic way is to substitute the variable $z$ by $e^{j\omega}$ to get the frequency response $H(\omega)$ (with $\omega = \frac{2 \pi f}{F_s}$) - that is to say, the frequency response is the $z$ transform evaluated on the unit circle. Note that matlab has a built-in function for plotting the frequency response straight from filter coefficients (freqz), ...


5

This is related to Chirp Z-transform (CZT) (refer to the Bluestein's algorithm). Using this identity, the CZT can be expressed in terms of a convolution. Hence, it can be efficiently implemented using FFT.


5

Matlab’s ‘upsample()’ command does not “pad” a sequence with zero-valued samples. The ‘upsample()’ command “stuffs” a sequence with zero-valued samples. “Zero padding” and “zero stuffing” are two different operations. “Zero padding” means appending a sequential string (a sequence) of zero-valued samples to the beginning or end of a sequence. I believe ...


5

A canonical implementation of a digital filter has the minimum number of delay elements. The same filter cannot be implemented with less memory. Since memory is often not the only concern, a canonical implementation is not necessarily always the best implementation on a given platform.


5

The answer is: yes, sampling in the frequency domain causes aliasing in the time domain, exactly like the dual case: sampling in the time domain causes aliasing in the frequency domain. There are many ways to see this. One standard way is to sample the discrete-time Fourier transform (DTFT) of a discrete-time signal by multiplying it with a Dirac comb and ...


5

The general topic of finding similarities between signals is wide ranging: are the signals of same sampling, length, offset, shift or scale? where do they take their values (discrete, real, complex)? are they stationary? noisy? what do you consider similar (whole signals, chunks, specific features)? which are the invariances looked for? and most important:...


5

The denominator (recursive coefficients Ai) look OK: the poles of your system are at 45 degree angles ($\pi/4$), with magnitude 0.68 (which is not very aggressive for a notch filter; in my opinion they should be more like 0.9). But your numerator has its roots very near $z=1$, which corresponds to frequency 0 instead of the desired $\pi/4$ for implementing ...


5

a Digital Signal Processor is one that has, in its instruction set, some instructions and addressing modes that are optimized for processing digital signals. usually these optimizations can be shown around what is needed to perform the dot-product needed for an FIR filter. $$ y[n] = \sum\limits_{i=0}^{L-1} h[i]\,x[n-i] $$ to do this in, say, $L$ ...


5

It is a symmetric odd-sized FIR smoothing kernel, belonging to the class of Pascal or binomial filters that somehow sample a Gaussian kernel. Plus, its coefficients are simple dyadic integers, that can be implemented as bit-shifts 1/4 1/2 1/4. The coefficients sum to one, hence it is unit gain at DC. In simpler word: (one of) the simplest real smoother ...


4

I think what you are asking is how to convert your samples (which are $16$ bit values) back to the original $+-5V$ range. I'd ask why? You have numbers between $-32768$ and $32767$ which you know represent $-5V$ to $+5V$. Just carry on, doing your processing as you require. Keep track of the conversions "in your head" (in code comments if it gets complex)...


4

If you look at the spectrum of speech sounds, you will notice that less energy is present in the highest frequencies, with an overall decreasing slope. The goal of the pre-emphasis filter is to counter-balance this, and flatten the spectrum. This helps for one or several of the following reasons, depending on your application: In an analog speech ...


4

Have you checked out gnuradio? They have blocks similar to what is used in signal processing. When I used to a few years ago, there were a large number of blocks that were already available and more in the works, all written in C++. The blocks were glued together using python, but a complete C++ implementation was in the works.


4

To answer your first question, what they mean is that the first training symbol only encodes data on the even-numbered subcarriers. The other subcarriers are set to zero. That is, the frequency-domain, $$ X[k] = \begin{cases} s_k, &k \text{ mod } 2 = 0 \\ 0, &\text{otherwise} \end{cases} $$ The symbols to encode on the even-numbered subcarriers $...


Only top voted, non community-wiki answers of a minimum length are eligible