我用两个正弦曲线创建了一个信号,并在其中添加了越来越多的随机噪声。在这个信号上运行 FFT 和 MUSIC 的结果如下图所示。
忽略 FFT 图的 x 轴上的缩放比例错误这一事实,MUSIC 算法的结果在哪些方面优于 FFT?对我来说,MUSIC 结果看起来更糟,因为图表看起来过于平滑,因此当噪声增加时无法解析两个光谱峰值,而它们在 FFT 图中清晰可见。尽管事实上我们必须告诉 MUSIC 算法我们期望两个光谱峰值(4
in pmusic(x_1,4)
),而 FFT 不需要这些信息。
我认为 MUSIC 算法的全部意义在于它应该提供比 FFT 更准确的结果。那么我在这里错过了什么,我没有正确解释这些情节吗?代码有问题吗?最终,MUSIC 算法为我们提供了 FFT 没有提供的什么?
这是我用来生成图像的代码。
clc
clear all
close all
N = 400;
n = 0:N;
x = cos(0.22*pi*n) + sin(0.2*pi*n);
x_1 = x + 0.02*randn(size(n));
x_2 = x + 0.05*randn(size(n));
x_3 = x + 0.1*randn(size(n));
fft_x_1 = abs(fft(x_1)); fft_x_1 = fft_x_1(1:N/2);
fft_x_2 = abs(fft(x_2)); fft_x_2 = fft_x_2(1:N/2);
fft_x_3 = abs(fft(x_3)); fft_x_3 = fft_x_3(1:N/2);
music_x_1 = pmusic(x_1,4);
music_x_2 = pmusic(x_2,4);
music_x_3 = pmusic(x_3,4);
figure
subplot(3,2,1);
plot(fft_x_1)
title('FFT')
subplot(3,2,2)
pmusic(x_1,4)
subplot(3,2,3)
plot(fft_x_2)
title('FFT')
subplot(3,2,4)
pmusic(x_2,4)
subplot(3,2,5)
plot(fft_x_3)
title('FFT')
subplot(3,2,6)
pmusic(x_3,4)