電音の歩み

電子楽器を中心とし、ものづくり関係も含めて紹介していきます。

Frequency Shifter の検討(その1) 原理と構成について

 

 

f:id:hhh_yama:20180806233831p:plain 

                                       Fig1

f:id:hhh_yama:20180806004201j:plain

 

Freqency Shifterって?

 

長い入院生活の間で何か面白いモジュールの検討をしたいと思っていました。

そのとき頭に浮かんだのが、Freqency Shifter です。

かなりマイナーなモジュールで、私自身も実際の製品を見たことも無く、音を聞いたこともありません。

 なぜ思いついたかというと、10年近く前ですが、houshu氏が学会で京都に来たとき、折角だからということで夜に京都でお会いし飲む機会がありました。

そのとき、彼が話題のひとつとして持ってきてくれたのがFreqency Shifterで、資料としてたしかUSP(米国特許)を見せて貰ったように思います。

このモジュールがどれほど音作り効果が期待できるかはともかく、技術的な面白さに大層興奮したことだけは記憶しています。

 

検討に入る前のおぼろげな私の理解

・Ring Modulatorで得られるピッチシフトは、必ず二つの周波数(和と差の周波数)が発生する。

 多くの場合不協和の2音が現れるので、倍音が多い原音を入れるとすぐ濁ってしまうので、きれいな音を出すには、原音は倍音の少ないものに限定される。または、あえて濁った音を出す使い方になる。

・なんとかして和や差だけの周波数が得られれば、濁らせずにピッチシフトができ、より広範囲な応用ができそう。

・Ring Modulatorでの4象限乗算を90度位相のずれた、sineとcosで各々行えば、差の出力を打ち消すことが出来そうである。

・自分で発生する変調信号では、sineと同時にcosも出力するの構成が可能。

 しかし、入力される任意の原音(倍音も含めて)に対して90度位相のずれた信号(倍音含む)を作るのは困難。たぶん不可能だろう。(各倍音を検出して90度位相のずれた信号を作るデジタル的な手法は×。原音には和音や打楽器音なども来るため。)

・dome filterという巧妙な技術により原音を二相化できそう。

 ポイントは原音の全ての倍音を二相化するのでは無く、位相の絶対的なシフトは気にせず(耳では位相だけがずれても違いは分からないはずなので)相対的に90度位相のずれた出力を出す二組のPhase Shifter(広域に直線的に位相がシフトよう設計された)の二組の出力を、sineとcosとする。

 dome filterはFreqency Shiftwerのキモですので次回詳しく説明します。

 

 今回の検討

 病室からhoushu氏にメールして、moog他の資料のURLを教えて頂き、時間を掛けて検討を進めました。

 その結果を整理すると、

 

(1) Freqency Shifter(FS) は Ring Modulator(RM) の発展系である。

   ・Ring Modulator(RM)

 RMの機能を数式で表すと、原音を正弦状波 cos(ωt)、変調波も正弦状波 cos(αt)とすると、

両信号の4象限乗算になるので、  

f:id:hhh_yama:20180806000410p:plain

となり、よく知られているように、両信号の和の周波数の正弦状波と、差の周波数の正弦状波がミックスされたものになります。

実用的には変調波には正弦状波が用いられますが、原音には何が入力されるか解かりません。

倍音も含む場合は、例えば2倍音に対しても式(1)からα加算とα減算のミックスが生成されます。

倍音に対して一定周波数が加減算されるので、ピッチか変わる効果と倍音構成が崩れる効果が得られます。

 

 ・Freqency Shifter(FS)

 ピッチシフト効果を狙うためには、和のみや差のみを取り出したいところです。

 それが得られる数式が、三角関数の加法定理です。

f:id:hhh_yama:20180806003340p:plain

  (2A)を用いると和のみが得られ、(2B)で差が得られます。

 これを実現するには、二つのRing Modulator と加減算器が必要で、

 構成を図で表すとFig.1 のようになります。

 変調側のsin(αt)を作るのは、cos(αt)とsin(αt)を発振する二相発振器で可能ですが、

 もっと難しいのは、sin(ωt)を作ることです。

 これには、上で説明したDome filterを使います。