如何使用 awk 或 shell 脚本计算频谱?
How to compute spectrum using awk or shell scripting?
我想使用 awk 或 shell 脚本来计算频谱。我有一个数据,例如
ifile.txt
1
2
3
4
1
3
2
2
3
99
其中 99 是一个未定义的值。
频谱计算公式为
对于 k=1,2,3,4,...
我是按照下面的方式做的。
for i in {1..10};do
awk '{if( != 99) printf "%f %f\n",
*sin(2*3.14*'$i'*NR/10),
*cos(2*3.14*'$i'*NR/10)}' ifile.txt > ifile1.txt
sum_1=$(awk '{sum += } END {print sum}' ifile1.txt)
sum_2=$(awk '{sum += } END {print sum}' ifile1.txt)
awk '{printf "%f\n", (1/2)*(((1/5)*('$sum_1')^2)+((1/5)*('$sum_2')^2))}'
>> ofile.txt
done
请指出我哪里做错了。计算既不打印任何东西也不结束。但是我在 ifile1.txt
中获取值
在我们成功对话后,我将我们的共同努力编译成一个独立的 awk 脚本 (spectrum.awk
):
< 99 {
for (i = 1; i <= 10; ++i) {
sum1[i] += *sin(2*3.14*i*NR/10)
sum2[i] += *cos(2*3.14*i*NR/10)
}
next
}
END {
for (i = 1; i <= 10; ++i) {
printf "%f\n", (1/2)*(((1/5)*(sum1[i])^2)+((1/5)*(sum2[i])^2))
}
}
它使用数组(sum1
和 sum2
)在一个 运行 中计算所有 10 个值。
很遗憾,我对理论背景一无所知。我看不到你的图像(由于我公司的代理问题)。因此,如果计算错误,您可以反馈。
示例会话:
$ echo '1
2
3
4
1
3
2
2
3
99' | awk -f spectrum.awk
1.417046
2.019819
0.288438
2.688501
0.100023
2.680672
0.296974
1.993613
1.338068
44.097319
至少,它看起来 "nice"。
我想使用 awk 或 shell 脚本来计算频谱。我有一个数据,例如
ifile.txt
1
2
3
4
1
3
2
2
3
99
其中 99 是一个未定义的值。
频谱计算公式为
我是按照下面的方式做的。
for i in {1..10};do
awk '{if( != 99) printf "%f %f\n",
*sin(2*3.14*'$i'*NR/10),
*cos(2*3.14*'$i'*NR/10)}' ifile.txt > ifile1.txt
sum_1=$(awk '{sum += } END {print sum}' ifile1.txt)
sum_2=$(awk '{sum += } END {print sum}' ifile1.txt)
awk '{printf "%f\n", (1/2)*(((1/5)*('$sum_1')^2)+((1/5)*('$sum_2')^2))}'
>> ofile.txt
done
请指出我哪里做错了。计算既不打印任何东西也不结束。但是我在 ifile1.txt
中获取值在我们成功对话后,我将我们的共同努力编译成一个独立的 awk 脚本 (spectrum.awk
):
< 99 {
for (i = 1; i <= 10; ++i) {
sum1[i] += *sin(2*3.14*i*NR/10)
sum2[i] += *cos(2*3.14*i*NR/10)
}
next
}
END {
for (i = 1; i <= 10; ++i) {
printf "%f\n", (1/2)*(((1/5)*(sum1[i])^2)+((1/5)*(sum2[i])^2))
}
}
它使用数组(sum1
和 sum2
)在一个 运行 中计算所有 10 个值。
很遗憾,我对理论背景一无所知。我看不到你的图像(由于我公司的代理问题)。因此,如果计算错误,您可以反馈。
示例会话:
$ echo '1
2
3
4
1
3
2
2
3
99' | awk -f spectrum.awk
1.417046
2.019819
0.288438
2.688501
0.100023
2.680672
0.296974
1.993613
1.338068
44.097319
至少,它看起来 "nice"。