非整数倍のupsamplingについて

音声を非整数倍にupsamplingする際の常套手段について質問したら、色々参考になる話が聞けたのでまとめてみた。例えそれが非公開アカウントであろうとも!
3
とよしま @toyoshim

非整数倍のupsamplingの常套手段ってあるんですかね?n:m-nで0を補間してf/2のLPFっていう整数倍の時の延長の方法で考えると、f/2以下の量子化ノイズが出ちゃって除去できない。実際、自分でも許容できないレベル… | http://t.co/mRhKDU403F

2013-08-13 13:20:20
安島 雄一郎 @y_ajima

@toyoshim http://t.co/DRmpXIea6N これの経験から言えば、2~3倍(16k→44k)線形補間は十分良かった。補間で発生する折り返しノイズは、無限に細かくオーバーサンプルすると考えれば予想できるよ。

2013-08-13 14:23:59
安島 雄一郎 @y_ajima

@toyoshim 考えるってのは、近似波形に加わってしまったパルスとかステップとか三角波とかの周波数成分を考えて、折り返しがどのくらいになるか考える。近似がショボいほど遠くまでオーバーサンプルしないと折り返しが減衰しない。

2013-08-13 14:32:31
やだん @shioyadan

@toyoshim sinc 関数(そのままだと無限長になってしまうので,カイザー窓とかの窓関数をかける)で補間して upsampling したあと,元の周波数の1/2 以下を LPF で落とすのだと昔のバイト先で働いてたところで習いました.

2013-08-13 15:04:26
やだん @shioyadan

@toyoshim 無限長の sinc 関数を使った場合,数学的には,フーリエ変換で周波数空間へ変換したあと,空間を拡張した後に時間空間に戻していることと等価だったはずです.

2013-08-13 15:06:36
やだん @shioyadan

@toyoshim 元の周波数の1/2「以下」,じゃなくて「以上」でした

2013-08-13 15:19:01
とよしま @toyoshim

@__aji @shioyadan @dancerj さんくすです、雰囲気分かってきました。音声処理だと見つからなかったけど、sinc関数あたりで調べ始めたら画像処理(拡大)で有名なの色々ありましたね。ちなみに29761.81640625Hzから44100Hzへの変換をしてます。

2013-08-13 21:34:37
安島 雄一郎 @y_ajima

@toyoshim @shioyadan @dancerj 視覚は空間方向の周波数成分を感じるわけではないので、参考にしたらだめだよ。基本的な波形のFFT結果のグラフを見るくらいならいいけど、画像だとDCTばかりじゃない?音声はFFTで、窓関数もKaiserにするべき。

2013-08-14 05:26:00
安島 雄一郎 @y_ajima

@toyoshim @shioyadan @dancerj その周波数なら、とりあえず線形補完で88200にしてLPFかけるのをオフラインで試してみれば?

2013-08-14 05:34:03
やだん @shioyadan

@__aji @toyoshim @dancerj(個人的な経験ですが)線形補間でも大体はいいんですけど,いいヘッドホンとかで注意ぶかくピアノの音聞いたりするとノイズ乗ってるのがわかること多かったです.

2013-08-14 15:49:39
やだん @shioyadan

@__aji @toyoshim @dancerj 当時の師匠が言うに,サイン波食わせて出力をスペクトラムアナライザで見て変な周波数ピーク出てないかとか,インパルス食わせて出力波形が想定通りになってるか(LPFかける前に左右対称になってるか)とかをチェックしつつ作るといいそうです

2013-08-14 15:55:53
やだん @shioyadan

@__aji @toyoshim @dancerj この辺の理論的な裏付けは電気系の信号処理の講義でカバーされているので,まじめにやるなら(残っていれば)シケプリとか講義資料を読んでみるといいかもです.当時仕事でサンプリングレートコンバータ作っていたのですが,結構役に立ちました.

2013-08-14 16:10:14
dancerj 🗾 @dancerj

@toyoshim その変換、ちょうど可聴域のノイズになるので重要なあたりをフィルタリングするはめになるのか。特定の周波数をフィルタするグライコ系のアルゴリズム使うのかな。ローパスでざっくり削ると切り過ぎになりそう。

2013-08-14 18:08:23
とよしま @toyoshim

@dancerj 近い周波数に持ち上げてるので、元波形の持つ周波数帯域に被る形でノイズが載ってしまい、ノイズだけを選択的に除去する事ができない、ってのが問題の本質です。元周波数/2より高い帯域のノイズは簡単に消せるので、以下に少ない計算量でノイズを高周波に閉じ込めるかがポイント。

2013-08-14 23:31:43
とよしま @toyoshim

@shioyadan @__aji @dancerj ふむ、しきい値さえ決めれば自動化できそうだし、この手のテストを持つのは良さそうですね。耳よりあてになる(笑

2013-08-14 23:34:05
とよしま @toyoshim

@__aji @shioyadan @dancerj 画像処理でやってるLanczos関数を1次元で適用すればそれなりかなぁ、とか思ったんですが。でも、確かに視覚と聴覚ではセンサーの原理が違いそうだから、安易に適用する前に特徴を抑える必要はありますね。

2013-08-14 23:38:23
安島 雄一郎 @y_ajima

@toyoshim @shioyadan @dancerj Lanczos 2でも3でも線形補間よりずっと周波数特性がいいので、それだけオーバーサンプリングも後段LPFも計算量を落とせる。同じ特性なら多分Lanczosの方が計算量が少なくて済むと思う。実装は面倒になるけど。

2013-08-15 05:40:08
やだん @shioyadan

@toyoshim @__aji @dancerj Lanzos 関数は,意味的には sinc 関数に LPF 的特性を持つ適当な窓をかけたもので,「たまたま」人間の視覚特性と相性がよかったのでよく使われていると言う話だったと思います.

2013-08-15 16:39:25
やだん @shioyadan

@toyoshim @__aji @dancerj で,音声の補間では Lanczos はむしろ使うと変なひずみがでるはずで(前にも書いたように,スペクトラムアナライザで sin 波の出力見ると変な成分がでるはずです),sinc 関数でやったほうがいいとです.

2013-08-15 16:41:57
やだん @shioyadan

@toyoshim @__aji @dancerj 教えてくれたのは元々ヤマハで音源作ってた方だったんですけど,実際「自分の耳は信用しないし,しちゃいけないよ」て常々言ってましたw

2013-08-15 16:50:18
とよしま @toyoshim

@shioyadan @__aji @dancerj 塩谷先生は、せっかく有用な情報を提供しているのに、非公開アカウントになっているのがけしからん、ぷんぷん。

2013-08-15 23:26:20
やだん @shioyadan

@toyoshim togetter の方で公開設定してみました.記憶をたよりに色々書いているので,なんか間違っていたらすいません.他に追加されていたりしたら適宜公開設定にしますです.

2013-08-16 16:01:47
やだん @shioyadan

@toyoshim http://t.co/1BWIYgqWSh 計数の先生の講義資料なんですけど,ちょうどいいのがありました.p.88 あたりからが重要で,p.96 にはずばりリサンプリング話がのっています.

2013-08-16 17:22:00
やだん @shioyadan

@toyoshim ちょっとこれまでに書いたことは一部おかしかったりするので,この講義資料を元にもう一度説明してみます.

2013-08-16 17:23:45