为啥么上面的代码报错plot的长度不相同
时间: 2024-03-20 13:40:38 浏览: 14
这可能是因为计算功率谱密度时,使用了 `fft` 函数计算傅里叶变换,得到的 `fft_noise` 长度为信号长度的一半加1,而在绘制幅频图时,使用了 `freq = 0:fs/N:fs/2` 来生成频率轴,其中 `N` 是信号长度。如果信号长度不是偶数,那么 `fft_noise` 长度和 `freq` 长度就不一致了。
要解决这个问题,可以在计算 `freq` 时使用 `N = length(noise)-1`,这样可以保证 `freq` 和 `fft_noise` 长度一致。修改后的代码如下:
```matlab
% 生成2800赫兹的噪声信号
fs = 44100; % 采样率
duration = 1; % 时长
t = 0:1/fs:duration-1/fs; % 时间轴
f = 2800; % 频率
noise = sin(2*pi*f*t); % 可以自己生成噪声信号,这里简单使用了正弦波
% 绘制幅频图
N = length(noise) - 1;
fft_noise = fft(noise); % 傅里叶变换
fft_noise = fft_noise(1:N/2+1); % 取一半,因为另一半是镜像
psd = (1/(fs*N)) * abs(fft_noise).^2; % 计算功率谱密度
freq = 0:fs/N:fs/2; % 频率轴
figure
plot(freq,10*log10(psd))
title('2800Hz White Noise Power Spectral Density')
xlabel('Frequency (Hz)')
ylabel('Power/Frequency (dB/Hz)')
% 绘制相频图
phase = angle(fft_noise); % 相位
figure
plot(freq, phase)
title('2800Hz White Noise Phase Spectrum')
xlabel('Frequency (Hz)')
ylabel('Phase (rad)')
```
这样修改后,就可以避免 `plot` 的长度不相同的问题了。