From: glen herrmannsfeldt on
Jerry Avins <jya(a)ieee.org> wrote:
(previously snipped discussion on audio frequency shifter)

> I think the necessary order depends on the effective bandwidth. Using
> analog circuits to cover the telephone voice decade (300 .. 3000 Hz)
> three all-passes per channel are enough. The overall phase shift
> increases steadily with frequency -- each all-pass section ultimately
> adds 180 degrees -- but the difference remains close to 90 degrees where
> it counts.

This reminds me of some experiments someone I knew was doing
some years ago on feedback reduction in audio systems. The idea
was to use a balanced mixer to shift the frequencies by a small
amount, maybe a few Hz. The suggestion was that an appropriate
shift would not be too audible (with voice, anyway) but would
reduce the ability for audio feedback oscillation.

-- glen
From: Jerry Avins on
On 8/7/2010 2:22 PM, glen herrmannsfeldt wrote:
> Jerry Avins<jya(a)ieee.org> wrote:
> (previously snipped discussion on audio frequency shifter)
>
>> I think the necessary order depends on the effective bandwidth. Using
>> analog circuits to cover the telephone voice decade (300 .. 3000 Hz)
>> three all-passes per channel are enough. The overall phase shift
>> increases steadily with frequency -- each all-pass section ultimately
>> adds 180 degrees -- but the difference remains close to 90 degrees where
>> it counts.
>
> This reminds me of some experiments someone I knew was doing
> some years ago on feedback reduction in audio systems. The idea
> was to use a balanced mixer to shift the frequencies by a small
> amount, maybe a few Hz. The suggestion was that an appropriate
> shift would not be too audible (with voice, anyway) but would
> reduce the ability for audio feedback oscillation.

I actually did that around 1954, using tubes and heterodyne techniques.
A shift of about 3 to5 Hz was acceptible for voice and offered about 10
dB extra gain in most halls. The box used an IF of IIRC 225 KHz using
aircraft IF transformers, filtered out the upper sideband, and then
heterodyned back to audio with an oscillator below the remaining
sideband. A major problem was keeping the oscillators stable. They were
too far apart to make pulling a problem.

Jerry
--
Engineering is the art of making what you want from things you can get.
�����������������������������������������������������������������������
From: jungledmnc on
Thanks to all of you. I take it there is no simple way to compute the
allpass coefficients, except for brute-force search. So I did it. I wrote a
simple app, which searches for requested number of allpass sections
evaluating results like this:

H1 = Hallpass_A1(z) * Hallpass_A2(z) * ..
H2 = Hallpass_B1(z) * Hallpass_B2(z) * ..
where everything is complex. |H1| = |H2| = 1 as expected.

Finally phase1 = atan2(H1.R, H1.I) + PI/2, phase2 = atan2(H2.R, H2.I)
Difference = phase1 - phase2, and some wrapping.
Difference should be as close to 0 as possible.

I tried 4 biquad sections (so I guess 8th order) and the results are pretty
close to 90 degrees in all frequencies in my range, tried 50 - 15000 Hz. So
I tried to use the filters in an analyzer, which simply feeds it with delta
and FFTs the results and unfortunately it was for from being that good. In
some small interval of frequencies around say 100 - 400 Hz it was close to
90 degrees, but then it goes to hell and at about 7000 Hz the phase
response of both filters even crossed each other (0 degrees difference in
phase shift).

What am I doing wrong? I tried to find bugs, but everything seems working
fine, so there must be some logical error.
From: robert bristow-johnson on
On Aug 7, 8:24 pm, "jungledmnc" <jungledmnc(a)n_o_s_p_a_m.gmail.com>
wrote:
> I take it there is no simple way to compute the
> allpass coefficients, except for brute-force search. So I did it.

exactly what? how did you search for your optimal coefs and what did
you get?

> I wrote a
> simple app, which searches for requested number of allpass sections
> evaluating results like this:
>
> H1 = Hallpass_A1(z) * Hallpass_A2(z) * ..
> H2 = Hallpass_B1(z) * Hallpass_B2(z) * ..
> where everything is complex. |H1| = |H2| = 1 as expected.
>
> Finally phase1 = atan2(H1.R, H1.I) + PI/2, phase2 = atan2(H2.R, H2.I)
> Difference = phase1 - phase2, and some wrapping.
> Difference should be as close to 0 as possible.

difference should be close to 0 or close to pi/2?

From: Erik de Castro Lopo on
jungledmnc wrote:

> I want to create a frequency shifter for audio.

Are you sure you want a frequency shifter and not a pitch shifter?
Pitch shifers are much more commonly used for audio than frequency
shifters.

Pitch shifters do:

for all Fin : Fout = Fin * a

which preserves the relationship between harmonics of a single note.

Frequency shifters do:

for all Fin : Fout = Fin + a

which might be useful when used subtly for an audio effect, but will
not give you what you want if what you want is a pitch shifter.

Erik
--
----------------------------------------------------------------------
Erik de Castro Lopo
http://www.mega-nerd.com/