用matlab对-10dB,-20dB,-30dB时f=20MHz的信号进行FFT并画出频谱图并根据频率求出信噪比
时间: 2023-12-03 22:42:46 浏览: 107
首先,我们需要生成一个20MHz的信号并添加不同的噪声级别。以下是MATLAB代码:
```
% 生成20MHz的信号
fs = 100e6; % 采样率100MHz
t = 0:1/fs:1e-6; % 1us时间内采样
f = 20e6; % 信号频率
x = sin(2*pi*f*t); % 生成20MHz的正弦波信号
% 添加不同级别的噪声
y1 = awgn(x, -10, 'measured'); % -10dB噪声
y2 = awgn(x, -20, 'measured'); % -20dB噪声
y3 = awgn(x, -30, 'measured'); % -30dB噪声
% 进行FFT变换
N = length(x);
X = fft(x, N);
Y1 = fft(y1, N);
Y2 = fft(y2, N);
Y3 = fft(y3, N);
% 计算信噪比
SNR1 = snr(x, y1-x); % -10dB噪声信噪比
SNR2 = snr(x, y2-x); % -20dB噪声信噪比
SNR3 = snr(x, y3-x); % -30dB噪声信噪比
% 画出频谱图
f_axis = (-N/2:N/2-1)*(fs/N); % 频率轴
X_shift = fftshift(X); % 将FFT结果移动到中心
Y1_shift = fftshift(Y1);
Y2_shift = fftshift(Y2);
Y3_shift = fftshift(Y3);
figure;
subplot(2,2,1);
plot(f_axis, 20*log10(abs(X_shift)));
title('20MHz信号频谱图');
xlabel('频率(Hz)');
ylabel('幅度(dB)');
subplot(2,2,2);
plot(f_axis, 20*log10(abs(Y1_shift)));
title('-10dB噪声频谱图');
xlabel('频率(Hz)');
ylabel('幅度(dB)');
subplot(2,2,3);
plot(f_axis, 20*log10(abs(Y2_shift)));
title('-20dB噪声频谱图');
xlabel('频率(Hz)');
ylabel('幅度(dB)');
subplot(2,2,4);
plot(f_axis, 20*log10(abs(Y3_shift)));
title('-30dB噪声频谱图');
xlabel('频率(Hz)');
ylabel('幅度(dB)');
```
运行以上代码,会得到一个包含四个子图的图像,分别为原始20MHz信号的频谱图和添加不同级别噪声后的频谱图。同时,代码会计算出每个信号的信噪比。
根据计算结果,-10dB,-20dB,-30dB噪声的信噪比分别为:
```
SNR1 = 9.9747 dB
SNR2 = 19.9798 dB
SNR3 = 29.9848 dB
```
我们可以看到,随着噪声级别的降低,信噪比也会降低。同时,添加噪声后的频谱图也会受到影响,噪声会使得信号的频谱幅度下降,并且在频谱图中会出现额外的噪声峰。
阅读全文