ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

ホーム > コミュニティ > 学問、研究 > ディジタル信号処理 > トピック一覧 > 初心者向け質問トピ

ディジタル信号処理コミュの初心者向け質問トピ

  • mixiチェック
  • このエントリーをはてなブックマークに追加

コミュ内全体

すでに各領域ごとにトピックはあるかと思いますが、当該トピックはこれからディジタル信号処理を学ぼうとする者が、熟練の先達に教えを乞う場にしたいと思います。
ディジタル信号処理全般にわたる質問を可としたいと思います。
諸先輩方、なにとぞ宜しくご回答賜るようお願いいたします。

コメント(28)

wavなどの非圧縮音声データについての質問です。
デジタル信号処理の書籍やネット上の記事を見ると、16ビット量子化で記録された音声が実現できるダイナミックレンジは、
 0〜65535
の65536通りの表現が可能なので、これを常用対数で換算すると96dBとなる、つまり96dBが答えのように書かれております。
 
しかし、音声信号の振幅は正負両方に分布しており、数値のほんとうの意味は
 0を中心に+32767 〜 -32767
ということだと思うのです。
ということは16ビットであっても正負符号に1ビット消費することになり、事実上振幅は15ビットで表現していると考えられます。
15ビットであれば、実現できるダイナミックレンジは96dBではなく、約90dBぐらいになると思うのですが、この考え方は誤りでしょうか?
>ケロット軍曹さん
早速のご教示ありがとうございます(お名前に親近感を感じます^^)

さて、「+32767 〜 -32767で何通り表現ができるのか?ということを〜」でありますが、たしかに2の16乗個の表現パターンがありますから、(0を含めるかどうかの議論はおいて)65536通りの表現が可能であり、そこから96dBという答えが出てくるのだと思います。
しかし通常、音量レベルというものを考える場合、中心0からの距離(振幅?)を指すもののように思えます。正への変位であっても負への変位であっても絶対値をとれば最大値は32767しかなく、そう考えれば90dBのダイナミックレンジしかないように思うのです。
すみません。わたしの説明が拙くうまく質問をお伝えできていないようです。

> f(t)=|Asinωt| で済むということでしょうか?

いいえ、(単)振動の運動はあくまでも f(t)=Asinωtです。
振動は自然には正負双方に現れるものであり、正だけに揺れるものと主張しているわけではありません。

ただ、「振幅を求める」といった場合、図でいうaを指しているものと思います。
通常bではなくaを振幅と呼びますよね?
フーリエ解析においてもaを求めていると思います。
振幅が-32768から+32767まで振れる波形を0dbとします。
すると、振幅が-16384から+16384まで振れる波形が-6dbになります。
同様に、振幅が-8192から+8192まで振れる波形が-12dbになります。
同様に、振幅が-4096から+4096まで振れる波形が-18dbになります。
同様に、振幅が-2048から+2048まで振れる波形が-24dbになります。
同様に、振幅が-1024から+1024まで振れる波形が-30dbになります。
同様に、振幅が-512から+512まで振れる波形が-36dbになります。
同様に、振幅が-256から+256まで振れる波形が-42dbになります。
同様に、振幅が-128から+128まで振れる波形が-48dbになります。
同様に、振幅が-64から+64まで振れる波形が-54dbになります。
同様に、振幅が-32から+32まで振れる波形が-60dbになります。
同様に、振幅が-16から+16まで振れる波形が-66dbになります。
同様に、振幅が-8から+8まで振れる波形が-72dbになります。
同様に、振幅が-4から+4まで振れる波形が-78dbになります。
同様に、振幅が-2から+2まで振れる波形が-84dbになります。
同様に、振幅が-1から+1まで振れる波形が-90dbになります。
同様に、振幅が-1から+0まで振れる波形が-96dbになります。



簡単に、トビ主さんの考えを書くと
±の符号付きの場合は2の補数表現をしますね。
簡単のため3bitで表現
011(+の最大)
010
001
000
111
110
101
100(−の最大)
うーん、7段階表現ですね。6dB×7(8bit−1)=42dB
こう言いたいのでないでしょうか。
はじめまして、僕も気になっていた疑問なので横から失礼します。
フォーマットとして0を原点として正の振幅が+32767までの32768段階、負の振幅が-32768までの32769段階ってことは、数値が同じでも正負によってわずかに振幅が違うってことになるんでしょうか?
>のぐーさん

各レベルごとに列挙くださりありがとうございます。
6dBずつマイナスしてゆく過程はわかりやすいです。

しかし、最後の 
 「振幅が-1から+0まで振れる波形が-96dbになります。」
が、いまひとつ正負不均衡でモヤモヤしますし、

むしろ、一個前の
 「振幅が-1から+1まで振れる波形が-90dbになります。」
が考えられる最小レベルかと思ってしまうのです。
となるとやはりダイナミックレンジは90dBではないかと・・・
> Blackmanさん

ご例示の3bit表現であれば、わたくしの感覚では
プラスの最大3 マイナスの最大-3(-4かな?)
あくまでも0からの距離ということで

20Log(3)=9.54dB ・・・あれっ?

ってなことになってしまうのです。
うーんそもそも、PCMデータの内部表現を正しく理解していないのかもしれません。
PCMというのは、ある瞬間の電圧値をはかったものをデジタル化し、時系列に並べたものです。
-1から+1まで振れる波形の振幅を1とするなら、
-1から0まで振れる波形が存在し、その振幅が0.5と定義できるというだけのことです。
実際に録音してみるとわかります。16ビットだとアナログのノイズレベルのほうが大きいので8ビットで。

-1から0まで振れる波形だと、中央が0にならないと思うかもしれませんが、
そもそも0Vという電圧値が、PCM上の0になるとは限りません。
(回路に誤差があるため)
>11
たしかに、アナログ入力は実数値をとるのでどこかで「丸め」ないといけないですね。必ずいずれかのデジタル値に割り当てられるのはわかります。
また、その丸め方の癖はAD変換器の質にもよりますね。

> -1から+1まで振れる波形振幅を1とするなら、
> -1から0まで振れる波が存在しその振幅が0.5と定義できる

ということは、PCMの記録方式というものは、実質、負の方がレンジが広いということでしょうか? この点、hotwaterさんも同様の疑問をお持ちのようなので、まずはdBのことは置いておいて、PCMの内部表現、特に0付近の微少な振動がどのように表現されているかを明らかにできれば幸いに思います。

ちなみにわたくしは、「2の補数」や「オフセットバイナリ」という概念までは理解できております。 ただどこが振動の中心なのか、ゼロには正のゼロと負のゼロが存在するのか、そのあたりがわからないです。
>12

> 基本的に、符号ビットで1ビット取られるからダイナミック
> レンジが小さくなるという論旨でいいんですかね?

はい。その論旨です。

単純に 20Log(32767) ≒ 90dB
と考えて疑問にぶつかった次第でございます。
>> -1から+1まで振れる波形振幅を1とするなら、
>> -1から0まで振れる波が存在しその振幅が0.5と定義できる
>ということは、PCMの記録方式というものは、実質、負の方がレンジが広いということでしょうか?

実際の(普通にAD変換した)データでは、-1から0になったり、0から1になったり、
467から468になったり、-1050から-1049になったりと色々です。
(AD変換回路の誤差というより、それ以前のアナログアンプから直流成分が流れてきてるのかもしれません)
いずれにせよ、「-1から+1まで振れる波形」の半分の振幅の波形が表現できるということが重要です。
(AD変換でなく計算で波形を作る時は、私は-1から0にします。0から1にはしません。
それはやはり↓以下の事情があるから。)

無茶苦茶厳密に言えば、16ビットのデータ範囲は-32768から+32767ですから、
「負の方がレンジが広い」ということも確かに言えます。しかしそれは
大振幅の時ですから誤差の範囲です。
最初に
>振幅が-32768から+32767まで振れる波形を0dbとします。
>すると、振幅が-16384から+16384まで振れる波形が-6dbになります。
と書きましたが,ここでごまかしをしています。
「-16384から+16384まで振れる波形」の6db上は
「-32768から+32768」であるはずです。しかしこれは表現不可能です。
しかし大振幅の時の1の差はあまりに小さいため無視できます。

なお8ビットだとこの誤差が大きくなりますが、まだ「誤差の範囲」と呼べる量です。
発言7のBlackmanさんのように3ビットみたいな量子化を考えると無視できなくなります。
この場合、数値のとりうる範囲が-4から3ですので
-1から0の波形を0db
-1から+1の波形を+6db
-2から+2の波形を+12db
-4から+3の波形は+17db(+18dbではない。-4から+4ではないので)
と下から(振幅の小さいほうから)考えるとわかりやすくなります。
(まっとうに計算すると20*log(7)≒16.9になります。)
> のぐー様

ようやくわかってきたように思います。ありがとうございます。
計算機が2値素子を使っている限り、表現できる数が偶数になってしまうのは仕方ないことですし、そのため「真の中心」がずれてしまうのも仕方がないことですね。

どうも、「振動の中心は絶対に0でなければならない」との先入観があったようです。

振幅1よりも小さな振動を計算作成する場合に、
0〜1 の間で振動させるのではなく、
0 〜 -1 の間 で振動させた方がよい理由は、

?負のレンジの方が、ほんのちょっぴりだけ広いってだけの理由からなのですね?
?もちろん 正(0〜1の間)で振動させても、さほど問題ないってことですよね?
?上記?と?いずれにしても振幅1以下のものを表現する場合は、ちょっと中心からずれてしまう(バイアスっていうんですかね?)わけですよね?

----------------------------------
そして当初の質問に戻ると、

16ビットで表現できる最大振幅 M = 32768(もしくは、32767)
16ビットで表現できる最小振幅 m = 0.5
そこでダイナミックレンジは
=20*Log(M/m)
=20*Log(32768/0.5)
=20*Log(65536) ≒ 96dB ∴ 96db

という考え方でよろしいでしょうか?
おかげさまで解決いたしました。
ご回答いただいた方々ありがとうございました。m(_ _)m
僕からも。
ありがとうごさいました!
最近信号処理の勉強を始めました.それで, FTなどの解析法も勉強しているのですが
イマイチどのように使い分けたらよいのかという点がわかっていません.
どのような場合にはどのような処理方法が適しているのか,
それぞれの計算方法の利点や欠点は何なのか.
このあたりが分らずじまいで凄くモヤっとしています.

例えばフーリエ変換や, FFT, 多変量AR, ウェーブレット変換, 時間周波数解析などは
どのような特徴があり, どのような場合に使える(有益)のでしょうか?
色々聞いてすみません. もし量が多いようでしたら解りやすく説明していただけるサイトだけでも
良いので教えて下さい. 
>例えばフーリエ変換や, FFT, 多変量AR, ウェーブレット変換, 時間周波数解析などは

広い概念レベルの話と具体的な手法の話が混じってるような気がします。

・時間周波数解析:波形を(たとえば)時間を横軸に周波数を縦軸にというふうに表現して周波数の時間変化を解析すること。
・フーリエ変換:波形をサイン波に分解する。これは波形を周波数に分解できるが、サイン波というのは無限時間に続くものであるのでそのままでは時間周波数解析にならない。
・短時間フーリエ変換:窓関数で波形の一部を切り出すことで時間周波数解析を可能にする。
・FFT:フーリエ変換を高速に計算する方法。ただし周波数が離散的になるので、それでは困る場合はDTFTという別の方法がある。
・ウエーブレット変換:サイン波ではなく「さざ波」を使うため、最初から時間周波数解析になっている。
(時間周波数解析に使える他の手法としては、ウィグナー分布とか最大エントロピー法とかがあります。多変量ARというのは私は知りません。)

なお以上は解析の話でしたが、逆変換(周波数データから波形を再構築する方法)が存在する場合、音声等の圧縮や加工に使ったりもします。
ケロットさん,のぐーさん

詳しいありがとうございます.これからもがんばって勉強します.
初めまして、大学でディジタル信号処理を勉強中です。
CMA(Constant Modulus Algorithm)について勉強中なのですが、なかなか文献が見当たりません。どなたか、どのような本に載っているか知っていたら教えていただきたいです。
コメントがつかないようなので…。
ググっただけですが、こんなのが出てきました。
http://www.amazon.co.jp/dp/1608452565
http://www.jpo.go.jp/shiryou/s_sonota/hyoujun_gijutsu/mimo/2-6-1.pdf
http://techon.nikkeibp.co.jp/award/papers/pdf14.pdf
http://ci.nii.ac.jp/naid/110003193593
http://results.atr.jp/atrj/ATRJ_14/14/abstract.cgi
はじめまして、としです。

 コミュニティに参加しましたので、ここのトピックでご挨拶します。
 初心者なので、今後ここでいろいろと質問するかと思いますが、
よろしくお願いします。

 とりあえずは、初心者用や定番の和書・洋書の教科書を
探しています。
 何かよさそうなのはありませんか?

 ちなみに、学生時代はフーリエからラプラスに移る途中で、
挫折しています。

 
「何を」「どのように」やりたいかで全く違ってくる気がします。
「何を」の例
・音を分析したい(採譜・言葉の聞き取り・声紋分析等)
・音を加工したい(イコライズ・ノイズ除去・音声合成・圧縮等)
・画像(動画)を加工したい(コントラスト強調・圧縮等)
「どのように」の例
・Windowsのプログラムとして
・スマホアプリとして
・電子回路を自分で組む
私はWindowsのプログラミングで採譜のための音の分析を主にやりましたが、
当然デジタル信号処理以前にWindowsのプログラミングの勉強が必要でした。
ある程度自分で何かが作れるめどがたったら、あとは自分の興味のむくまま
「つまみ食い」で必要な技術を習得していけばいいと思います。
本一冊まるまるじゃなくて、その中に1ページでも役に立つ部分があれば
そこだけ読むみたいな感じです。,
そういうやりかたでも長年やってくるとなんとなく全体像的なものも
わかってくるような気がします。(私はもともとこの分野は畑違いなんですが)
そういう観点からデジタル信号処理に役立った範囲で私が読んだ本をあげてみますと
「Cによる科学技術計算」小池慎一著 技術評論社
「C言語による最新アルゴリズム辞典」奥村晴彦著 技術評論社
「科学計測のための波形データ処理」南茂夫著 CQ出版社
「BASIC数値計算法」青木由直著 コロナ社
「マルチメディア技術の基礎DCT入門」貴家仁志・村松正吾共著 CQ出版社
「ディジタル信号処理の基礎はじめて学ぶデジタルフィルタとFFT」三上直樹著 CQ出版社
「音の科学」難波精一郎ほか著 朝倉書店
「ディジタル画像処理入門」酒井幸市著 コロナ社
…まだまだたくさんありますがこのへんで。
(本棚の整理が不十分で、どこに何があるかわからなかったりするので)
あとここにあげてませんが技術系の雑誌の連載や特集もかなり参考にしてます。

ログインすると、残り5件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

ディジタル信号処理 更新情報

ディジタル信号処理のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。