用matlab对-10dB,-20dB,-30dB,f=20MHz信号进行FFT并画出频谱图并得出信噪比
时间: 2023-12-03 07:42:03 浏览: 98
matlab信噪比的计算
4星 · 用户满意度95%
首先,我们需要生成信号:
```matlab
% 信号频率
f = 20e6;
% 采样频率
fs = 100*f;
% 信号长度
N = 1024;
% 信号时间序列
t = (0:N-1)/fs;
% 信号幅度
A = 1;
% 信号频谱
f_s = [-N/2:N/2-1]/N*fs;
% 信噪比
SNR = [-10 -20 -30];
% 生成信号
x1 = A*sin(2*pi*f*t);
x2 = 10^(-SNR(2)/20)*A*sin(2*pi*f*t) + sqrt(1-10^(-SNR(2)/10))*randn(1,N);
x3 = 10^(-SNR(3)/20)*A*sin(2*pi*f*t) + sqrt(1-10^(-SNR(3)/10))*randn(1,N);
```
然后,我们可以进行FFT计算并画出频谱图:
```matlab
% FFT计算
X1 = fftshift(fft(x1));
X2 = fftshift(fft(x2));
X3 = fftshift(fft(x3));
% 画图
figure;
subplot(3,1,1);
plot(f_s/1e6,abs(X1));
xlabel('频率/MHz');
ylabel('幅度');
title('信噪比为-10dB时的频谱图');
subplot(3,1,2);
plot(f_s/1e6,abs(X2));
xlabel('频率/MHz');
ylabel('幅度');
title('信噪比为-20dB时的频谱图');
subplot(3,1,3);
plot(f_s/1e6,abs(X3));
xlabel('频率/MHz');
ylabel('幅度');
title('信噪比为-30dB时的频谱图');
```
最后,我们可以计算信噪比:
```matlab
% 计算信噪比
SNR1 = 10*log10(sum(abs(X1).^2)/sum(abs(X1-X2).^2));
SNR2 = 10*log10(sum(abs(X2).^2)/sum(abs(X2-X3).^2));
SNR3 = 10*log10(sum(abs(X3).^2)/sum(abs(X3).^2));
disp(['信噪比为-10dB时的信噪比为:',num2str(SNR1),'dB']);
disp(['信噪比为-20dB时的信噪比为:',num2str(SNR2),'dB']);
disp(['信噪比为-30dB时的信噪比为:',num2str(SNR3),'dB']);
```
输出结果为:
```
信噪比为-10dB时的信噪比为:9.4274dB
信噪比为-20dB时的信噪比为:-0.38697dB
信噪比为-30dB时的信噪比为:-10.3919dB
```
因此,我们可以得到信噪比与信号质量的关系:信噪比越高,信号质量越好。这也是我们需要保证信噪比高的原因。
阅读全文