matlab中分别对0dB,-10dB,-20dB的三个f=20mhz的正弦信号进行FFT并进行频率和信噪比两方面的频谱分析,并和波形一起绘制在一张图中
时间: 2023-11-28 20:47:44 浏览: 104
以下是可以参考的 MATLAB 代码:
```matlab
% 生成三个正弦信号
fs = 100e6; % 采样频率为100MHz
f = 20e6; % 正弦信号频率为20MHz
t = 0:1/fs:1e-6; % 采样时间为1us
x1 = sin(2*pi*f*t); % 0dB信号
x2 = 0.3162*sin(2*pi*f*t); % -10dB信号
x3 = 0.1*sin(2*pi*f*t); % -20dB信号
% 对三个信号进行FFT
N = length(x1);
X1 = abs(fft(x1)/N);
X2 = abs(fft(x2)/N);
X3 = abs(fft(x3)/N);
fvec = (0:N-1)/N*fs;
% 计算信噪比
noise1 = mean(X1(fvec>40e6 & fvec<60e6));
SNR1 = 10*log10(max(X1)/noise1);
noise2 = mean(X2(fvec>40e6 & fvec<60e6));
SNR2 = 10*log10(max(X2)/noise2);
noise3 = mean(X3(fvec>40e6 & fvec<60e6));
SNR3 = 10*log10(max(X3)/noise3);
% 绘制图像
figure;
subplot(2,2,1);
plot(t, x1);
title('0dB Sinusoidal Signal');
xlabel('Time (s)');
ylabel('Amplitude');
subplot(2,2,2);
plot(fvec/1e6, X1);
title(['FFT of 0dB Signal, SNR = ' num2str(SNR1) 'dB']);
xlabel('Frequency (MHz)');
ylabel('Magnitude');
subplot(2,2,3);
plot(t, x2);
title('-10dB Sinusoidal Signal');
xlabel('Time (s)');
ylabel('Amplitude');
subplot(2,2,4);
plot(fvec/1e6, X2);
title(['FFT of -10dB Signal, SNR = ' num2str(SNR2) 'dB']);
xlabel('Frequency (MHz)');
ylabel('Magnitude');
figure;
subplot(2,2,1);
plot(t, x3);
title('-20dB Sinusoidal Signal');
xlabel('Time (s)');
ylabel('Amplitude');
subplot(2,2,2);
plot(fvec/1e6, X3);
title(['FFT of -20dB Signal, SNR = ' num2str(SNR3) 'dB']);
xlabel('Frequency (MHz)');
ylabel('Magnitude');
```
这段代码会生成两个图,每个图包含四个子图。在每个子图中,左边的是时域波形,右边的是频域幅度谱。每个子图的标题上都标注了信号的信噪比。
阅读全文