[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 08/08 03:29 / Filesize : 170 KB / Number-of Response : 652
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

サウンドプログラミング3



1 名前:デフォルトの名無しさん [2006/04/21(金) 07:54:35 ]
音のプログラミング処理について語りましょう

各エフェクタの組み合わせとか、
プログラミング外の話題はDTM板の方がいいよ


サウンドプログラミング2
pc8.2ch.net/test/read.cgi/tech/1091054082/

サウンドプログラミング
pc5.2ch.net/test/read.cgi/tech/996171508/

377 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 15:12:35 ]
>>371
クリエイティブのサウンドカードだろ?
仕様だ。

市場を一社独占させるとどうなるかの好例だな。

378 名前: 【吉】 [2007/01/01(月) 03:43:35 ]
あけおめ♪

379 名前:デフォルトの名無しさん mailto:sage [2007/01/01(月) 13:25:07 ]
黙れよ

380 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 20:06:07 ]
…FFTで… いや、ごめん。 いいや……。(´・ω・`)

381 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 21:13:43 ]
ぉぃぉぃ…

382 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 20:41:58 ]
低速フーリエ変換ってないの?

383 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 23:35:48 ]
DFT?

384 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 00:14:21 ]
筆算

385 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 10:20:29 ]
>>382
バタフライ演算をしなけりゃ低速だよ。



386 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 16:11:17 ]
普通にDFTでええんちゃう?

387 名前:デフォルトの名無しさん [2007/01/18(木) 21:42:16 ]
>>6 >>13 >>17
/*
    Risa [りさ]   alias 吉里吉里3 [kirikiri-3]
     stands for "Risa Is a Stagecraft Architecture"
    Copyright (C) 2000-2007 W.Dee <dee@kikyou.info> and contributors

    See details of license at "license.txt"
*/
/*
     Phase Vocoder (フェーズ ボコーダ ; 位相ボコーダ)の実装
 
     参考資料:
 
         www.panix.com/~jens/pvoc-dolson.par
             Phase Vocoder のチュートリアル。「ミュージシャンにもわかるように」
             書かれており、数学音痴フレンドリー。
 
         www.dspdimension.com/
             無料(オープンソースではない)の Time Stretcher/Pitch Shifterの
             DIRACや、各種アルゴリズムの説明、
             Pitch Shifter の説明的なソースコードなど。
 
         soundlab.cs.princeton.edu/software/rt_pvc/
             real-time phase vocoder analysis/synthesis library + visualization
             ソースあり。
*/

388 名前:デフォルトの名無しさん mailto:sage [2007/02/13(火) 23:56:25 ]
WAVで16bitの場合はサンプルごとにshort型にいれてるんだけど、
24bitの場合はどうすんの?
32bitは各サンプルをfloatにぶち込めばOK?


389 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 00:31:38 ]
longでええやん

390 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 07:11:45 ]
パソコンで処理をする目的なら、入力が何bitだろうと64bit浮動小数点で処理するのが楽だろう

・・・・整数演算の方が早いというような事を言いたい人なら別だが


391 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 11:31:37 ]
>>390
16bitはshortに入れているのに?

392 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 12:19:02 ]
wavファイル(RIFFフォーマット)の話だろ?
WAVE_FORMAT_PCM(=1)は整数の8bit,16bitしか定義されてないんじゃね?

393 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 13:29:51 ]
しかしBitsPerSampleにはいくらでも入れられる
入れるだけなら自由だ

394 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 17:36:11 ]
本気で言ってるなら池沼。

395 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 00:41:30 ]
内部は64bit浮動小数点、外部とのやりとりは24bit整数、あたりが標準的?



396 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 04:09:13 ]
>>395
全然。
例えばそこらのアプリの音声再生プラグインは、音質よりも軽くしたい場合が多いでしょ。

397 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 04:11:09 ]
逆に、音声処理で精度が欲しいってんなら、内部80bit浮動小数点が使える環境を利用するだろうしさ。

398 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 20:54:32 ]
複数のPCMを単一のPCMにミックスしたいんだけどどうすりゃいいのかわからない。

399 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 22:06:11 ]
>>398
加算した後でレベル調整でもすればいいんじゃね?

400 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 23:50:53 ]
レベル調整は先にやったほうが良くない?

401 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 07:55:27 ]
PCMは8bitか16bitだから 32bit型に一度入れてから割り算すればいい

たとえばA,B,Cを 30%:20%:20% でMIXする場合
int vrA=30;
int vrB=20;
int vrC=20;
int total=vrA+vrB+vrC;

int w= A*vrA+B*vrB+C*vrC;
return w / total;
}




402 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 13:09:25 ]
>>399-401
みんなありがとう。
やっぱ足して割ればいいのか。

403 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 11:42:48 ]
ステレオWavデータのPAN設定のやり方教えてくださ
ぐぐったけど、どうも該当するものが発見できなかったんで

404 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 20:48:50 ]
左右に振るだけじゃないの?

405 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 21:06:13 ]
たぶんパンを振るとき左右それぞれにどういう演算するかって話だろ
その辺のシンセとかだと、右チャンネルの場合 L 0% - C 50% - R 100% って変化してたと思う
この場合だとセンターの時音量下がって聞こえるけどね。
DirectXだとセンターが両方とも100%で、右に寄せるときは左を下げてくんじゃなかったかな。
この場合センターの時音が大きく聞こえる



406 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 21:22:13 ]
>>405
> その辺のシンセとかだと、右チャンネルの場合 L 0% - C 50% - R 100% って変化してたと思う
> この場合だとセンターの時音量下がって聞こえるけどね。

つか、左寄せの場合もセンターの場合も右寄せの場合も同じ音量

> DirectXだとセンターが両方とも100%で、右に寄せるときは左を下げてくんじゃなかったかな。
> この場合センターの時音が大きく聞こえる

この場合は正解。センターの時は、左寄せ, 右寄せの時の倍 (+6dB) になる

407 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 21:29:00 ]
>>405
・音のエネルギーは振幅の2乗に比例する
・聴覚は対数特性
この辺がヒントになるかも。

408 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 22:24:48 ]
ハードウェア・ミキサーだとセンターは3dB落ちがデフォ。
PAN振りっきりならスピーカーは1本しか鳴らないけど
センター時は2本同音量で鳴るから音量は3dBアップ。
これを補正するための3dBダウン。
これでL-C-RとPAN移動させても横一直線で移動する。

6dBダウンは再生/演奏時にモノ・ミックスされるケースを想定してのもの。
(回路内のミックスは電圧なので6dBアップ)
ハードウェア・シンセはモノ・アウトも装備する関係でそうしてあると。

409 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 22:36:58 ]
>>406
ん?センターは-3dbでしょ?
20*log(sqrt(0.5^2 + 0.5^2)) = -3.010299956639811
でいいんだよね?
だからDirectXの場合だと+3dbだったと前勉強したときは思ったんだけど・・・
間違ってる?

410 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 02:09:49 ]
正解は >>407-408

411 名前:デフォルトの名無しさん [2007/03/19(月) 12:27:37 ]
誰かDAW作ってくれ

412 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 10:48:51 ]
>>411
frieve

413 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 10:17:20 ]
エフェクトのコーラスのうねりは時間で変化させるんですか?
それともpitchを変化させるんですか。

414 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 10:39:30 ]
コーラス:
入力音を二つに分岐させる。
片方にモジュレーション(周波数変調)をかける。
二つを加算して出力。

415 名前:413 mailto:sage [2007/03/31(土) 10:55:39 ]
コーラスとフランジャーは モジュレーション大きさだけの違いだけなんですか?




416 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 11:45:55 ]
・モジュレーション幅
・モジュレーション速度
・フィードバック量
・分岐させた二つの加算割合
などを変化させることによってコーラス/ビブラート/フランジャーなどが作れる。

417 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 11:50:26 ]
>>416
それの大きさで呼び名が変わるってこと?
なんどもすんません。

418 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 12:30:34 ]
そういうこと。
モジュレーション幅が広めで速度が速いとコーラスっぽくて、
モジュレーション幅が狭めで速度が遅いとフランジャーっぽい。
フランジャーの場合はフィードバック量も関係してくることが多い。


419 名前:413 mailto:sage [2007/03/31(土) 12:34:58 ]
サンキュです

420 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 12:36:08 ]
いえいえ。

421 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 18:59:37 ]
ぉぃぉぃ

一応混じれ酢すると
ふらんじゃー: 数ms以下の短いディレイに変調をかけ、元音とミックスして、
         中〜高音域のコムフィルター効果でメタリックな響きを出す
こーらす   :数十〜ms程度の比較的長いディレイに変調をかけ、元音とミックスして、
         (たぶん超低域のコムフィルター効果で)アンビエントな音のウネリを出す


422 名前:418 mailto:sage [2007/04/01(日) 22:34:53 ]
>>421
補足サンキュ。418では変調速度と変調幅だけしか言及してなかった。
(変調幅を大きくする≒ディレイ値を大きくしないといけない
 という勝手な理解をしてしまったよ。)
確かにディレイ値のほうが大きな影響があるな。

423 名前:デフォルトの名無しさん [2007/04/02(月) 00:32:07 ]
だけど、コーラスのきついやつがフランジャー、って理解でそう間違ってないでしょ?

424 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 00:33:53 ]
おまぃに関してはおまぃの判断に任せる

425 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 01:31:19 ]
コーラスのディレイの短いやつがフランジャー、って理解で間違ってない。



426 名前:413 mailto:sage [2007/04/02(月) 12:28:37 ]
勉強になります。

427 名前:418 mailto:sage [2007/04/02(月) 16:25:13 ]
理工系の大学とかで学術論文にアクセスできるのであれば、
Jon Dattorro. "Effect Design, Part 2: Delay-Line Modulation and Chorus". Journal of Audio Engineering Society, October 1997.
とか、あとは「DAFx」という書籍もエフェクト関係の勉強になる。

両方とも英語なのがタマニキズ。

428 名前:デフォルトの名無しさん [2007/04/02(月) 17:10:08 ]
>>425
登場経緯的には、フランジャーが先だよね? 浅めに(?)かけてみたら 12 弦っぽい
効果があって、それ目的でパラメーター調整しやすいようにアレンジして製品化した、と。

429 名前:413 mailto:sage [2007/04/04(水) 09:16:25 ]
>>427
DAFxはいろいろ載ってておもしろそうですね。
Jon Dattorro  Effect Designは見れなかった。残念
ただ、英語はダメなので気長にみてみます。

430 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 09:21:13 ]
基本的にはパラメーターのレンジを変えた、同じエフェクトと思っていいと思うけど、
実際には目的の違いから異なるアイデアを盛り込んでる場合が多いと思うよ。
たとえばコーラスはぶ厚く広げるのが目的だからディレイラインがすごく多いものとか、
変調が周期波形じゃないものとか、イロイロと。
そのへんがエフェクターの個性になってくわけだが。

431 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 04:03:47 ]
今までDSP買ってエフェクターやら作ってたんだけど、ふと思った。
いい加減今のPCならリアルタイム入出力のFIR処理くらい出来るんじゃないかと。
これが出来ればあらかじめフィルタ係数用意して切り替えるようにすれば
ソフトウェアエフェクターってできそうだし。
で、作って見たがあえなく撃沈。音途切れ途切れ。

何が問題なんでしょう??
100万タップくらいのFIRなら余裕で動くと思ってたのに。

432 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 07:58:42 ]
あまり詳しくないのであれなんだが
とりあえずSSEは使った?(PowerPCならAltivec
大きいFIRはFFT利用して劇的に計算コスト減らした実装ができるんじゃなかったけか?

433 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 08:02:06 ]
ちなみにリアルタイム入出力のコンボリューションリバーブとか普通にありますよ。

434 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 09:20:49 ]
たいてい432の言うようにFFTかましてるよね。だからレイテンシーが問題になることも。

435 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 12:33:04 ]
>>431
ハードウェアのことあんまり詳しくないんだけどフィルタ係数や入力信号のバッファ
がL1 L2 超えて外部になると一気にメモリ転送の問題が発生する気がする
メモリのレイテンシーって結構デカイ気がするけど詳しい人教えて

>>433
ちょっと俺も興味あるんだけど そのソフトの詳細希望

>>434
リアルタイムでFFTだとレイテンシーもだけどブロック間の繋ぎがどうなるんだろ




436 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 13:31:52 ]
>そのソフトの詳細
今時のPCの音楽制作環境のことまるで知らないの??
コンボリューションリバーブなんかはここ数年流行っててすでに一般的。たくさんあるぞ。
「コンボリューション VST」とかでぐぐってみなはれ

437 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 14:05:58 ]
>>436
こういうのってリアルタイム入出力できるの?

438 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 00:06:50 ]
>>435
ブロック間のつなぎはoverlap-and-addでやるだけなので、大丈夫。

439 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 07:49:56 ]
>>437
DSPプログラミングやってて、今時そうゆうの知らないことのほうが驚きですよ。
音楽制作と無関係な業界でやってる技術者だったりすると案外そうゆうもんですかね。

「DSP」っていう言葉も昔は主に専用チップ、Digital Signal Processorのことを指していたけど、
汎用PCによるリアルタイム処理が台頭してきた今は、
意味が広がってデジタル信号処理全般、Digital Signal Processingというニュアンスですよ。

440 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 08:12:27 ]
FIRネタの書き込みは、どの板も具体的な話が欠落してるなw

厨?

441 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 08:18:37 ]
>440
単純に大量のかけ算するだけなら簡単だが、
FFT応用するとかいうと詳しい人なかなかいないんでしょ。
そうゆうおまいは?

442 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 08:23:46 ]
>>441
それも既出。

443 名前:デフォルトの名無しさん [2007/04/07(土) 10:12:17 ]
>>435

ここでは板違いかもしれないけど、
たとえば、foobar2000のイコライザは8192Tapの
firフィルタで、畳み込みにfftを利用している。

foobar2000のプラグインのconvolverは、大きな
インパルスファイルを指定してやれば、
数万Tapの畳み込みも音がとぎれず再生する
こちらも畳み込みにfftを利用。
(Tap数は表示されるFFT Length の半分)

firフィルタはどうしてもレイテンシがでかくなるから
リアルタイムの演奏や画像との同期は難しいけど
パソコン上のファイルを変形させるならかなり使える。

「fft overlap save」でググるよろし。

こことかは、お勉強の過程が書いてあって
参考になるかも。

ttp://junzo.10gallon.jp/





444 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 15:15:53 ]
結局のところ今のPCじゃ時間軸での畳み込みはまだ無理ってことでFA?

多分 436はその辺は考えてなかったんだろな
知識ひけらかす前に 431の質問を汲み取ってやれ

445 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 15:43:51 ]
すいません、畳み込みリバーブのプラグインとかは時間軸での畳み込みとは違うんですか?



446 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 16:45:19 ]
今手元に可逆圧縮済みrawがあって、これをwavにしなければならないんですけど、
・rawデータはwavのヘッダ無し波形
・どういう形で圧縮されているのか分からないのでデコードしようがない

一体圧縮済みrawはどういうフォーマットなんでしょうか?

447 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 17:22:42 ]
>>445
畳み込みリバーブと書いてあっても
実際はインパルス応答 入力信号を両方FFTしてオーバーラップ法を使った
周波数軸での畳み込みをしているのでは無いかということ

この辺りは説明書とかみると書いてあるのかな?

実際に最近のCPUで誰か真っ当な時間軸での畳み込みやって
何タップくらいいけるのか測定してみてくれYO

ぉ サウンドプログラミグっぽくなってきたなおぃ

448 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 17:25:30 ]
あ もちろんリアルタイム入出力での話ね
オフラインなら何億タップだろうがメモリがあるかぎりいけるだろうからw

449 名前:445 mailto:sage [2007/04/07(土) 19:29:09 ]
>>447
さらにすいません、
真っ当な時間軸での畳み込みというのと、FFTを使った周波数軸での畳み込み、
というのは結果が違うのですか?
FFTを使った方法は軽いけどあくまで別物なんですか?

450 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 21:14:20 ]
>>449
(精度の問題を除いて)時間軸畳み込みと全く同じ結果が得られる方法がある。

451 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 21:32:48 ]
素人談義状態だな

452 名前:445 mailto:sage [2007/04/07(土) 22:14:09 ]
>>450
なるほどです。
ちょっと調べてたらなぜ畳み込みにFFTが使われるのか、とてもわかりやすい説明みつけました。
ttp://www.nextftp.com/swlabo/m0_pctech/hp_ultraprecision/up_815_1.htm

周波数軸での畳み込み?、、、というのにあたるのかどうかよく理解できないのですが、
とにかく概算で約200倍速く計算できるようなこと書いてありました。
自分はFFT自体あまり理解できてないのですが、これ読むと魔法のようすね。

453 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 02:24:08 ]
>>452
オーダーが違うからね。
FIR 長を N として、
普通に時間領域で畳み込みすると、O(N^2)
FFT 使うと、O(N lon N)。

長さ N で FFT しちゃうと、そのサイトにある通り、循環畳み込みになっちゃうから、
実際には長さ2倍にして、半分 0 埋めてとかやる。
で、FFT + 周波数領域で掛け算 + 逆FFT ってなるんだけど、
2N log 2N + N + 2N log 2N とかで演算回数かかるけど、
O(N log N) だから、何千・何万タップとかになると圧倒的にこっちが早い。


454 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 05:27:24 ]
>>451
煽りはいいから >>447 の試してソース公開してみろって

455 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 10:04:31 ]
>>447
わざわざ最新のCPUを買わなくなって計算の見積もりは出来るだろ。
そりゃ、DSPと違って、PCの場合は演算能力の見積もりは難しいけど
44.1Kで 100万(1M)となると、モノラルで44.1G/Sの積和能力が必要になる
ゲーム機のGPUなんかでは、無理に思えない数字に見えるだろうが
パソコンだと、あと10年程先だろうね

確かに100万となると20bitにもなるわけでゲーム機のような単精度でいくら
高速でも意味はないわけだけどさ。

あ、FFTを補助的に使ってリアルタイムに実現する方法もあるんで




456 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 11:01:08 ]
聞きかじり&妄想が延々と続きます・・・

457 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 11:30:08 ]
2^20のFFTを使うとすると 1048576-1000000 = 48576 サンプルが丁度いいサイズになる
1.1秒毎に22秒ほどのデータをFFTして処理するので、計算時間を無視して1.1秒の遅延が必要になる。
計算時間はこのシステムが動く最悪値と考えれば2.2秒の遅延が必要になる

別けて計算する方法は、1サンプルあたりのFIRフィルタの計算は
Σ C[i]*D[i]
たとえば 現在から1万サンプルのデータDaと 99万Dbに別けると
Σ C[i]*D[i] = ΣC[i]*Da[i] + ΣC[i]*Db[i]
ΣC[i]*Db[i]は1万サンプル以上前のデータなので、FFTを使う方法で1万サンプル分を先に計算出来る
残った1万サンプルだけをリアルタイムに計算すればいい
計算量は44100*10000 = 441M/Secなので、今のPCなら不可能な数字ではない

458 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 12:01:09 ]
ttp://www.knufinke.de/sir/index_en.html

459 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 15:18:43 ]
>>449

直線畳み込みと循環畳み込みをfftを利用して行うこととは
数学的に完全に等価です。

ですから、数千Tappを超えるfirフィルタの処理を行うとき
時間軸での畳み込み(直線畳み込み)をやるのは
無意味だと思いますね。

これが最強、最有名です。

ttp://www.ludd.luth.se/~torger/brutefir.html


460 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 15:53:22 ]
ひたすらゴッグルさんのご神託を貼り付けるだけのスレw

461 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 15:57:07 ]
この議論、数ヶ月前にも見たw

462 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 16:32:43 ]
FFTを使う方法でもリアルタイムに出来るというのは前回無かったように思うが?

463 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 16:49:50 ]
で、この議論のどこら辺でリアルタイム手法が提案されたって?


464 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 16:54:40 ]
じゃあ 俺も妄想ね。

単精度32bitステレオで扱おうと思うとデータ量だけで
フィルタ係数分左右で1タップ8byte 入力信号とあわせると16byteの記憶領域が必要。
10万タップの時点で既に1.6Mの記憶領域が必要になってしまう。

それがどうしたという感じだが、もしこのデータを外部メモリから読み出そうとすると
最近のメモリで読み出しレイテンシーが10nsくらいだから
信号と係数を逐次読み込んで毎回積和をとるとしたら
1/10000sec が毎回読み出しだけで消費されてしまう時間。
さらにこれに積和時間と入力信号保持用にリングバッファなりしなければならない。
MMXにシフトレジスタ命令はあったはずだが。
まぁこれ考えるとCPUキャッシュから外れるとメモリ読み出し時間
が一番のボトルネックになる気がするんだけど。
10万タップもまったく現実的じゃないよな。
サンプリング8kでギリギリ読み出しが間に合う速度くらいw

とするとL1最低でもL2にデータ保持できる量=最大次数 くらいのノリにならねぇか?

キャッシュも自分でフルに使える分けじゃないし
かなりローレベルなプログラミング技術が要求されるよなぁ


465 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 17:01:39 ]
何msまでの遅延ならリアルタイムと見なせるだろうか。
30msくらい遅れると明らかに違和感が出るよな。
10msくらいならおk?



466 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 17:05:21 ]
>>465
そもそも今いっているリアルタイムはそういう意味ではない。

一定量の遅延があるだけで出力し続けれるのならそれはリアルタイム処理。
 入力→演算→出力 
の流れが次の入力が来るまでに終っているかどうか(1サンプル内で演算が終っているかどうか)
がリアルタイム処理の定義だと思われ

467 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 17:26:36 ]
レイテンシー以前の話かよw

468 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 17:35:23 ]
>>463
もちろんPCの場合はCODECとの通信がブロックでやってくるから、意味はないのだけど
1サンプル毎に答えを出す手法について提案されているじゃないか?

でも、コレ計算量の削減になるのかな?

256点で考えてみよう。
64点を時間領域で 残りの192点をFFTで行うとする
c0*d0+ ・・・ +c63*d63 とc64*d64+・・・c255*d255
前半は O((N/4)^2)=O(N^2/16) =4096
後半は、64サンプル毎に256点のデータで行えば 64サンプル毎に1回処理するので
4*(2N log 2N + N + 2N log 2N )=4*2*N*( 1+2*log2N) = 4*2*256*17= 34816

うーん

469 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 17:42:11 ]
>>464
単精度でFFT方式を10万タップで使うと、結果は上位8bitまでしか信用出来なくなる
浮動小数点なので、相対誤差だから十分良いといえば良いのだけどね

あと10万タップくらいならFFTでやれば今のPCならリアルタイム処理は行えるよ
実際やってるし。

だって2秒に1回計算すりゃいいんだから余裕。
素直に書いたルーチンでも1秒に10回くらいは計算出来てるよ。



470 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 17:56:28 ]
256点でなく、一般化して考えてみる
M分割した1/Mを時間領域で 残りをFFTで行うとする
この方式との比率は、
((N/M)^2 + M*2*N*( 1+2*log(N)/log(2)))/(N^2)

N=2^8ではダメだったが、
N=2^16 M=16を代入すると 約1/50
N=2^20 にすると 1/200 と大きいほど改善するようだ

さらに、細かく分割して効率化すれば、もっと効率上がるのかも

471 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 18:15:45 ]
計算間違いしてた
こうか?
 (((N/M)+M*( 1+4*log(N)/log(2)))/(N)

N=2^16 M=16を代入すると 約1/12 でしかない


472 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 18:24:13 ]
10万タップにあてはめてみるとN=16 M=32で約1/20
この時の負荷はFFTだけで計算した場合の100倍近い


473 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 19:50:03 ]
>>464
確かに時間軸での畳み込みをプログラムで実装するとそこが問題になりそうだ。
ハードのこと全然詳しくないんだが。
というかその後の話が全部周波数軸での話しになってるのが妙にうけた。
あきらかに>>464の話は時間軸での計算なのになw

FFTでの畳み込みは確かに早いんだけど精度とかアルゴリズム的なこと考慮しないといけないから面倒だな。
そういった意味では時間軸での畳み込みの限界を俺も見てみたい気がする。

474 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 19:55:58 ]
> 最近のメモリで読み出しレイテンシーが10nsくらいだから
> 信号と係数を逐次読み込んで毎回積和をとるとしたら
> 1/10000sec が毎回読み出しだけで消費されてしまう時間。

1/10000[sec]/10[ns]=10^-4/10^-8=10^4[word]

1/10000secって一体なんの話?

475 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 19:59:18 ]
10万個読み出し * 10ns と思われ リードタイム?



476 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 20:03:51 ]
10^5[個]×10^-8[sec]=10^-3
10万個なら1/1000がメモリ読み込み時間
10^6[個]×10^-8[sec]=10^-2
100万個なら1/100がメモリ読み込み時間


477 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 20:28:02 ]
FFTを使おうが、Σdt[i]*c[i]の演算は時間軸での計算だと思うけどな
単にFFTを使って掛け算を高速化しているのにすぎないわけで

>>464
まず、
係数については柔軟性を持たせる為に浮動小数点というのは悪くないが
データは16bit固定小数点で保持すれば十分だろう。
実用的には係数も16bit で十分。
(この場合でも積和累計レジスタには 16+16-1+17=48bit が必要)
その場合、途中係数が0が続く部分が大量に出る。
なぜなら全部が1のデータでも計算結果は2bitオーバフローしてしまうのだから。
だから0の部分をリスト形式でスキップすれば計算量は多少小さくなるかもね

キャッシュについては、
Σc[i]*d[i] は 分解出来るわけだから、たとえば256サンプル毎に
キャッシュに入るサイズで分割して計算すれば、問題ないだろう






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<170KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef