Forgot to mention: 7. Restore the correct magnitude of the real audio by multiplying by the magnitude we picked off of the complex audio signal at the original frequencies. (multiply block)
-Andy On Sun, 2016-03-13 at 16:28 -0400, Andy Walls wrote: > On Sun, 2016-03-13 at 20:10 +0000, Murray Thomson wrote: > > Hi Andy, > > > > > > Thanks a lot, I wasn't expecting so much help. I will read the > > flowgraph and I will try to understand it. > > The magic happens like this: > 1. convert the (dual sided spectrum) real audio signal into a (single > sided spectrum) complex audio signal. (Hilbert block) > > 2. Pick off the audio amplitude. (Complex to magnitude block) > > 3. Get the instantaneous frequency by taking the derivative of the > instantaneous phase (quadrature demodulator block) > > 4. Make a new complex audio signal by using the instantaneous frequency > multiplied by the transposition ratio as part of the argument to sin() > and cos(). (frequency modulator block) > > 5. ***Missing*** Filter the negative side of the complex spectrum to get > rid of aliases that will fold back in when we convert back to real > audio. (***Missing*** IIR filter block) > > 6. Convert the complex audio signal back to real (dual sided spectrum) > audio signal. (complex to float block) > > > > I've added an extra sine with double the frequency to simulate the > > first harmonic and when I transpose it I find lots of frequencies. Is > > this expected? > > Well yes, now that I see the problem. There needs to be a (pretty > sharp) filter in between the frequency modulator block and the complex > to float block, to knock out the negative side of the complex spectrum. > You picked a case that creates strong aliases (overlapping harmonics), > so they are noticeable when folding over into the spectrum when going > from complex to real audio. > > I just tested with voice, and it sounded funny, but fine. :P > > > > > I will try to find a solution for it once I understand more how it > > works. Thank you so much, I hope you've enjoyed with it :) > > Yeah. :) > > Regards, > Andy > > > > > Cheers, > > > > Murray > > > > > > On 13 March 2016 at 19:36, Andy Walls <[email protected]> > > wrote: > > On Sun, 2016-03-13 at 12:00 -0400, > > [email protected] > > wrote: > > > Message: 10 > > > Date: Sun, 13 Mar 2016 12:29:07 +0000 > > > From: Murray Thomson > > > > Hi Murray, > > > > > > > > Hi, > > > > > > This is probably an easy one but I'm stuck and i could do > > with some help. > > > My goal is to get a musical note from the microphone and > > shift its > > > frequency to transform the note to a different scale. For > > this to happen, I > > > need to multiply all the frequencies for e.g. 1.5. > > > > > > I can achieve an octave of the signal multiplying it by > > itself (doubling > > > the frequencies). I thought I could do this resampling the > > signal but now > > > I'm not too sure. Do I need to use an FFT block for this? > > > > > > I would appreciate if someone can suggest the best way to go > > or point me in > > > the right direction. > > > > Since I was recording my daughter's violin audition video > > today, I was > > in the mood to play around with this one. > > > > Try the attached *grc file. Note that you need headphones, or > > just keep > > the speakers away from the microphone, or the feedback will > > ruin > > everything. > > > > Run the flowgraph and select "Up 5th" from the "Transpose" GUI > > widget to > > multiply by 1.5. > > > > Double check my variables for A3, B3, C4, D4, etc. and the QT > > GUI > > chooser widget to make sure I got all the ratios right. > > > > > Thanks, > > > Murray > > > > Regards, > > Andy > > > > > _______________________________________________ Discuss-gnuradio mailing list [email protected] https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
