yProcessingClub

すみません、許してください

【信号処理基礎】実信号の解析信号への変換方法

自分用メモ.計算が合ってるかは自信が無い.
何かあればコメントいただけるとありがたいです.

時間周波数解析手法の一種であるウィグナー分布において,正負の周波数成分を持つ信号や二つ以上の成分から成る信号を分析してみると,その中間部分にスペクトルが発生し,これをクロス項という.本来信号が無いはずの部分にスペクトルが出ているのはよろしくない(そのためクロス項を抑制するような研究が多くなされている).クロス項抑制のためには実信号を負の周波数を含まないような複素信号に変換してからウィグナー分布の計算を行う.負の周波数を含まない複素信号を解析信号という.今回は実信号から解析信号に変換する計算方法を詳しく書く.

解析信号をz(t),実信号をg(t)g(t)フーリエ変換G(\omega)とする.


\begin{eqnarray*}
z(t) &=& \frac{1}{2\pi} \int_{-\infty}^{\infty} G(\omega) \mathrm{e}^{j \omega t} d\omega\\
 &=& 2 \frac{1}{2\pi} \int_{0}^{\infty} G(\omega) \mathrm{e}^{j \omega t} d\omega\\
 &=& \frac{1}{\pi} \int_{0}^{\infty} 
\int_{-\infty}^{\infty} g(k) \mathrm{e}^{-j \omega k} dk
 \mathrm{e}^{j \omega t} d\omega\\
 &=& \frac{1}{\pi} \int_{0}^{\infty} 
\int_{-\infty}^{\infty} g(k) \mathrm{e}^{j \omega (t-k)} dkd\omega\\
&=& \frac{1}{\pi} \int_{-\infty}^{\infty} g(k) \left( \pi \delta(t-k) + \frac{j}{t-k} \right) dk\\
&=& \int_{-\infty}^{\infty} g(k) \delta(t-k)  dk + \frac{j}{\pi} \int_{-\infty}^{\infty}  \frac{g(k)}{t-k}  dk \\
&=& g(t) + \frac{j}{\pi} \int_{-\infty}^{\infty} \frac{g(k)}{t-k} dk \\
&=& g(t)+j\mathcal{H}(g(t))
\end{eqnarray*}



更に詳しい説明.

これは普通の逆フーリエ変換である.
z(t) = \frac{1}{2\pi} \int_{-\infty}^{\infty} G(\omega) \mathrm{e}^{j \omega t} d\omega

次に負の周波数を消し去る.ここの計算が本質部分である.
\frac{1}{2\pi} \int_{-\infty}^{\infty} G(\omega) \mathrm{e}^{j \omega t} d\omega =
2 \frac{1}{2\pi} \int_{0}^{\infty} G(\omega) \mathrm{e}^{j \omega t} d\omega=
 \frac{1}{\pi} \int_{0}^{\infty} G(\omega) \mathrm{e}^{j \omega t} d\omega

次にG(\omega)=\int_{-\infty}^{\infty} g(k) \mathrm{e}^{-j \omega k} dkとして入れる.
 
 \frac{1}{\pi} \int_{0}^{\infty} G(\omega) \mathrm{e}^{j \omega t} d\omega
=
\frac{1}{\pi} \int_{0}^{\infty} 
\int_{-\infty}^{\infty} g(k) \mathrm{e}^{-j \omega k} dk
 \mathrm{e}^{j \omega t} d\omega

 \mathrm{e}^{-j \omega k}\mathrm{e}^{j \omega t}をくっつけて,積分順序を入れ替える.

\frac{1}{\pi} \int_{0}^{\infty} 
\int_{-\infty}^{\infty} g(k) \mathrm{e}^{j \omega (t-k)} dkd\omega
=
\frac{1}{\pi} \int_{-\infty}^{\infty} 
g(k) \int_{0}^{\infty}  \mathrm{e}^{j  \omega(t-k)} d\omega dk

内側の\int_{0}^{\infty}  \mathrm{e}^{j  \omega(t-k)} d\omegaを計算するが,ここで

\begin{equation}
\int_{0}^{\infty} \mathrm{e}^{j \omega x} d\omega= \pi \delta(x) + \frac{j}{x}
\end{equation}
を用いる.(この計算はここでは詳しく計算しない.結果だけ用いる.)
\int_{0}^{\infty}  \mathrm{e}^{j  \omega(t-k) } d\omega= \pi \delta(t-k) + \frac{j}{t-k}

内側の積分結果を元の式に代入して,第一項と第二項を分離する.

\frac{1}{\pi} \int_{-\infty}^{\infty} g(k) \left( \pi \delta(t-k) + \frac{j}{t-k} \right) dk=
\int_{-\infty}^{\infty} g(k) \left(\delta(t-k) \right) dk + \frac{j}{\pi} \int_{-\infty}^{\infty} \frac{g(k)}{t-k}  dk

第一項の\int_{-\infty}^{\infty} g(k) \delta(t-k)  dkkについての積分だが,k=tの時のみ\delta=1なので,
\int_{-\infty}^{\infty} g(k) \delta(t-k)  dk=g(t)

第二項の\frac{j}{\pi} \int_{-\infty}^{\infty}  \frac{g(k)}{t-k}  dkだが,\frac{1}{\pi} \int_{-\infty}^{\infty} \frac{g(k)}{t-k}  dkの部分はヒルベルト変換なので,
\frac{j}{\pi} \int_{-\infty}^{\infty} \frac{g(k)}{t-k} dk = j\mathcal{H}(g(t))と書く.

以上をまとめて,
z(t) =g(t)+j\mathcal{H}(g(t))

となる.




参考

matlab 信号の両端を滑らかに0にする場合はコサインテーパーを使う

 実験用に正弦信号を作成することがある.例として1~1.5秒部分に5kHzの正弦波,1.5~3秒部分に10kHzの正弦波が含まれる信号の時間-振幅グラフを図1に,スペクトログラムを図2に示す(スペクトログラムを表示する部分までのmatlabコードを下に示す).スペクトログラムを見ると信号の開始時点及び終了時点において,周波数の広い範囲に大きい値が出ている(図3).これは信号が突然0→1に立ち上がる(終了時点では1→0になる)ことから,その時点においてあらゆる周波数が反応するのは当然である.しかしA[Hz]の正弦信号を入力したらA[Hz]のところにだけ値が出て来て欲しいわけで,そういうときは普通ならばスペクトログラムのウィンドウ幅を長くするなど分析側のパラメータを調整する必要がある.今回は理想的な信号が入ってくる場合の分析器の挙動を見たいので,分析側のパラメータを変えずに,実験用の信号を理想的なものに調整して綺麗な結果を出してみる.

f:id:Yuri-Processing-Club:20181003162409p:plain:w400
図 1: 信号の時間-振幅グラフ

f:id:Yuri-Processing-Club:20181003161738p:plain:w400
図 2: 信号のスペクトログラム

f:id:Yuri-Processing-Club:20181003163917p:plain:w400
図 3: 信号のスペクトログラム(説明付)



% 
% 信号を生成してスペクトログラムを表示する
% 
clear all;
close all;
clc

Fs = 32000;
SNRdB = -10;

% 信号を生成する
t1 = 1.5;
f1 = 5000;
N = Fs * t1;
t = ((1:N)-1)/Fs;
s1 = sin(2*pi*f1*t);
t2 = 1.5;
f2 = 10000;
N = Fs * t2;
t = ((1:N)-1)/Fs;
s2 = sin(2*pi*f2*t);
s0 = horzcat(s1, s2);
% 信号の前後にpad_time秒間の無音部分をくっつける
pad_time = 1;
s = padarray(s0, [0 round(pad_time * Fs)], 0, 'both');

% 時間グラフを描く
N = length(s);
t = ((1:N)-1)/Fs;
figure
plot(t, s);
title('信号の時間-振幅グラフ');
xlabel('時間(sec)');
ylabel('振幅');

% 信号のスペクトログラムを描画
Nw = 1024;
Nol = Nw*3/4;
NFFT = Nw;
figure;
spectrogram(s, Nw, Nol, NFFT, Fs, 'yaxis'); %ハミング窓
title('信号のスペクトログラム');
xlabel('時間(sec)');
colormap 'jet'
caxis_max = -20;
caxis_min = -120;
caxis([caxis_min, caxis_max]);



つまりこういうことをしたいわけである.

f:id:Yuri-Processing-Club:20181003165529p:plain:w500
図 4: 立ち上がり立ち下りが滑らかな信号の時間-振幅グラフ

信号の最初と終わりの部分だけ窓関数を掛けたような形である.ネタバレするとコサインテーパーウィンドウを掛けてやればいいわけだが,最初はハンウィンドウを前半後半に分けて信号の最初と終わりにそれぞれ掛けるというやり方を取っていた.

f:id:Yuri-Processing-Club:20181003171032p:plain:w400
図 5: ハンウィンドウ

f:id:Yuri-Processing-Club:20181003171715p:plain
図 6: ハンウィンドウを分割して信号の前後とかけあわせるやつの説明

%
% 上のコードの「信号を生成する」 の部分を下に入れ替える
%
% 信号の両端に少しだけ窓関数をかける
single_sided_window_length_sec = 0.2;% 片側窓関数がかけられる時間
single_sided_window_length = single_sided_window_length_sec * Fs;% 窓関数の片側の長さ
w = hann(single_sided_window_length * 2);% ハン窓を作成
figure
N = length(w);
t = ((1:N)-1)/Fs;
plot(t, w);
title('ハンウィンドウ');
xlabel('時間(sec)');

% 信号を生成する
t1 = 1.5;
f1 = 5000;
N = Fs * t1;
t = ((1:N)-1)/Fs;
s1 = sin(2*pi*f1*t);
% 窓関数をかける
s1(1:single_sided_window_length) = w(1:single_sided_window_length)' .* s1(1:single_sided_window_length);% 左側
s1(end-single_sided_window_length+1:end) = w(single_sided_window_length+1:end)' .* s1(end-single_sided_window_length+1:end);% 右側

t2 = 1.5;
f2 = 10000;
N = Fs * t2;
t = ((1:N)-1)/Fs;
s2 = sin(2*pi*f2*t);
% 窓関数をかける
s2(1:single_sided_window_length) = w(1:single_sided_window_length)' .* s2(1:single_sided_window_length);% 左側
s2(end-single_sided_window_length+1:end) = w(single_sided_window_length+1:end)' .* s2(end-single_sided_window_length+1:end);% 右側

s0 = horzcat(s1, s2);

% 信号の前後にpad_time秒間の無音部分をくっつける
pad_time = 1;
s = padarray(s0, [0 round(pad_time * Fs)], 0, 'both');

ハンウィンドウを分割して信号の前後にかけたものの時間-振幅グラフを図7,スペクトログラムを図8にそれぞれ示す.0→1に滑らかに変化しているので,スペクトログラムで欲しいところだけに信号が表示されている.

f:id:Yuri-Processing-Club:20181003174159p:plain:w400
図 7: 立ち上がり立ち下りを滑らかにした信号の時間-振幅グラフ

f:id:Yuri-Processing-Club:20181003174145p:plain:w400
図 8: 立ち上がり立ち下りを滑らかにした信号のスペクトログラム



こんなめんどくさいこと,やる?と思い上司に上手いやり方は無いか相談したところ,そういう場合は普通はコサインテーパーを使うとのこと.jp.mathworks.com
コサインテーパーウィンドウは開始部分及び終了部分がコサインの形をしていて,真ん中あたりは値が1のウィンドウである.信号と同じ長さのコサインテーパーウィンドウを用意して,信号にかけてやればOKである.
f:id:Yuri-Processing-Club:20181003180521p:plain:w400
図 9: 立ち上がり立ち下りを滑らかにした信号の時間-振幅グラフ(コサインテーパー使用)

%
% 上のコードの「信号を生成する」 の部分を下に入れ替える
%
single_sided_window_length_sec = 0.2;% 片側窓関数がかけられる時間

% 信号を生成する
t1 = 1.5;
f1 = 5000;
N = Fs * t1;
t = ((1:N)-1)/Fs;
s1 = sin(2*pi*f1*t);
% 窓関数をかける
window_signal_length_ratio = (single_sided_window_length_sec*2)/t1;% 窓関数がかけられる時間の比
w = tukeywin(N, window_signal_length_ratio);
figure
plot(t, w);
title('コサインテーパーウィンドウ');
xlabel('時間(sec)');
s1 = w' .* s1;

t2 = 1.5;
f2 = 10000;
N = Fs * t2;
t = ((1:N)-1)/Fs;
s2 = sin(2*pi*f2*t);
% 窓関数をかける
window_signal_length_ratio = (single_sided_window_length_sec*2)/t2;% 窓関数がかけられる時間の比
w = tukeywin(N, window_signal_length_ratio);
% 5kHzのコサインテーパーウィンドウと同じなのでグラフは省略
s2 = w' .* s2;

s0 = horzcat(s1, s2);

% 信号の前後にpad_time秒間の無音部分をくっつける
pad_time = 1;
s = padarray(s0, [0 round(pad_time * Fs)], 0, 'both');

f:id:Yuri-Processing-Club:20181003180010p:plain:w400
図 10: コサインテーパーウィンドウ

f:id:Yuri-Processing-Club:20181003175920p:plain:w400
図 11: 立ち上がり立ち下りを滑らかにした信号の時間-振幅グラフ(コサインテーパー使用)

f:id:Yuri-Processing-Club:20181003180853p:plain:w400
図 12: 立ち上がり立ち下りを滑らかにした信号のスペクトログラム(コサインテーパー使用)



明かりを消して寝よう:スタンフォード式 最高の睡眠


スタンフォード式 最高の睡眠

より良い睡眠を取るための本。 このような本は書店で目立つ位置に置かれており、過労民族の日本人もどうやら睡眠や休息について意識し始めたっぽい。


私の睡眠スタイルはカスである。
・敷き布団が無い。タイルカーペットの上に寝ている。
・部屋の照明をつけたまま寝ている。(視覚への刺激がある)
・アニメや音楽を流したまま寝ている。(聴覚への刺激がある)
・寝る時間が不規則である。
というか寝落ちするギリギリまでアニメを見ていたりツイッターをやったりしていて、眠気が限界まで来たらその場でそのまま寝るというスタイルである。 起きている状態と寝ている状態がかなり曖昧なのである。


大学時代からこういう感じだったので別にいいやと思っていたが、
最近
・日中常に眠い
・足の痛みが取れない
メンタルをやらかした(病院に行った)
等の不調に悩まされるようになった。

これではまずいと思い、睡眠について真面目に考えるようになり、本を読んでみたわけである。


本で紹介されているTipsの中で簡単に実践できそうなものを探したところ、どうやら明かりを消して寝るというのが良いらしい。 寝ている人にライトを照らすと無意識に布団を頭まで被るなど光を遠ざける行動を取る。 睡眠時に体は明かりを拒んでいるというわけである。

さっそくアニメを垂れ流すのをやめて部屋を暗くして寝てみたところ、びっくりするほど目覚めが良くなった。 日中ほぼ眠気が訪れず、昼寝も必要無くなった。 (えっ、こんな簡単に日中のパフォーマンス向上するの?)と驚く限りである。 と同時に(なんでこんな簡単なことを今まで実践していなかったの?)と後悔した。


睡眠はどうやら大事っぽい。 私レベルに睡眠を軽く考えていた人(布団すら無い人)はそうそういらっしゃらないと思うが、 日ごろ眠い、ダルい、疲れが取れないと感じている人は睡眠の質を高めると解決するかもしれない。

以上





それにしても「明かりを消して部屋を暗くして寝るとよく眠れますよ」って異世界世界の主人公のセリフみたいだし、「マジか、知らんかったブログ書くわ」っていう私の反応も異世界の住人のそれだと思う。(もちろん本ではこのような基礎的なTipsだけでなく、もっと目からうろこな話も載っている)


マンガでぐっすり! スタンフォード式 最高の睡眠

メモ:SBI証券 口座開設 マイナンバーは住民票で代用可

メモ.

投資ではSBI証券を利用しており,引越に伴ってSBI証券上で住所変更手続きを行った.
住所変更をする場合は
マイナンバー確認書類
・個人情報確認書類
を再提出する必要がある.

口座開設の際はマイナンバー確認書類として通知カードを使用した.
しかし,通知カードが見当たらない.
マイナンバー入り住民票で代用できるとは思うが,
WEB上のマイナンバー確認書類の選択画面では
マイナンバーカードか通知カードの2通りしか選べない(マイナンバー入り住民票を選べない)

SBI証券に電話で確認したところ,
マイナンバー確認書類で通知カードを選択し,通知カードをアップロードする場所にマイナンバー入り住民票の画像をアップロードし,
個人情報確認書類にも同じ画像(マイナンバー入り住民票)をアップロードすればOKとのことだった.

 

おそらくどの証券口座でも同様だろう.(多分)

要はマイナンバーが確認出来れば何でも良いのである.

 

さっそくマイナンバー入り住民票をアップロードした.
手続きが成功したかについては結果が分かり次第追記する.

メモ:ダウンサンプリングの時のやつ

メモ書き.

音声ファイルなどをダウンサンプリングする際, エイリアシング防止のためローパスフィルタにかけるわけだが, これをデシメーションフィルタとも言うっぽい.

とりあえず単語だけ覚えておく.

ガルパンBDBOXを予約

ガルパンのBDBOXを予約。
amazonで2万円とアホみたいに安く売られていた。

単品BDは持っているのだが、今回のBDBOX化で
音声が5.1chにパワーアップ(単品BDでは2.1ch)
・キャスト、ミリタリースタッフのコメンタリ新録
・不肖・秋山優花里の戦車講座新録
と、単品BD持ちにも嬉しい仕様。

特に単品コンポでホームシアター組んでいる身としては音声5.1ch化が最高。
センター音声があるとなしではセリフの聞き取りやすさが段違いである。
後ろから音が聞こえるってのも良いけど、それよりセンターの良さを知って欲しい。
ということで、ホームシアター組んでいない人はサウンドバーを導入してみて欲しい。

話が脱線したので元に戻すが、
BDBOXはコメンタリが新録となり、単品BDにもともと入っていたコメンタリと置き換わるので、単品BDの完全上位互換にはなり得ない模様。

あと、単品BDに入っていた「不肖・秋山優花里の戦車講座」がBDBOXにも入るかは不明。

この点差し引いても買いだろう。

bvc.bandaivisual.co.jp

> ◆設定資料集
> 第63回戦車道全国高校生大会選手名鑑[復刻版]
> …各キャラクタ-のプロフィール、名シーン、美術設定等を収録
>
> 第63回戦車道全国高校生大会メカニック名鑑[復刻版]
> …大洗女子学園をはじめとする登場戦車のスペック、名シーンはもちろん戦車以外の車輛など細部にわたって収録
>
> ※2014.10.17発売「ガールズ&パンツァー 完全設定資料集」を一部修正し、復刻したものになります。

バンダイビジュアルのサイトでは設定資料集の復刻版が2冊ついてくるっぽい。
また、

> ●賞品
> ■AV賞
> 「ガールズ&パンツァー 最終章」コラボ・ヘッドフォン「SE-MHR5」 …5名様
> ■キャスト賞
> 渕上舞さん、茅野愛衣さん、尾崎真実さん、中上育実さん、井口裕香さんサイン入りB2告知ポスター …5名様
> ■スタッフ賞
> 水島努監督・杉本功サイン入りガルパン本A …3名様 / 水島努監督・杉本功サイン入りガルパン本B …3名様
> ■BNARTS賞
> B2告知ポスター …20名様

抽選で豪華景品が当たるキャンペーンも。

ただしamazonでの販売価格と比べると1.5倍も高いので、
私は迷うことなくamazonにした・・・。




Girls Und Panzer: TV Collection [Blu-ray] [Import]

ちなみにこっちは海外版BD。PS3とかPS4で再生できる。
音声は日本語/英語で切り替え可能。
字幕はおそらく音声を日本語にしている場合は英語字幕が強制的に入ると思う。
レビューを見ると、プラウダ戦の「カチューシャ」の歌が挿入されていない模様。
本編が放送版か国内BDに収録されてる作画修正版かは不明。
私は海外版BDを買って未開封で積んでいるので検証しようと思えば出来るが、たぶん先駆者がいると思うのでやらない。
この辺をもし検証して欲しい方がいたらコメント欄にて「検証して」など適当にコメントしてくれれば行う。

たいらんくんVTuber化計画 進捗報告3

yuri-processing-club.hatenablog.com

yuri-processing-club.hatenablog.com

 

3回目の進捗報告をさせていただく。

さっそくだが、動画を投稿した。

 

www.youtube.com

非常に稚拙な動画ではあるが、

VTuberとして動画を投稿できたので、とても達成感がある。

 

 

さて、前回の進捗報告の続きを報告させていただく。

 

 

 メタセコイア

PmxEditor_0222

blender

unity

という流れでモデルの変換作業を行い、なんとかunityにモデルデータを持ってこられた。

白目が濁っているなど、大至急対処すべき問題はあるが・・・

 

unityちゃんのアニメーションデータを使って歩かせたりポーズをとらせてみたところ、意外と普通に動いてくれた。

 

目や口の動きは未実装なので後日実装していく・・・

 

上の動画はテスト用のためキャラクターの大きさなどは考えていなかったが、

隣のunityちゃんと比較すると大きかった。

 

 そのため小さくしたわけだが、フォロワーさんから「小さくするな、戻せ」と言われてしまい、無事に巨女属性が付与されることとなった。

 

 

f:id:Yuri-Processing-Club:20180603112654p:plain

もはや逆切れ気味に大きくした図。

 

 

 スカートに物理演算を実装。

挙動が荒ぶったり足がスカートを貫通したりする問題はあるが、

まぁおおむね大丈夫だろう。

 

 

 

f:id:Yuri-Processing-Club:20180603115413p:plain

街を作成。

Simple Townというアセットを課金(5ドルくらい)して手に入れた。

そこからビルと道路を適当に置いて街っぽいものを作った。

 

f:id:Yuri-Processing-Club:20180603115657p:plain

たいらんくん(巨大)を人間目線で見られるように、操作キャラクターを別個に設けた。

f:id:Yuri-Processing-Club:20180603115903p:plain

ゲームを実行中、FPS視点で見たたいらんくんである。

巨大っぷりがよく分かる。

 

今後のunityゲーム作りの予定としては、

・たいらんくんを敵モンスターとして登場させ、街を破壊してもらう

こんなところか。

ネタについてはいくつか考えがあるが、ネタバレになるのでここでの報告は控えさせてもらう。

 

さて、unityゲーム作り進捗についてはカスであるが、

とりあえずyoutubeにて自己紹介動画を上げたいということで、

進捗0のスカスカゲームを撮影することにした。

 

f:id:Yuri-Processing-Club:20180603120720p:plain

Vegas Proというソニーの動画編集ソフトにて動画作成。

これは数万円もする個人で買うにはなかなかしんどい価格のソフトウェアなのだが、

なんかのセールで5千円で売っていたことがあり、

当時は動画編集なんてやるつもりはなかったが、安いから買ってみたのである。

今までインストールすらしていなかったのだが、

まさか自分がVTuberになり、そのために動画編集ソフトを使う日が来ようとは・・・

ここから何らかの教訓が得られるような気がしたが、気のせいであった。

 

f:id:Yuri-Processing-Club:20180603121637p:plain

動画の構成だが、表情モーションが無い、VRゴーグルが無いなどの無い無い尽くしのため、苦肉の策で顔+台詞窓を用意した。

本当はモーショントラッキングでわちゃわちゃ動かしたいのだがしょうがない。

 

 

f:id:Yuri-Processing-Club:20180603121250p:plain

音声については地声を収録した。

スーパーコミュ障で話すのがつらいので非常に厳しい作業であった。

音量がものすごい小さくなってしまい、

動画のコメントでも指摘されてしまった。

次回はもう少しがんばって大きい声でしゃべる・・・

 

BGMは「DOVA-SYNDROME」のフリーBGMを使用させていただいた。

dova-s.jp

 

f:id:Yuri-Processing-Club:20180603122043p:plain

サムネを作成。(Gimpにて)

こう見るとサムネ詐欺っぽさが無いでもない。

 

www.youtube.com

動画を投稿。

 

 

 

およそ一ヶ月でゼロから動画投稿までを終えることが出来た。

次回の動画作成に向け、主にunityのゲーム作りをがんばっていこうと思う。

 

 

そしてこれは干し芋リスト。

支援いただけるとほんとうに助かります。

http://amzn.asia/02wDgH2