在频带上切割功率谱密度

时间:2014-07-30 22:01:32

标签: matlab

我使用pwelch获取多个信号矢量的功率谱密度,然后找到5个频段的平均信噪比。

我将功率谱密度转换为dB,并且我目前逐个获得每个波段:

P_signal1(band1)
P_signal1(band2)
P_signal1(band3)

...

P_signal2(band1)
P_signal2(band2)

等等。

有没有办法轻松获得这个,可能使用信号和波段的数组

signals = [P_signal1, P_signal2, P_signal3, P_signal4, P_signal5]
bands = [band1, band2, band3, band4, band5]

并获得每种组合的矩阵?

1 个答案:

答案 0 :(得分:0)

A = 1:100;
bands = [1:20;21:40;41:60;61:80;81:100];
A(bands)

可以看到完整的文档here

Matlab中的索引与其他语言有很大不同,因为Matlab使用矩阵。当您为A(1)这样的数组建立索引时,它会选择一个元素,就像任何其他语言一样。当你将其索引为A([2,1;3,1])时,会发生魔法。 Matlab将取{4}个A个元素,每个元素对应[2,1;3,1]中的一个元素。然后它以[2,1;3,1]的相同形式排列4个结果。输出也是一个矩阵。


编辑:使用单元格数组

A = 1:100;
bands = {1:20;21:40;41:60;61:80;81:100};
cell2mat( cellfun(@(x) A(x), bands, 'UniformOutput', false) )

这与上述不同,但有类似的想法。现在bands是一个单元格数组,每个元素都包含一个索引范围。

cellfun将此范围中的每一个作为x,并评估表达式A(x)(表示访问A的那部分),并将结果放入新单元格数组,其大小与bands相同,元素位置符合bands中的定义。

cell2mat将此输出单元格数组转换为纯数字数组。