matlab对-10dB f=20mHz信号进行FFT并画出频谱图分析信噪比
时间: 2023-07-15 09:15:07 浏览: 104
假设你已经有了信号数据,以下是MATLAB代码,可以对-10dB f=20mHz信号进行FFT并画出频谱图:
```matlab
% 生成信号数据
Fs = 1000; % 采样率
t = 0:1/Fs:1-1/Fs; % 时间向量
f = 20; % 信号频率
x = sin(2*pi*f*t); % 信号
% 添加10dB的噪声
SNR = 10; % 信噪比
noise = randn(size(x)); % 生成正态分布噪声
noise = noise - mean(noise); % 去除噪声的直流分量
signal_power = norm(x)^2 / length(x); % 计算信号功率
noise_power = signal_power / 10^(SNR/10); % 计算噪声功率
scale_factor = sqrt(noise_power / norm(noise)^2); % 计算噪声缩放因子
noise = noise * scale_factor; % 缩放噪声幅值
x = x + noise; % 添加噪声
% 进行FFT
N = length(x);
X = fft(x)/N;
f = (0:N-1)*(Fs/N);
% 绘制频谱图
figure;
plot(f,20*log10(abs(X)));
xlabel('频率/Hz');
ylabel('幅值/dB');
```
上面的代码首先生成一个20Hz的正弦信号,然后添加10dB的噪声,最后进行FFT并绘制出频谱图。其中,SNR变量控制信噪比,可以根据实际情况进行调节。
在绘制出的频谱图中,可以看到信号在20Hz处有一个明显的峰,而噪声则分布在整个频率范围内。通过计算信号峰值与噪声的平均幅值之比,可以得到信噪比的估计值。
阅读全文