• ベストアンサー

スペクトルの減算

フリーソフト「ボーカルリデューサー」の原理を勉強しています。 サイト等で調べると、「周波数成分を分析し、両チャンネルの振幅スペクトル・位相スペクトルを比較して ベクトル減算したのちに逆変換してステレオ音源を得る」となっています。 スペクトルの求め方やフーリエ変換・逆変換は理解したのですが、 「ベクトル減算」の部分がよくわかりません。 周波数と各スペクトルの値をベクトル成分としてベクトル減算を行う、という解釈で良いのでしょうか。 また、位相スペクトルと振幅スペクトルは別々に比較・演算を行うのでしょうか。 ご教示願います。

  • elegh
  • お礼率83% (10/12)

質問者が選んだベストアンサー

  • ベストアンサー
  • moumougoo
  • ベストアンサー率38% (35/90)
回答No.3

回答番号:No.2です。 > A(ω)の式はどのような原理から出た式でしょうか。 > なぜこれをR(ω),L(ω)に掛けることで、一致する成分が差し引かれるのかが、わかりません。 > 再度申し訳ありませんが、教えていただけないでしょうか。 についてコメントします。 特に原理はありません。R(ω)=L(ω)のときA(ω)=0となる関数で R(ω)やL(ω)の大きさに依存しないような関数にしたかったので |R(ω)-L(ω)|/|R(ω)+L(ω)|=α(ω)の関数でα=0のとき0になる適当な関数ということで回答のような関数を考えました。例と書いているように特に根拠はありません。R(ω)≒L(ω)のとき0になる関数を掛けているので差し引いているイメージです。 R(ω)とL(ω)一致しないとき、A(ω)の値は1になって欲しいので、 A(ω)=1-exp(-|β|α(ω)) |β|は十分大きな正の数 というようにする必要がありますね。 |β|→∞のとき R(ω)⇒A(ω)R(ω) L(ω)⇒A(ω)L(ω) は、まさに完全に一致している成分のみを差し引く演算と同じになりますよね。 |β|<∞ は、完全に一致という条件を緩めていることになります。 という感じです。どうでしょうか?

elegh
質問者

お礼

理解しました。 1つ1つ値をチェックしていくよりやりやすいですね。 丁寧な回答ありがとうございました。

その他の回答 (2)

  • moumougoo
  • ベストアンサー率38% (35/90)
回答No.2

WEBで調べるとボーカルが中央に定位していることを利用と書いているので、左右両方のそれぞれのスペクトルを見たときに 振幅スペクトル:振幅が一致(距離による減衰が同じなので) 位相スペクトル:位相も一致(時間差がないので) という成分を抽出して、その成分を抑圧しているのだと思います。 ※実際に完全に一致というのはないと思いますので、ある程度、幅をもたせるのでしょうけど ご質問の「ベクトル減算」は「周波数と各スペクトルの値をベクトル成分としてベクトル減算を行う」という意味でよいのではないですか? 振幅スペクトルと位相スペクトルをそれぞれ差し引くのではなく、上記のように一致する成分を差し引くのだと思いますよ。 例えば、右左の複素スペクトルを R(ω)、L(ω)として A(ω)=1-exp[-|R(ω)-L(ω)|^2/|R(ω)+L(ω)|^2] というような因子を掛けて R(ω)⇒A(ω)R(ω) L(ω)⇒A(ω)L(ω) とするとかかな?

elegh
質問者

補足

A(ω)の式はどのような原理から出た式でしょうか。 なぜこれをR(ω),L(ω)に掛けることで、一致する成分が差し引かれるのかが、わかりません。 再度申し訳ありませんが、教えていただけないでしょうか。

  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.1

フーリェ変換した結果を見ると、それぞれの周波数成分は振幅Aと位相φを持っています。 そこで、加減算するときには、単にA1-A2という具合に、振幅だけで加減算するわけにはいかず、(A1∠φ1)-(A2∠φ2)という具合に(大きさと方向(位相)をもった)ベクトルとして処理する必要があります。

elegh
質問者

お礼

回答ありがとうございます。 各周波数ごとに振幅と位相をまとめ、ベクトルとして処理をするということですね。 早速やってみたいと思います。

関連するQ&A

  • フーリエスペクトルの振幅について

    ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの 振幅値について教えて下さい。 今想定している離散フーリエ変換の式は一般的なもので Σ(k=0~N-1) f(k)exp(-2πkni/N) を考えています。 また、離散フーリエ変換して得られるスペクトルは √(Re^2+Im^2) で計算します。 離散フーリエ変換を適用する関数を、 振幅1の直流、及び振幅1で周波数5[Hz]の正弦波とします。 (この2つの信号は別々の信号で合成されていません。) サンプリング周波数を20[Hz]とした場合、 サンプリングして得られるデータ列はそれぞれ、 直流: 「1, 1, 1, 1」 正弦波: 「0, 1, 0, -1」 となると想定されます。 (正弦波をサンプリングする場合は位相が関わってきますが、 今回は気にしないで下さい。) このデータ列に対して上記の離散フーリエ変換を適用した場合、 得られるフーリエスペクトルの振幅値はそれぞれ、 直流: 「4」(直流のフーリエスペクトルの振幅値値) 正弦波: 「2」(5[Hz]のフーリエスペクトルの振幅値) となります。 (データ点数は上の通り4点) ここで質問なのですが、 離散フーリエ変換して得られるスペクトルの振幅値から 元の関数の振幅値を求める場合、 フーリエスペクトルをサンプリングの総データ点数で割ることは 数学的に納得できます。 しかしこの例の場合、フーリエスペクトルを総データ点数で割ると、 直流: 「4 -> 1」 正弦波: 「2 -> 0.5」 となってしまい、直流は正しいのですが、 正弦波の元の振幅値を正確に求めることは出来ません。 フーリエスペクトルの振幅値から正弦波の振幅値を正しく求めるには、 「フーリエスペクトルの振幅値*2/データ点数」 としてやらなければいけません。 上記のことに関して、 なぜこのようになるのかを(2をかける理由を)教えて頂けないでしょうか。

  • フーリエ変換 位相の範囲

    フーリエ変換の位相の範囲について質問です. ある信号をフーリエ変換すると 周波数スペクトルがわかります. 周波数スペクトルには振幅スペクトルと位相スペクトルがあって それぞれ 振幅スペクトル: Xn=√An^2+Bn^2 位相スペクトル:θn=arctanBn/An で表されることは理解できたのですが、 この場合、 θnがとる範囲は0~πですか? 考え方がよくわからないので説明も一緒にわかる方いらっしゃいましたら 教えてください. よろしくお願いいたします.

  • フーリエ変換のスペクトル

    フーリエ変換を勉強しても、なかなかわからないことが多くて困っています。現在EXCELのフーリエ解析ツールで変換して、パワースペクトルまで求められるようになっていますが、パワースペクトルがよくわかりません。 パワースペクトルは周波数領域の比みたいなものと勝手に認識しているのですが、例えばsin波の振幅を2倍するとピークのパワースペクトルはどうなるのか等、法則みないなものはありますか?実際に色々試しているのですが、よくわかりません。また、周波数0以外のデータの総和に何か法則がありそうなのですが、やはりよくわかりません。 1次元の周期成分を持つデータをフーリエ変換して、ピークが出るのですが、その値が何を示してるのかを上司に説明できるようになりたいので、アドバイスお願いします。

  • フーリエ変換により得られる周波数スペクトルの単位

    離散フーリエ変換(デジタル信号に対して行う周波数解析)により得られる 周波数スペクトルの単位について教えて頂きたいと思い,質問させて頂きました. デジタル信号処理やフーリエ変換に関する書籍,またはホームページを調べてみますと 周波数スペクトルには ・振幅スペクトル ・位相スペクトル ・パワースペクトル ・パワースペクトル密度 というような様々な表現方法があることがわかりました. しかし,それぞれが持つ意味や単位がはっきりと書かれた書籍をみつけることができませんでした. 離散フーリエ変換の定義式やホームページを参考にして考えてみますと 周波数解析を行う対象の波形の縦軸の単位がVで,横軸の単位が秒であれば, 求められるスペクトルの単位は,以下のようになると考えております. しかし,確信がなく不安な気持ちです. ・振幅スペクトル [VまたはdB] ・位相スペクトル [rad] ・パワースペクトル [V^2またはdB] ・パワースペクトル密度 [(V^2)/Hz] もしスペクトルに関してご存知の方がいらっしゃいましたら, 教えて頂けると本当にうれしいです. 参考になるホームページや書籍等も教えて頂けると助かります. つたない文章ですが,どうぞよろしくお願い致します.

  • ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの振幅値に

    ある時間関数を離散フーリエ変換して得られるフーリエスペクトルの振幅値について教えて下さい。 今想定している離散フーリエ変換の式は一般的なもので Σ(k=0~N-1) f(k)exp(-2πkni/N) を考えています。 また、離散フーリエ変換して得られるスペクトルは √(Re^2+Im^2) で計算します。 離散フーリエ変換を適用する関数を、 振幅1の直流、及び振幅1で周波数5[Hz]の正弦波とします。 (この2つの信号は別々の信号で合成されていません。) サンプリング周波数を20[Hz]とした場合、サンプリングして得られるデータ列はそれぞれ、 直流: 「1, 1, 1, 1」 正弦波: 「0, 1, 0, -1」 となると想定されます。 (正弦波をサンプリングする場合は位相が関わってきますが、今回は気にしないで下さい。) このデータ列に対して上記の離散フーリエ変換を適用した場合、 得られるフーリエスペクトルの振幅値はそれぞれ、 直流: 「4」(直流のフーリエスペクトルの振幅値値) 正弦波: 「2」(5[Hz]のフーリエスペクトルの振幅値) となります。 (データ点数は上の通り4点) ここで質問なのですが、 離散フーリエ変換して得られるスペクトルの振幅値から元の関数の振幅値を求める場合、 フーリエスペクトルをサンプリングの総データ点数で割ることは数学的に納得できます。 しかしこの例の場合、フーリエスペクトルを総データ点数で割ると、 直流: 「4 -> 1」 正弦波: 「2 -> 0.5」 となってしまい、直流は正しいのですが、正弦波の元の振幅値を正確に求めることは出来ません。 この例の場合、フーリエスペクトルの振幅値から正弦波の振幅値を正しく求めるには、 「フーリエスペクトルの振幅値*2/データ点数」 としてやらなければいけません。 上記のことに関して、なぜこのようになるのかを(2をかける理由を)教えて頂けないでしょうか。 当方、数学についてはあまり詳しくないため、簡単に説明して頂けると幸いです。

  • フーリエ 音を1オクターブ上げるにはスペクトルをどういじる?

    周波数が倍になると1オクターブ音程が上がるという話を聞いたことがあります。 そこで、フーリエ変換をしたスペクトルデータをいろいろいじってみたのですが、どうしても1オクターブ音程が上がるということが実現できません(逆フーリエ変換をかけて音を確認)。 実際に1オクターブ音程を上げるにはどのようにスペクトル(絶対値・位相(もしくは実部・虚部))を変化させればよいのでしょうか? (音程だけ変化させて、音の速度は変化しないようにしたい)

  • 逆フーリエ変換における位相の考え方

    http://power.ee.sophia.ac.jp/~miyatake/lecture/m … 上記のHPを参考に逆フーリエ変換の勉強をしていました。 勉強の結果、周波数とフーリエ振幅さえわかれば、逆フーリエ変換可能と思いました。 では、位相はどのように使うのですか? もしくは、逆フーリエ変換では位相はあまり気にしなくても良いのでしょうか? わかる方がいましたら教えていただけないでしょうか? よろしくお願いします。

  • 周波数スペクトルの計算

    問 振幅3[v],立ち上がりΤr,立下りΤfが0.6[ns],繰り返し200Mhzのクロック信号の周波数スペクトルを計算せよ。ただしduty ratioは50% このような課題が出たのですがどのように計算すればいいんでしょう?時間関数→スペクトルってことはフーリエ変換だと思うのですが・・・・・ よろしくお願いします

  • 音声の周波数ごとの位相を変調したい

    音声の音源について、聞いたときの音は変えず(振幅情報は変えず)、位相情報のみを、指定した周波数帯域ごとに指定した位相差分変調したいと考えています。 たとえば1kHzから2kHzの周波数帯はpi/3、 2kHzから4kHzの周波数帯はpi/2分、位相のみずらしたいといった感じです。 とりあえずハニング窓で1/2シフトで短時間フーリエ変換した後、指定した周波数帯域の位相成分にずらしたい位相差を加え、逆フーリエ変換して時間波形に戻し、足し合わせるといった処理をやってみましたが、窓で切った間隔ごとにノイズの入った音声になってしまいます。 どのようにしたらいいでしょうか?それともそんなことはできないんでしょうか? 初歩的な質問でお恥ずかしいですが、どうぞよろしくお願いします。

  • フーリエ変換(FFT)後に各スペクトルの電圧値を求めるには?

    初めて質問いたします。よろしくお願いいたします。 連続した電圧信号をフーリエ変換して、その信号にどういった周波数の信号が含まれているかを調べたいのですが、その際に、各スペクトルを電圧値に変換した数値も調べたいと思っています。 参考書等をあたったところフーリエ変換をして、振幅スペクトルを求めるところまではできたのですが、実際の電圧値に変換することができません。 どなたか、よい方法、書籍などがありましたらご教授いただけないでしょうか? よろしくお願いいたします。 使用環境は、OS…Win2kpro、BorlandC++5.5.1(Borlandからフリーでダウンロードしたもの)です。