FFT 似乎比 MUSIC 算法更准确?

信息处理 fft 信号分析 算法 音乐
2022-02-17 00:24:31

我用两个正弦曲线创建了一个信号,并在其中添加了越来越多的随机噪声。在这个信号上运行 FFT 和 MUSIC 的结果如下图所示。

忽略 FFT 图的 x 轴上的缩放比例错误这一事实,MUSIC 算法的结果在哪些方面优于 FFT?对我来说,MUSIC 结果看起来更糟,因为图表看起来过于平滑,因此当噪声增加时无法解析两个光谱峰值,而它们在 FFT 图中清晰可见。尽管事实上我们必须告诉 MUSIC 算法我们期望两个光谱峰值(4in 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)

在此处输入图像描述

1个回答

我用两个正弦曲线创建了一个信号,并在其中添加了越来越多的随机噪声。在这个信号上运行 FFT 和 MUSIC 的结果如下图所示。

您正在使用pmusic(). MUSIC(MUltiple SIgnal Classification)是一种通用算法,可以从信号中估计出各种参数。pmusic()是一个 MATLAB 函数,它利用该算法来评估信号频谱中峰值位置的位置。更重要的是,它不介意更好地表示其他频率的电平(不是峰值的位置)。

我认为 MUSIC 算法的全部意义在于它应该提供比 FFT 更准确的结果。

一点也不!FFT 是一种在频域中表示给定信号的分析方法。考虑到执行该方法的参数,可以对方法的准确性进行大量讨论,但它是一种具有接近解决方案的数学运算。然而,MUSIC 算法是一种优化方法。作为一种优化方法,它迭代地估计问题的最优解。给定相同的问题和两种不同的初始化,它实际上可以生成两种不同的解决方案。当无法制定接近解决方案时,通常使用优化方法。根据问题的具体情况,这两个中的每一个都可以更好。例如,频率有多接近?您想要解决方案的速度有多快?你对准确性的容忍度是多少?