写真を整理してたら出てきたので貼ることにした。
matlabにはspectrogramという関数があり,これを使うとスペクトログラムが描ける.
今回はmesh関数で同じように描けるか試してみる.
2022/03/29 追記:重大なバグを発見した.
[~, freq, time, ps] = spectrogram(z,Nw,Nol,NFFT,Fs,'yaxis');
とあるが,psは確率密度関数なのでspectrogramの結果を使用していない.
[s, freq, time, ~] = spectrogram(z,Nw,Nol,NFFT,Fs,'yaxis');
としてpsのかわりにsの値を使用すると良いかと思われる.
文中で「色合いが若干違うのはなんだろ・・・計算等や使っている変数が違うかもしれないので,要調査.」と書いているが,この辺のバグのせいかと思われる.
後ほど修正予定.
申し訳ないが取り急ぎ報告のみ.
% 分析する信号zを生成する Fs = 44100; % サンプリング周波数(Hz) T = 10; % 信号の時間長さ(秒) N = Fs * T; % 信号のサンプル数 n = randn(1, N); % N点の白色ノイズ % 線形チャープ信号の生成 f1 = 5000; % 開始周波数(Hz) f2 = 15000; % 終了周波数(Hz) t = ((1:N) - 1) / Fs; % 周期1/Fs, サンプル数Nの時間配列 s = chirp(t,f1,T,f2); % チャープ信号の生成 % ノイズとチャープ信号を足し合わせる SNRdB_original = snr(s,n); % 元のSN比を求める SNRdB = -10; % 設定するSN比 coef = 10^((SNRdB_original - SNRdB)/20); % SN比を調節するための係数 n = coef * n; % ノイズパワーを調整 z = s + n; % チャープ信号とノイズを重畳する
分析する信号はチャープ信号に白色ノイズを重畳したものにした.
% STFTする Nw = 512; % 時間窓の長さ Nol = round(Nw/2); % オーバーラップ NFFT = Nw; % FFT点数 spectrogram(z,Nw,Nol,NFFT,Fs,'yaxis'); % スペクトログラムを描画 caxis([-60 0]); % レベルの範囲を指定 colormap jet; % カラーマップを設定
fig.spectrogramで描画したグラフ
これをmeshで再現してみる.
% meshを使って描画する [~, freq, time, ps] = spectrogram(z,Nw,Nol,NFFT,Fs,'yaxis'); psdB = 10*log10(ps); % dBに変換 figure; % figureウィンドウの作成 mesh(time, freq, psdB); % パワースペクトルを描画 caxis([-60 0]); % レベルの範囲を指定 colormap jet; % カラーマップを設定
fig.meshをそのまま使ったグラフ
視点や軸ラベルが設定されていないので,これを設定する.
% meshを使って描画する(修正後) [~, freq, time, ps] = spectrogram(z,Nw,Nol,NFFT,Fs,'yaxis'); psdB = 10*log10(ps); % dBに変換 figure; % figureウィンドウの作成 freq = freq / 1000; % HzをkHzに変換 mesh(time, freq, psdB); % パワースペクトルを描画 caxis([-60 0]); % レベルの範囲を指定 colormap jet; % カラーマップを設定 view(0,90); % 見る角度を指定 xlabel('時間(secs)'); % X軸ラベル ylim([0,Fs/2/1000]); % Y軸範囲を指定(ナイキスト周波数(kHz)まで) ylabel('周波数(kHz)'); % Y軸ラベル h = colorbar; % カラーバーを表示 ylabel(h, 'パワー/周波数(dB/Hz)');% カラーバーのラベル
fig.meshで描画したグラフ(いろいろ設定後)
yuri-processing-club.hatenablog.com
こちらの記事でSN比を指定してノイズの大きさを調整する計算を紹介した。
matlabにて計算が正しいかを確認する。
% sin信号及び白色ノイズを生成 % 自前の計算及び標準の関数を用いてSN比を計算し、表示する % 指定したSN比になるようノイズのパワーを調整する Fs = 44100; % サンプリング周波数(Hz) T = 10; % 信号の時間長さ(秒) N = Fs * T; % 信号のサンプル数 n = randn(1, N); % N点の白色ノイズ % sin信号の生成 f = 100; % sin波の周波数(Hz) t = ((1:N) - 1) / Fs; % 周期1/Fs, サンプル数Nの時間配列 s = sin(2 * pi * f * t); % N点, 周波数fのsin波 % パワーの計算 Pn = n * n'; % ノイズのパワー(2乗の和) Ps = s * s'; % チャープ信号のパワー(2乗の和) % SN比の計算 SNR = 10 * log10(Ps/Pn); SNR1 = snr(s, n); % matlab標準の関数 fprintf('調整前:SNR = %fdB, SNR1 = %fdB\n', SNR, SNR1); % 指定したSN比となるようにノイズの大きさを調整する SNR2 = -30; % 指定するSN比(dB) coef = 10^((SNR - SNR2)/20);% ノイズの大きさを調整する係数 n = coef * n; % ノイズの大きさを調整 % 再度SN比の計算 Pn = n * n'; % ノイズのパワーを再度求める SNR = 10 * log10(Ps/Pn); SNR1 = snr(s, n); fprintf('調整後:SNR = %fdB, SNR1 = %fdB\n', SNR, SNR1);
シミュレーション等で信号にノイズを重畳する際、SN比を指定したいことがあると思われる。
検索しても出てこなかったので、自分で記事を書いてみようと思う。
合ってるかは知りません。
[2018/11/11追記ここから]
合っているかは知らないと書いたが、おそらく合っていない(途中計算が)。
yuri-processing-club.hatenablog.com
ここに書いた通りであるが、離散信号の積分計算をする場合、を掛ける必要がある。
ただしを計算する際に分母分子にあるが約分されて消えるので、があってもなくても結果は変わらないはず。
そして今回はとして正規化していることにして、以降の説明は特に修正しないものとする。
[2018/11/11追記ここまで]
SN比が任意の値になるように雑音を倍する。
この係数を求めるものとする。
まず、元のSN比を求めてみる。
サンプル数個の信号及びノイズとして、
2乗して、
各要素を足し合わせるとパワー及びが求まる。
SN比は以下の通り。
次にノイズを倍したものをとして、とのSN比が指定した値となるような係数を求める。
パワーは
SN比は以下の通り。
ここからを求めていく。
ということで、に任意の値を入れることで、係数が求められる。
がっこうぐらし!考察。
(気づきの掲示がメインで、考察についてはガバガバです。)
地下を彷徨っていためぐねえはみーくんによって解放されるわけですが、
その後物資を求めて皆で行った時にはめぐねえの死体が消えています。
学園生活部の部室から物資があるエリアに至るまでの動線の外、
例えば地下の奥などで処理したなら、物資を取りに来た生活部メンバーが死体を見ずに済みます。
しかし、みーくんはご丁寧に地下に行く際に絶対通る場所であるシャッター前で処理しています。
だのにシャッター付近にはめぐねえの死体どころか血溜まりすらありません。
物資を取りに行った際にシャッターで見た光景は由紀の視点であり、
由紀からは何も見えていなかった。
・・・さすがの由紀といえどもめぐねえの格好をした死体が転がってたら何らかの反応をするのでは?
みーくんがシャッター前でめぐねえを倒していないので死体も無いという理屈。
みーくんの目的は薬の入手であり、めぐねえの討伐ではありません。
めぐねえから逃げながら、もしくはそもそも遭遇せずに薬を入手してもいいわけです。
りーさん「そう やっぱり・・・ めぐねえだったんだ」
みーくん「・・・・・・ はい・・・・・・」
と会話してるので、地下にめぐねえがいたことは伝えています。
ただし倒したとは伝えていません。
めぐねえが倒されたシーンは読者しか見ていないので、 このシーンが嘘であったとしても、 みーくんはりーさん達には嘘をついていないことになります。
ただしその場合、物資を取りに行った際にゾンビめぐねえに襲われる心配はしなくていいのかということになります。
これならばめぐねえの死体がシャッター前に転がっていない件も、
みーくんがめぐねえを倒していないとしたらゾンビめぐねえに襲われる心配をせねばいけない件にも説明がつきます。
嘘をつかれたのは読者だけですので。
地下は平和そのもので、誰もいなかった。
まずくるみちゃんが遭遇しためぐねえは髪がロングです。
由紀が見ている幻覚めぐねえもそうですが、ロングめぐねえ=幻覚の可能性があります。
この通り、地下に行った時点でショートですからね。
くるみちゃんは地下へ行く前、めぐねえが書類を隠し持っていたことを知ってかなり動揺していました。
よって、めぐねえの幻覚を見たとしても不思議ではありません。
くるみちゃんの傷跡は噛まれた痕っぽいですが、めぐねえは爪で切り裂いてます。
実際の傷と、くるみちゃんが襲われた光景に不整合があるわけです。
爪で服を切り裂いた後でガブっといったのかもしれませんが、噛まれた描写はされていません。
というわけで幻覚の可能性があります。
(じゃあくるみちゃんは一体誰に襲われたんだ?となりますが。きっとその辺のモブゾンビに襲われたのでしょう。)
次にみーくんですが、遭遇したのはショートめぐねえであり、幻覚ではないと思われます。
みーくんがショートめぐねえと遭遇したのが真実だった場合、
考察3で書いた通り、シャッター前でない場所でめぐねえを倒したか、
もしくは「めぐねえと会った」と故意に嘘をついたと考えるのが妥当ではないでしょうか。
同じ時空の場合、みーくんがりーさんに嘘をつくなどしないと成立しないように思われます。
やはり別の時空の話が混じっていると考えるべき?