matlab中分别对0dB,-10dB,-20dB的三个f=20mhz的正弦信号进行FFT并进行频谱分析(包括频率和信噪比两方面)并和波形绘制在一张图中
时间: 2023-11-28 20:49:07 浏览: 172
首先,我们需要生成三个不同幅度的正弦信号,并将它们叠加在一起:
```matlab
fs = 100e6; % 采样率
t = 0:1/fs:1e-3; % 时间向量
f = 20e6; % 正弦波频率
A1 = 1/sqrt(2); % 幅度为 0 dB
A2 = 1/sqrt(2)*10^(-10/20); % 幅度为 -10 dB
A3 = 1/sqrt(2)*10^(-20/20); % 幅度为 -20 dB
x1 = A1*sin(2*pi*f*t); % 0 dB 的正弦信号
x2 = A2*sin(2*pi*f*t); % -10 dB 的正弦信号
x3 = A3*sin(2*pi*f*t); % -20 dB 的正弦信号
x = x1 + x2 + x3; % 叠加三个信号
```
接下来,我们对信号进行 FFT 并进行频谱分析:
```matlab
X = fft(x); % 对信号进行 FFT
N = length(X); % FFT 点数
f = (0:N-1)*fs/N; % 频率向量
P = abs(X).^2/N; % 信号功率谱密度
SNR = 10*log10(sum(P)/sum(P(2:end))); % 计算信噪比
```
最后,我们将波形和频谱绘制在一张图中:
```matlab
figure;
subplot(2,1,1);
plot(t*1e3, x);
xlabel('时间(ms)');
ylabel('幅度');
title('信号波形');
grid on;
subplot(2,1,2);
plot(f/1e6, 10*log10(P));
xlabel('频率(MHz)');
ylabel('功率谱密度(dBm/Hz)');
title(['信号频谱,SNR = ', num2str(SNR), 'dB']);
grid on;
```
完整代码如下:
```matlab
fs = 100e6; % 采样率
t = 0:1/fs:1e-3; % 时间向量
f = 20e6; % 正弦波频率
A1 = 1/sqrt(2); % 幅度为 0 dB
A2 = 1/sqrt(2)*10^(-10/20); % 幅度为 -10 dB
A3 = 1/sqrt(2)*10^(-20/20); % 幅度为 -20 dB
x1 = A1*sin(2*pi*f*t); % 0 dB 的正弦信号
x2 = A2*sin(2*pi*f*t); % -10 dB 的正弦信号
x3 = A3*sin(2*pi*f*t); % -20 dB 的正弦信号
x = x1 + x2 + x3; % 叠加三个信号
X = fft(x); % 对信号进行 FFT
N = length(X); % FFT 点数
f = (0:N-1)*fs/N; % 频率向量
P = abs(X).^2/N; % 信号功率谱密度
SNR = 10*log10(sum(P)/sum(P(2:end))); % 计算信噪比
figure;
subplot(2,1,1);
plot(t*1e3, x);
xlabel('时间(ms)');
ylabel('幅度');
title('信号波形');
grid on;
subplot(2,1,2);
plot(f/1e6, 10*log10(P));
xlabel('频率(MHz)');
ylabel('功率谱密度(dBm/Hz)');
title(['信号频谱,SNR = ', num2str(SNR), 'dB']);
grid on;
```
阅读全文