複素数の絶対値の2乗のやりかたを教えてください。お願いします。
DCTの絶対値の2乗とか・・
z = x + i y (x, y は実数, i は虚数単位)
とすると,
|z|^2 = x^2 + y^2
です。
要するに実部の2乗と虚部の2乗を足せばいいだけです。
数学?
#include <iostream>
#include <complex>
int main() {
std::complex<double> c(3.0, 4.0); // 複素数 c = 3 + 4i
double result = std::norm(c); // コレがあなたの欲しいもの
std::cout << squared magnitude of << c
<< = << result << std::endl;
return 0;
}
> DCTの絶対値の2乗とか・・
DCTってなんですか? 離散コサイン変換? それの絶対値ってナニ?
>要するに実部の2乗と虚部の2乗を足せばいいだけです。
実部の2乗から虚部の2乗を引く です。
いちよう‥
> 実部の2乗から虚部の2乗を引く です。
なんでやねん? それは'共役複素数との積'ちゃうのん?
> それは'共役複素数との積'ちゃうのん?
ごめんマチガイ。
共役複素数の積だと (x + yi)(x - yi) = x^2 - (-y^2) = x^2 + y^2
これが norm ですな。 こいつの平方根が絶対値のハズ。
なんにせよ 実部の2乗から虚部の2乗を引く が絶対値とは思えないが。
>実部の2乗から虚部の2乗を引く
でないと、
z = i
のとき
|z|^2 = -1
にならないと思う
# それともなんかおおボケかましているのか? > 私
ごめんなさい。「絶対値」なんですよね。
だから
「実部の2乗と虚部の2乗を足す」
が正しいです。
ボケてたのは私でした。お騒がせしました。
# norm()と同じにならない地点で気づけよ > 私
> > DCTの絶対値の2乗とか・・
> DCTってなんですか? 離散コサイン変換? それの絶対値ってナニ?
まあ,なんか信号があって,
それに DCT をかけた結果の絶対値の2乗が欲しいってことでしょうね。
結果はたぶん配列に入ってるでしょうから,ループで回って絶対値の2乗を求めていけばいいで
すね。
せやけど,
実数のデータに DCT をかけたら結果も実数ですよ。(ってもっと早く気づけよ > 私)
DFT だと(特別な場合を除いて)結果が複素数になりますが。
複素数のデータに DCT をかけたら結果は複素数になるんでしたっけ?
> 実数のデータに DCT をかけたら結果も実数ですよ。
実数も複素数の仲間だから許す^^;
> 複素数のデータに DCT をかけたら結果は複素数になるんでしたっけ?
アルゴリズムからしてそうなるハズ
皆様ありがとうございます。
たとえばこのような式では・・・S(k)=10*log{1/N||シグマ(上N-1下n=0)s(n)h(n)exp(-
j2pink/N)||^2}
のプログラムを教えてください。これはパワースペクトルの式です。
N;512 h(n);ハニング窓関数で(1/2{1-cos(2pin/N)})です
ちょいまち、それと norm と何の関係がある?
exp(-j2pink/N)が複素数なんです