1 名前:デフォルトの名無しさん [2007/07/25(水) 14:07:56 ] 音のプログラミング処理について語りましょう 各エフェクタの組み合わせとか、 プログラミング外の話題はDTM板の方がいいよ サウンドプログラミング3 pc11.2ch.net/test/read.cgi/tech/1145573675/ サウンドプログラミング2 pc8.2ch.net/test/read.cgi/tech/1091054082/ サウンドプログラミング pc5.2ch.net/tech/kako/996/996171508.html
207 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 15:58:19 ] 動かす媒質の量
208 名前:デフォルトの名無しさん mailto:sage [2007/09/16(日) 16:34:37 ] 同じエネルギーを出すのに低いほどストロークが必要という事じゃないて 同じエネルギーを与えても、小さく感じるという事ならその通り www.yacmo.co.jp/document/mame/images/mame07_2.gif
209 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 00:58:06 ] 100人飛べる大縄跳びで二重飛びしようとするとものすごく大変なのと一緒・・・ではないな
210 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 01:52:12 ] >>207 マジレスありがとう。 1Hzで動く量と100Hzで動く量が違うのは当たり前ですね。
211 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 06:37:18 ] >206 真面目に低音は耳に悪いので注意。 スピーカー飛ばす原因も低音の出力が高すぎるってのが多いし。
212 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 07:12:34 ] スピーカーが飛ぶのは2つの現象 電力は 電流*電圧だけど、ボイスコイルは、コイルと名前が付くようにL成分を持ってるから 同じ電圧振幅でも電流は低周波程流れてしまう。 発熱は電流の2乗に比例するので、低音程 焼損し易い また、コントロールして同じV*Aを与えたとしても、ボイスコイルには質量があるから 同じV*Aを与えても振幅は低周波程大きくなる。 結果、大振幅で可動域を外れ物理的に変形してしまう。
213 名前:デフォルトの名無しさん [2007/10/05(金) 21:15:13 ] waveOutOpenの引数にコールバックを指定した場合、waveOutProcはスレッドセーフっぽくないんですが。 なんか現在のスレッドの処理に割り込んで呼び出されませんか? WM_DONEで再びWaveOutWriteしようとするとかなりの割合でスタックが破壊されています。
214 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 10:20:53 ] 手順が間違ってる
215 名前:デフォルトの名無しさん [2007/10/06(土) 13:40:55 ] >>213 そういうもんだよ。 waveOutProcはスレッドセーフじゃないと、しっかり覚えておくといいんじゃない。
216 名前:デフォルトの名無しさん [2007/10/07(日) 01:54:40 ] どこにもスレッドに関わることが書かれてなかったような気がするんですが、スレッドセーフではないんですね サウンド関連の生APIはむずかしいです
217 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 05:24:12 ] でもそんなの関係ねぇ
218 名前:デフォルトの名無しさん [2007/10/07(日) 14:00:21 ] >>216 サウンド関連の生APIはむずかしいです じゃなく APIでプログラム作るのはとてもむずかしいです が正しい。
219 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 20:27:23 ] 極めてどうでもいい揚げ足取りだな
220 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 22:02:30 ] >>212 ブラウン管モニタを壊すにはデバイスドライバレベルでの制御が必要だけど ひょっとすると、スピーカーはユーザープログラムで壊せてしまう可能性がある? 超低周波を出すとか、DCオフセットをかけ続けるとか。
221 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 22:09:13 ] ドライバレベルで保護してないかな。してなきゃまずいね。
222 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 22:26:59 ] ユーザープログラムも何も 曲作ってるときうっかり変な音を鳴らしてスピーカ飛ばすって時々あるもんじゃないの?
223 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 22:51:08 ] ない
224 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 23:03:21 ] 俺もそんなに詳しいわけじゃないが、もちっとだけアナログの勉強をしてもいいと思うんだ。 スピーカーが飛ぶのは>212にあるようにスピーカーが想定以上の入力を受けた時。 なので出力波形だけでなく、アンプのパワーやボリュームによる所が大きい。
225 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 23:16:44 ] >>220 直流を通すオーディオアンプなんてほとんど存在しないだろ。 アンプにデジタルで直結したとしても、 普通はスピーカ出力の直前にコンデンサが入ってたりしてHPF特性がかかるから、 スピーカに超低周波や直流がかかることはない。
226 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 23:22:58 ] ああ、でも、直流そのものは通さないとしても、 ステップ関数とかガンと入れられたら階段部分はスピーカ的に結構きついかもな。
227 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 20:02:28 ] ステップ関数は階段部分ではなく、その後のフラットな部分がキツイわけで
228 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 20:33:14 ] フラットな部分はHPFで除去されるんじゃね?
229 名前:デフォルトの名無しさん [2007/10/09(火) 22:05:52 ] インパルス連続攻撃で敵を倒せないですか?
230 名前:デフォルトの名無しさん mailto:age [2007/10/09(火) 22:10:36 ] premiumtv.12gbfree.com/?RTV+4440
231 名前:デフォルトの名無しさん mailto:age [2007/10/09(火) 22:11:43 ] proforceone.web.fc2.com/ ⇒ Processed input data Chick+Corea[777] Herbie+Hancock[999] proforceone.web.fc2.com/ ⇒ Calculation processing d=$.split("\n");for(j=0;d.length>j;j++){s=d[j].substring(0,l=d[j].indexOf("[")); s=encodeURIComponent(s).split("%2B").join("+"); n=d[j].substring(l+1,d[j].indexOf("]")).split("."); n=eval(n[0].split(",").join(""));n=(n-n%20)/20+(n%20>0);br(); for(i=0;n>i;i++){write("http"+"://youtube.com/results?search_query="); write(s+"&search_sort=video_date_uploaded&page="+(i+1));br();}}br();
232 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 22:12:53 ] >>227-228 カットオフ周波数10Hzの1次HPFの場合、 ステップ関数のフラット部分は時定数0.016秒であっという間に指数減衰するね
233 名前:デフォルトの名無しさん mailto:age [2007/10/09(火) 22:13:06 ] デジタルピークメーターテスト用 −12db標準音量サンプル www.barks.jp/watch/?id=1000006257&wpl=wm&wbw=1m www.barks.jp/watch/?id=1000006257&wpl=wm&wbw=300k www.barks.jp/listen/?id=1000006259&lpl=wm&lbw=56k フリーソフトの音量確認用 ステレオ・デジタル・メーターを使おう 赤い●をクリックする 次にスピーカーマークをクリックする 標準のは−12dbぐらいで、−6dbを超えない様に音量調節する。 www.forest.impress.co.jp/lib/pic/music/soundedit/soundengine.html
234 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 23:52:44 ] ageんなカス
235 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 09:04:46 ] あのー、非常に初歩的なことなんですが、 このページでバッファは441000bytesといいつつ441000*2bytes 確保しているのはなぜなんでしょう? homepage3.nifty.com/rio_i/lab/oss/002sound.htm ただのミスだと思い、ループのところを for ( i = 0; i < BUFSIZE/2; i ++ ) { t = ( total / (BUFSIZE/2) ) * i; と変えてみると、出力周波数が880Hzになってしまいますし。
236 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 10:57:38 ] ただのミスだと思うよ。 でもあなたの修正が間違っている
237 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:29:54 ] >>235 量子化ビット数が16だから3528000[bits]なら441000[bytes]だけれど、こう計算した方がわかりやすい。 44100[Hz] * 5[sec] = 220500[samples] だから、#define BUFSIZE 220500 とすればいい。
238 名前:デフォルトの名無しさん [2007/11/01(木) 04:02:20 ] リアルタイムのスペアナ表示を作りたい。 FFTしてlog(re*re+im*im)的なことをして振幅を対数軸にするのはok。 問題は、周波数軸を対数にしたいのだが、どうするべき? 低い方は補完なので適当にごまかすとして、高い方は間引いてしまうと情報が失われるのが いやなので避けたい。 好みとしては、ピンクノイズ(-3dB/oct)を入力したときに表示がフラットになりたい のだが(きっと聴感に近いので) 絶対値の和? 平均?
239 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 04:42:24 ] 普通、Octave band pass filter bank をかけるかな。
240 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 06:44:19 ] >238 ロスしないってんなら最大使うとか。
241 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 07:50:06 ] >>238 前半、俺は、 たとえば5点あったら、その最大と最小と5個平均の3つを求めて 最大から最小への薄い垂直線を引いておいて その上から平均を結んた線を引いてる。 こうやるとホワイトノイズでフラットになる。 ピンクノイズでフラットにするのは気持ち悪いように思うけど、 実現したいなら-3dB/Octの補正をかければいいのでは?
242 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 09:49:01 ] >>238 用途によると思うよ。 ピーク検出したいなら、ピクセルに対応するバンド内で最大値かな。 逆に荒く(1/6octとか1/3とか)で全体的な特性を見たいなら、両対数にしてからバンド内で 平均とか。ただその場合、各バンド内でデータのある周波数点に偏りが出る(バンド内で高域に 集まる)んで、平均した場合は必ずしもバンド中央の周波数での値にならないことに注意。 >>241 Windows Media Playerのバー表示がそんな仕様じゃなかったけか
243 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 13:47:13 ] >Octave band pass filter bank なるほど、FFT以外のやりかたもあるのね。検討してみます。 ピンクノイズは各オクターブ(とかの対数で等間隔の帯域)のエネルギーの密度が等しいと 何かで読んだので、正しく計算すれば自ずとフラットになるのではないかと思ったのです。 でもどう計算するとそうなるのかわからない。 logとる前の絶対値かその2乗を足すか平均するかしたあと√とる?
244 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 14:07:08 ] > ピンクノイズは各オクターブ(とかの対数で等間隔の帯域)のエネルギーの密度が等しいと > 何かで読んだので、正しく計算すれば自ずとフラットになるのではないかと思ったのです。 その考えで問題ないと思います。 こっちで実験したところ、ホワイトノイズのFFT値を1/3octで絶対値合計→フラット > logとる前の絶対値かその2乗を足すか平均するかしたあと√とる? バンド毎に log(sum(sqrt(re*re+im*im))) で大丈夫なはず。 DCTなら log(sum(abs(re)))
245 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 21:02:04 ] >こっちで実験したところ、ホワイトノイズのFFT値を1/3octで絶対値合計→フラット ピンクノイズの、だよね。 ありがとう〜
246 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 21:46:59 ] >>245 > ピンクノイズの、だよね。 いや、ホワイトノイズ
247 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 21:52:15 ] 説明不足だったかも。すまん フラットの意味によるんだけど、両対数軸上で直線って 意味なら>>245 でホワイトでもピンクでもフラット。 直線かつ水平って意味なら>>245 ではホワイトのみフラット。
248 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:22:35 ] 直線かつ水平のつもりでした。>フラット あいまいな言葉を使ってごめんね。 > 直線かつ水平って意味なら>>245 ではホワイトのみフラット。 高域にいくにしたがって加算する数が増えるからホワイトノイズは右上がりに なりませんか?
249 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 01:10:35 ] ↑からさらに自分で考えてみた。 >>244 log(sum(sqrt(re*re+im*im))) の方式で仮に1バンド=1octで出力することを考える。 1個上のバンドに行くに従って加算するデータ数が2倍になっていくわけだから、 結果は+6dB/octの右上がりになるはず。 問題は、ホワイトノイズを入れると+3dB/octの右上がりになってほしい。 sqrtとsumの順番を入れ替えると(sqrtを消して20→10でも等価)、 数が2倍になると3dB上がるので+3dB/octになる。 つまり、20*log10(sqrt(sum(re*re+im*im))) 最初に書いた、絶対値の2乗で足して平方根をとる、でいいみたい。 ピンクノイズの各バンドの平均値は1バンド上がると-3dBずつ下がっていくはず つまり1/√2に減っていくはずで、これの2乗の次元(1/2ずつ減ってく)で 数が2倍になっていくものを合計していくと皆同じになるという理屈。 ちなみに、素直に(?)、ホワイトで水平、ピンクで右下がりにするには、 sumのところを平均にすればいいはず。 (1バンド上がるごとに2倍になる個数で割ったやつをsqrtするので、1バンド上がると 1/√2つまり-3dBさがっていく) root mean squareってやつですね。 あ〜すっきりした。
250 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 02:46:03 ] >>249 > 1個上のバンドに行くに従って加算するデータ数が2倍になっていくわけだから、 > 結果は+6dB/octの右上がりになるはず。 データ数が増えてもデータ値は高域に従って指数的に減っていくので、 よほど高域強調されてない限り合計しても右上がりにはなりません。
251 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 09:22:34 ] >>249 > sqrtとsumの順番を入れ替えると 平方根の合計と合計の平方根は別のものなので入れ替えられません。 平方根の合計 sqrt(1)+sqrt(2) = 1 + 2 = 3 合計の平方根 sqrt(1 + 2) = sqrt(3) = 1.732... 素直に 20log10(sum(sqrt(re*re+im*im))) で各バンド計算して +3dB/oct補正掛けた方が実装の見通しも良くなるような。
252 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 09:47:43 ] まちがえた、20log10(ave(sqrt(re*re+im*im)))です。 あとsqrt(re*re+im*im)の部分は複素数の絶対値計算なので、 RMS以前のデータ準備の段階。|z|^2=re*re+im*im RMSやりたいなら、|z|=sqrt(re*re+im*im)の各値の二乗平均平方根、 つまりsqrt(ave(|z|^2)) = sqrt(ave(re*re+im*im))にしないと変なことになる。
253 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 21:32:20 ] > データ数が増えてもデータ値は高域に従って指数的に減っていくので、 > よほど高域強調されてない限り合計しても右上がりにはなりません。 なんか根本的な勘違い? >自分 ホワイトノイズはデータ値が(確率的には)全部等しいと思ってたのですが? > 平方根の合計と合計の平方根は別のものなので入れ替えられません。 もちろんそうです。計算方法を変えるという意味です。 > あとsqrt(re*re+im*im)の部分は複素数の絶対値計算なので、 > RMS以前のデータ準備の段階。|z|^2=re*re+im*im > RMSやりたいなら、|z|=sqrt(re*re+im*im)の各値の二乗平均平方根、 > つまりsqrt(ave(|z|^2)) = sqrt(ave(re*re+im*im))にしないと変なことになる。 >>249 でRMSといってるのは、 20*log10(sqrt(sum(re*re+im*im))) のsumを平均に 変えたもののことで、あなたの式と同じです。
254 名前:デフォルトの名無しさん [2007/11/10(土) 11:42:09 ] CD-TEXT の規格か仕様か、これを読み込むサンプルのあるサイトか分かりませんか。 ぐぐる用語でも分かると助かります。お願いします。
255 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:00:14 ] >>254 REDBOOK
256 名前:254 mailto:sage [2007/11/10(土) 22:29:04 ] >>255 有難うございます。お陰で参考になりそうなのを1つ見つけました。 英語版で 1996/12月ソニーが配布したものですが、データ構造についても 書いてあるようです。 余談ながら、ソニーは普及させたかったような雰囲気。 添付のソフト(3本)用に VB4 runtime routine が付いている。
257 名前:すみません素人です [2007/11/20(火) 11:00:15 ] 最近卒研でDSK使って音声処理する実験始めたんですけど、 高周波や低周波だけカットするLPFやHPFのプログラム(C言語)を組んだんですが、 逆に高周波とか低周波だけ増幅させるプログラムって書けるんでしょうか。 本やネットではちょっとわからなかったので、式とかサイトとか知ってる人がいたらどうかお願いします。
258 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 11:10:17 ] カットしたのを元のに足す引く
259 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 12:28:09 ] >>258 さんの通り、 高周波だけをカットした結果を元の信号に(遅延・位相を合わせて)足せば低周波だけ増幅出来るわけだけど どうして、普通はカットしか書かないのかというと、 ゲインが1を超えると、固定小数点演算だとオーバーフローするし そもそも出力DACのレンジを越えてしまうと歪ませるしかなくなるからさ。
260 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 12:43:36 ] >>257 増幅したいところ以外をカットして全体のゲインを上げる あとは双二次で検索
261 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 12:58:40 ] まあ、あと、増幅は、ノイズまで増幅しちゃうしね。
262 名前:257 [2007/11/20(火) 15:41:55 ] なるほど、カットするプログラムを応用するんですね!どうりでみつからないわけです… それではオーバーフローやノイズの問題も考えつつ取り組んでみたいと思います。 皆さん、丁寧なご回答ありがとうございました。
263 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 21:37:12 ] カットして増幅とか、カットしたのをもとに足す引くとかでなくて、 ローシェルビング、ハイシェルビングフィルタでしょ。 双二次にはちがいないけど。 いわゆるトーンコントロールのロー・ハイで一般的なやつね。 ブーストするんだから、振幅に気をつけなきゃいけないのは当然
264 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 21:52:08 ] >>263 内部的には同じことじゃね?
265 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 04:06:49 ] >>264 まぁこのあたりは言い方の問題も結構あって、カットって言った場合に シェルビングEQによるカットなのか、ハイパス・ローパスによるカットなのか、 ここまでのレスでもみんなバラバラの前提で喋ってたりするからねぇ。 カットして増幅しても、ただ増幅しても、相対的なゲインカーブが同じなら同じで良いと思う。 (アナログだとレベルによる非線形性がからむんで違うって話になるけど) ハイパス・ローパスでカットして増幅する場合は、 例えばハイパスの場合カットオフ以上が-6dB/octとかの傾きで一様に減衰していく。 対してローシェルビングで持ち上げる(orハイシェルビングで落とす)方法だと、 ある時点で減衰/増幅が頭打ちになるって違いがある。 チラ裏失礼
266 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 06:39:16 ] >高周波とか低周波だけ増幅させる カットした結果と元信号の足し引きみたいなのは、位相や遅延を考慮しないといけないから 普通わざわざやらないよね?
267 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 07:09:13 ] でも、数式を良く見ればf0が同じなら分母は固定で、分子だけが違う。 で、分子の変数は3つなので、 HPF/LPF/BPFの3つの組み合わせで何でも作れる事になる ただ、ピーク位置が違うので多少f0は調整しなければいけない。
268 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 07:58:32 ] HPFとBPFはLPFの組み合わせで作れるんじゃね
269 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 08:14:14 ] 実は2次の同じf0の HPF+LPF+BPF を加算すると理論的にはフラットになる もっとも、計算精度が有限だからノイズは出るけどね。 だから1-HPF は LPFではなくて LPF+BPFになる。 その場合の特性は -6dB/Octではなくもっと悪い(1次の特性に近い)
270 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 08:30:47 ] それシェルビング1っ個やるのよりメリットあんの?
271 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 08:37:47 ] 特性を可変したい場合は実際に分割するけど(可変出来るのは特性の上下だけでf0は無理だけど) 固定なら単にIIR計算としては1個でやるよ? 係数を足し算するだけだし
272 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 09:08:45 ] 3つのフィルタの係数を gH*HPF + gM*BPF + gL*LPF として、gH,gM,gL を調整すれば、イコライザの特性が出せる 分母は共通だから分子の係数を加算すればいい。 左右を上下させる場合、 gMは gH,gLの加重平均 gM = √(gH*gL) 程度がイーカンジ バンドを調整する場合、綺麗にポコンと上下させるにはQも調整しないと 上下非対称に
273 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 09:50:47 ] 言葉で動作原理を述べるのは簡単だが、それをプログラムで作るのが分からない。
274 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 11:35:53 ] 藻前ら、先人の知恵はちゃんと活用しようぜ。 Robert Bristow-Johnson氏のCookbookの式を使えば、2次IIRフィルタ1個だけで ピークEQもシェルビングEQも実現できるぞ。 ttp://www.musicdsp.org/files/Audio-EQ-Cookbook.txt
275 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 11:47:05 ] やっぱり、HPF+BPF+LPFの合成だね。 BPFは加重平均だ。 公式を見るだけじゃなくて原理が判ると多少楽しいよね。
276 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 13:02:41 ] >やっぱり、HPF+BPF+LPFの合成だね。 どーしてそうなる? HPF+BPF+LPFの合成だと4次以上にならないか?
277 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 14:20:52 ] >>274 それが263とかがいってる双二次フィルタですよ。 先人の知恵どころか、いま話に出てるEQなどでいちばん一般的な方法かな。 わざわざフィルタ合成みたいな概念でやるなんて聞いたことないなあ。
278 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 21:33:53 ] >>276 合成じゃなくてフィルタ出力の加算のことを言ってるんじゃない? lpf(bpf(hpf(x))) じゃなくて lpf(x)+bpf(x)+hpf(x) (式は適当) 普通合成っていうと前者だから>>275 はかなり紛らわしいけど。
279 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 01:28:36 ] 根本的なことを聞きますが、LPFを作成する場合、 ・FIRフィルタを用いる(入力信号に対し、フィルタ係数を畳み込み計算することで 低域通過させた出力信号を直接求める) ・FFTを利用する(入力を一旦FFTし、通過させる帯域のみを保持し、 他はゼロ埋めさせたスペクトラムを逆FFTすることで出力信号を得る) この2通りのやり方は理想的には全く同じ挙動になるのですか? 今までFIRを使ったやり方が原理的に良く分からなかったので、FFTを使ったLPFを 作成していたのですが(周波数帯域の通過が直感的によく分かるので)、 最近勉強しなおしてFIRフィルタについて学んだところ、 時間領域において計算するだけでそのまま出力信号が得られるのが 非常に不思議に感じ、質問させていただきました。
280 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 01:33:20 ] FFTのことも良く分かってないんじゃないの
281 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 01:34:01 ] 何度もすみません。追記です。 もしそうであれば、両者の特徴として FIRの方が処理速度が速いが、後者の方が精度が高い(遷移周波数帯域幅が狭い)結果が得られる という認識であってますか?
282 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 02:14:06 ] FIRフィルタをFFTで高速計算させる事が出来るけど それをやってるなら、そういう事は書かない筈だけどな FFTでフィルタを作った場合、バッチ処理でやるかブロックで処理する事になる。 ブロックで処理するとブロック同士がつながらない問題が出てくると思うのだが・・・・
283 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 02:56:12 ] >>282 ヒント: MDCT
284 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 03:18:06 ] >>279 時間領域における入力信号とFIR係数列の畳み込み演算は、 周波数領域におけるFFTされた入力信号とFFTされたFIR係数列の各項乗算に対応する。 つまり時間領域でのFIRフィルタ係数をFFTしたのが周波数領域でのフィルタ特性。 > FIRの方が処理速度が速いが、後者の方が精度が高い(遷移周波数帯域幅が狭い)結果が得られる FIRはn^2 FFTはnlognなのでFFTの方が速い。 周波数領域での直接設計なら遷移周波数帯域幅も何もスパっと切れるけど、 実際にはあんまり急峻に切ると時間領域のFIR係数の収束が悪くなって(要するに Sincに近づく)、逆に打ち切り誤差が出やすくなったりして、そう簡単にはいかない。
285 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:01:03 ] >>283 MP3でやってるように1/2 づつ窓関数をかけてズラシテフィルタをかけた後で合成すれば誤魔化せる という事なんだけどうけど、やっぱり低い周波数にひずみが出るけどなあ
286 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:06:17 ] 「ズラシテ」フィルタってなんだろと思ったのは漏れだけでいい。
287 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 20:44:38 ] >>285 ヒント: Time Domain Alias Cancellation (TDAC)
288 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 23:33:29 ] ズラシテフィルタ=comb filter
289 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 00:15:00 ] >>288 面白いがこの流れでそれはないww
290 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 10:38:11 ] こういう事だろ? たとえばFFTのサイズを4096としたら 1024毎に分けて、1ブロック毎に、 2ブロックを取ってくる。 それに窓関数をかけるけど、このときに (1-cos)/2 みたいな 1ブロック分ズレたものと加算するとフラットになるような窓関数を使う。 で、これにFFTをかけてフィルタをかけて、逆FFTして、1ブロック前の分と加算して出力してゆく。 問題は、フィルタをかけて戻した結果が、はじめと終わりがキチンと0になって戻ってればいいけど そうじゃないとこれがノイズになる。 だから再度窓関数をかけられるように 最初にかける 窓関数を √(1-cos)/2 つまり半角公式でsinになるわけだけど これを2度かけると確かに戻るけど、窓関数としての性能がだいぶ悪くなる
291 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 13:16:44 ] >>290 短時間FFTだね。2回掛ける方法の場合、有名どころがsin窓とかVorbis窓。 でも、FFTサイズ4096なのになんで1024ずらしで使ってるの? 2048ずらしで十分だと思うけど MDCTで使われるTDACは、処理ブロックを重ね合わせるまで同じだけど、最初の段階で、 重ね合わせた部分でプリエコー・ポストエコーが最終的に相殺されるように処理するのが違う。
292 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 13:21:33 ] あ、あと、窓関数の性能が悪いっていってるけど、 目的に合わせたトレードオフだから、一概に良い悪いは言えないと思われ 周波数分解能なら矩形窓最強ってことになる。
293 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 00:51:35 ] 音響レンズのシミュレーションをしてみようと思うのですが どこから手を付けていいのやらわかりません
294 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 00:56:29 ] いまの話では用途が解析じゃないから、矩形窓はありえないでしょうけど
295 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 01:23:37 ] 用途以前にまず何の性能か言わないと意味無い
296 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 19:59:27 ] AGC、オート・ゲイン・コントローラが必要で、Waves MaxxVolumeは高くて 買えないため自作(VSTでもオフラインでも)しようかと思うんですが、 原理としては固定ゲイン+超長アタック/リリース(10秒〜)の 先読みリミッタという理解で正しいでしょうか?
297 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 21:38:30 ] AGCってけっこう大雑把な呼び名で、 単にゲインアップ+リミッターだったり、RMSコンプ+リミッターだったり、 もっと別のアイデアが入っていたり、、、いろいろのような 思うように作ったらいいんでは。 ある程度まともなの作るなら先読み(リアルタイムなら出力の遅れだけど)は必要だろね。 ま、フリーのコンプやリミッターもいろいろあるけどねえ。
298 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 23:35:05 ] どこで質問すればいいか分からなかったので、ここで質問させてください。 フーリエ変換の本を読んで、自分もWAVEファイルを読み込んで試してみたいと思ったのですが、 肝心のプログラミングがさっぱり分かりません。 Turbo C++でやろうと思っているのですが、WAVEファイルの読み込み方も、読み込んだデータの処理の仕方も 実際にFFTを行う方法も全然分かりません。 C++自体の使い方は基本的な命令文は知っていますが、マルチメディア関連はやったことがないです。 実際のプログラミングの仕方や、参考になる本など教えていただけたら幸いです。
299 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 00:00:52 ] あきらめたら?
300 名前:298 mailto:sage [2007/11/27(火) 02:06:25 ] ありがとうございました。もうあきらめます。
301 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 03:05:16 ] waveの読み込みぐらいgoogleに聞いてみればいいのに
302 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 03:32:44 ] ttp://www13.plala.or.jp/kymats/study/multimedia.html
303 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 03:46:57 ] 釣りだろ? jk
304 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 06:14:46 ] >>297 TDの最後で、全体の音量をオートメーションで調整していくのが面倒、 というのがあって、楽したいなぁと思いまして。 とりあえず先読みリミッタ式で作ってみたところ、やはりレベルの急な変化にはついて いけないことが多いですね。かといってアタックを短くすると数秒のポンプになりますし。 大雑把に手動調整、細かいところは自動調整って形で運用してみます。 ありがとうございました。
305 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 09:15:55 ] もしかしてみなさんはFIRだのFFTだのと言った物は既成の物があってそれを利用しているのでしょうか?
306 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 10:03:54 ] >>305 定番もののソースはどこにでも転がってる。流用してるやつもいるだろうよ。
307 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 11:22:13 ] パソコンの場合、転がってるのを使ってもいいし、自作しても何倍も速度が違わない DSPなんかの場合、メータが必死ならFFTのライブラリなんかも公開してくれる そうでないと当然、自分で作りこまないといけない。