6.4 離散的コサイン変換 (DCT : discrete cosine transform ) (1)DCTとは

Slides:



Advertisements
Similar presentations
1 高速フーリエ変換 (fast Fourier transform). 2 高速フーリエ変換とは? – 簡単に言うとフーリエ変換を効率よく計算 する方法 – アルゴリズムの設計技法は分割統治法に基 づいている 今回の目的は? – 多項式の積を求める問題を取り上げ、高速 フーリエ変換のアルゴリズムを用いた解法.
Advertisements

情報通信システム( 2 ) 年 4 月 26 日 火曜日 午後 4 時 10 分~ 5 時 40 分 NTT-IT Corp. 加藤 洋一.
情報基礎実習 I (第6回) 木曜4・5限 担当:北川 晃. Stream クラスを用いたファイルの接続 … Dim インスタンス名 As New IO.StreamReader( _ “ ファイルの絶対パス ”, _ System.Text.Encoding.Default) … s = インスタンス名.
1 情報基礎 A 第 9 週 プログラミング入門 VBA の基本文法 1 準備・変数・データの入出力 徳山 豪・全 眞嬉 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
5.制御構造と配列 場合分け( If Then Else , Select Case ) 繰返し( Do While ) 繰返しその2( For Next )
情報処理基礎 A ・ B 第 5 回 プログラミング入門 操作の自動化を実現する仕組み. 2004/11/16 ・ 17 情報処理基礎 A ・ B 2 本日の内容 処理の自動化~プログラムの概念 ハードウェアとソフトウェア プログラミング言語 Excel における処理の自動化 入力支援の機能 分析ツール.
ディジタル信号処理 Digital Signal Processing
Fortran と有限差分法の 入門の入門の…
情報基礎実習I (第4回) 木曜4・5限 担当:北川 晃.
復習.
徳山 豪・全 眞嬉 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野
VBAを通して プログラム言語の基本構造を学ぶ
情報基礎実習I (第7回) 木曜4・5限 担当:北川 晃.
3 二次方程式 1章 二次方程式 §2 二次方程式と因数分解         (3時間).
6.3 2次元DFT (1)2次元DFTとは 画像のような2次元信号をサンプリングしたデータを 2次元DFTを
VBA H106077 寺沢友宏.
情253 「ディジタルシステム設計 」 (2)modem2
情報基礎A 第13週 VBAプログラミング VBAの基本文法7・実際のデータ処理
情報基礎実習I (第5回) 木曜4・5限 担当:北川 晃.
情報基礎A 第10週 プログラミング入門 VBAの基本文法2 データ型・If ~Then~Else
東京工業大学 機械制御システム専攻 山北 昌毅
情報基礎A 第7週 プログラミング入門 VBAの基本文法2 データ型・If ~Then~Else
デジタル信号処理③
担当 : 山口 匡 伊藤 祐吾 (TA) 宮内 裕輔 (TA)
情報基礎A 第14週プログラミング 実際のデータ処理での応用(2)
4.2 連立非線形方程式 (1)繰返し法による方法
情報基礎A 第11週 プログラミング入門 VBAの基本文法3 配列・For~Next
システム開発実験No.7        解 説       “論理式の簡略化方法”.
6.4 コード最適化 (1)コード最適化(code optimization)
羽佐田葉子 2007年3月24日 アクロス研究会@静岡大学
テキストボックス、チェックボックス×2、コマンドボタンを配置する。 コマンドボタンに機能を与える
繰り返し計算 while文, for文.
実例で学ぶプログラミング VBAを用いて簡単なゲームを作ろう 徳山 豪 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
Oracle XEを使ってみよう 初音玲.
本時の目標 「簡単なプログラム言語の意味を理解し、マクロ機能を使って簡単なプログラムを作ることができる。」
情報工学Ⅱ (第9回) 月曜4限 担当:北川 晃.
スペクトル法の一部の基礎の初歩への はじめの一歩
電気・機械・情報概論 VBAプログラミング 第2回 2018年7月2日
地域情報学演習 VBAプログラミング 第3回 2017年10月24日
相関.
デザイン情報学科 メディア情報設計 河原英紀
実践プログラミング入門2 配列を使ってゲームを作ろう 徳山 豪 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
情報基礎Ⅱ (第11回) 月曜4限 担当:北川 晃.
すべてのレポートの提出期限 1月22日 火曜日 これ以降は特殊な理由が無い限り レポートを受け取りません!
「入力」はInputBoxやテキストボックスに限らず、 セルからのデータの入力や、チェックボックス等からの入力全てを含める。
ディジタル信号処理 Digital Signal Processing
Oracle XEを使ってみよう 初音玲.
VBで始めるプログラミング 第三回 コードを書こう!! まきはた@ナーク ’04/05/21.
プログラムの基本構造と 構造化チャート(PAD)
先週の復習 2重ループを用いた、 表の記入と読み込み.
第6回レポート解説 条件1 条件2 条件3 月の入力 月、日、曜日の表示 日の入力 曜日の入力
情報工学Ⅱ (第9回) 月曜4限 担当:北川 晃.
情報実習I (第6回) 木曜4・5限 担当:北川 晃.
情報工学Ⅱ (第8回) 月曜4限 担当:北川 晃.
アルゴリズムの視覚化 この図は左が大きく、 右が小さくなるようにソートしている  この図は左が大きく、  右が小さくなるようにソートしている
情報通信システム(2) plala. or 情報通信システム(2) 年4月23日 火曜日  午後4時10分~5時40分 NTT-TX Corp. 加藤 洋一.
場合分け(If Then Else,Select Case) 繰返し(Do While) 繰返しその2(For Next)
6.2 高速フーリエ変換 (1)FFT(fast Fourier transform)とは
6.5 アダマール(Hadamard)変換 (1)アダマール変換とは
共振を防ぐように設計を行ったり, 振動を早く減衰させる設計を行う際, 固有値と固有ベクトルを求めることが重要
7.2 回帰曲線 身長と体重…関係がありそう? ??? 身長と体重の関係をグラフで観察する.
3.テキストボックスによる データ入力 データ入力と表示のプログラム.
コンピュータの高速化により, 即座に計算できるようになってきたが, 手法的にはコンピュータ出現以前に考え出された 方法が数多く使われている。
プログラミング言語によっては,複素数が使えない。
情報基礎A 第14週プログラミング 実際のデータ処理での応用(2)
5.2 グレゴリー・ニュートン(Gregory-Newton)の補間式 (1)導入
8.2 数値積分 (1)どんなときに数値積分を行うのか?
5.3 ラグランジェ(Lagrange)の補間式
8.数値微分・積分・微分方程式 工学的問題においては 解析的に微分値や積分値を求めたり, 微分方程式を解くことが難しいケースも多い。
Presentation transcript:

6.4 離散的コサイン変換 (DCT : discrete cosine transform ) (1)DCTとは DFTの式 が偶関数であれば,DFTの式の虚数項を0として

DCTの解釈 半周期分が与えられたものとして, 偶関数になるように拡張し (Sin成分,すなわち虚数項=0) 周期的に接続したDFTとみなすことができる。

(2)偶関数への拡張の方法 ①軸のところを中心とみなす方法 ②軸から0.5ずれたところで折り返す方法 ① n = 0 を中心として偶関数に拡張 元の信号 ① n = -0.5 を中心として偶関数に拡張

軸から0.5ずらす場合の接続方法も2種類 ①周期2N-1として接続 ②周期2Nとして接続(第Ⅱ種DCTで採用) ①周期2N-1として周期的に接続 ②周期2Nとして周期的に接続

(3)DCTの種類 偶関数への拡張方法,周期的な接続方法の違いにより,以下のような種類がある。

(4)第Ⅱ種DCT 第Ⅱ種は,JPEG,MPEGなど 画像処理で最もよく使われる方法 (逆変換)第Ⅲ種と同じ

VBAでの記述 ①データ宣言とパルス信号の設定 (色々な信号を設定してみよう) Private Const Num = 128 Private Const PI = 6.28318530717959 / 2 Private X(Num) As Double Private Y(Num) As Double Private Z(Num) As Double Private Sub パルス() For K = 0 To Num - 1 X(K) = -1 If K >= 30 And K < 80 Then X(K) = 1 Next X(Num) = X(0) End Sub

VBAでの記述 ②結果設定とボタンClickイベントハンドラ Private Sub 結果設定() With Worksheets("Sheet1") .Cells(1, 1) = "No.": .Cells(1, 2) = "X" .Cells(1, 3) = "Y": .Cells(1, 4) = "Z" For K = 0 To Num .Cells(K + 2, 1) = K: .Cells(K + 2, 2) = X(K) .Cells(K + 2, 3) = Y(K): .Cells(K + 2, 4) = Z(K) Next End With End Sub Sub ボタン1_Click() パルス DCT IDCT 結果設定

VBAでの記述 ③DCT Private Sub DCT() 'DCT(離散的コサイン変換) Dim C0 As Double: Dim Cn0 As Double C0 = 1 / Sqr(Num): Cn0 = Sqr(2#) * C0 For K = 0 To Num - 1 Y(K) = 0 For j = 0 To Num - 1 Y(K) = Y(K) + X(j) * Cos((2 * j + 1) * K * PI / (2 * Num)) Next If K = 0 Then Y(K) = C0 * Y(K) Else Y(K) = Cn0 * Y(K) End If Y(Num) = 0 End Sub

VBAでの記述 ④IDCT Private Sub IDCT() 'IDCT(離散的逆変換) Dim C0 As Double: Dim C As Double C0 = 1# / Sqr(2#): C = Sqr(2# / Num) For j = 0 To Num - 1 Z(j) = C0 * Y(0) For K = 1 To Num - 1 Z(j) = Z(j) + Y(K) * Cos((2 * j + 1) * K * PI / (2 * Num)) Next Z(j) = C * Z(j) Z(Num) = Z(0) End Sub

DCTの結果

色々なDCTの結果(1)

色々なDCTの結果(2)

(5)高速DCT(Chenのアルゴリズム) FFTを使ってDCTを効率よく実行することも可能。 ここでは,Chenのアルゴリズムを示す。 DCTはN=4のとき次のように行列式で表現できる。 これを小行列に分解し,因数分解することで計算量を減らす。

計算の手順 JPEG,MPEGで使われているN=8の場合

VBAでの記述 ①データ宣言とパルス信号の設定 Private Const Num = 8 Private Const PI = 3.12159265358979 Private X(Num) As Double '入力データ Private Y(Num) As Double '変換結果 Private Z(Num) As Double '逆変換結果 Private Sub パルス() For K = 0 To Num - 1 X(K) = -1 If K >= 3 And K <= 5 Then X(K) = 1 Next X(Num) = X(0) End Sub

VBAでの記述 ②結果設定とボタンのClickイベントハンドラ Private Sub 結果設定() With Worksheets("Sheet2") .Cells(1, 1) = "No.": .Cells(1, 2) = "X" .Cells(1, 3) = "Y": .Cells(1, 4) = "Z" For K = 0 To Num .Cells(K + 2, 1) = K: .Cells(K + 2, 2) = X(K) .Cells(K + 2, 3) = Y(K): .Cells(K + 2, 4) = Z(K) Next End With End Sub Sub Sheet2_ボタン1_Click() パルス FDCT IDCT 結果設定

VBAでの記述 ③Chenのアルゴリズム(その1) Private Sub FDCT() 'FDCT(Chenのアルゴリズム) '(既に入力XがYに複写されているものとする) Cos4 = Cos(PI / 4): Cos8 = Cos(PI / 8) Cos16 = Cos(PI / 16): Cos163 = Cos(3 * PI / 16) Sin8 = Sin(PI / 8): Sin16 = Sin(PI / 16) Sin163 = Sin(3 * PI / 16) For J = 0 To Num Y(J) = X(J) Next For J = 0 To 3 tmp = Y(J) + Y(7 - J): Y(7 - J) = Y(J) - Y(7 - J): Y(J) = tmp tmp = Y(0) + Y(3): Y(3) = Y(0) - Y(3): Y(0) = tmp tmp = Y(1) + Y(2): Y(2) = Y(1) - Y(2): Y(1) = tmp tmp = Cos4 * (-Y(5) + Y(6)) Y(6) = Cos4 * (Y(5) + Y(6)) Y(5) = tmp

VBAでの記述 ④Chenのアルゴリズム(その2) tmp = Cos4 * (Y(0) + Y(1)) Y(1) = Cos4 * (Y(0) - Y(1)) Y(0) = tmp tmp = Sin8 * Y(2) + Cos8 * Y(3) Y(3) = -Cos8 * Y(2) + Sin8 * Y(3) Y(2) = tmp tmp = Y(4) + Y(5): Y(5) = Y(4) - Y(5): Y(4) = tmp tmp = -Y(6) + Y(7) Y(7) = Y(6) + Y(7) Y(6) = tmp tmp = Sin16 * Y(4) + Cos16 * Y(7) Y(7) = -Cos16 * Y(4) + Sin16 * Y(7) Y(4) = tmp

VBAでの記述 ⑤Chenのアルゴリズム(その3) tmp = Cos163 * Y(5) + Sin163 * Y(6) Y(6) = -Sin163 * Y(5) + Cos163 * Y(6) Y(5) = tmp tmp = Y(1): Y(1) = Y(4): Y(4) = tmp tmp = Y(3): Y(3) = Y(6): Y(6) = tmp For J = 0 To Num - 1 Y(J) = 0.5 * Y(J) Next Y(Num) = Y(0) End Sub

VBAでの記述 ⑥確認用逆変換 Private Sub IDCT() 'IDT(離散的逆変換) Dim C0 As Double: Dim C As Double C0 = 1# / Sqr(2#): C = Sqr(2# / Num) For J = 0 To Num - 1 Z(J) = C0 * Y(0) For K = 1 To Num - 1 Z(J) = Z(J) + Y(K) * Cos((2 * J + 1) * K * PI / (2 * Num)) Next Z(J) = C * Z(J) Z(Num) = Z(0) End Sub

FDCTの結果

色々なFDCTの結果(1)

色々なFDCTの結果(2)