将下列信号进行FFT并进行频谱分析fs = 20e8; t = 0 : 1/fs : 1e-6; f = 20e6; y = sin(2*pi*f*t); % 计算信号功率 sigPower = sum(y.^2)/length(y); % 计算噪声功率 SNR = 0; % 信噪比为0dB noisePower = sigPower / (10^(SNR/10)); % 生成高斯白噪声 noise = sqrt(noisePower)*randn(size(y)); % 将噪声加到信号中 y_noisy = y + noise; % 绘制信号和加噪后的信号 plot(t*1e6, y, t*1e6, y_noisy); xlabel('时间(微秒)'); ylabel('幅度'); title('20MHz正弦波信号和加噪后的信号(0db)'); legend('原始信号', '加噪后的信号');
时间: 2023-11-28 14:47:22 浏览: 90
用FFT对信号进行频谱分析
以下是 MATLAB 代码实现:
```matlab
fs = 20e8;
t = 0 : 1/fs : 1e-6;
f = 20e6;
y = sin(2*pi*f*t);
% 计算信号功率
sigPower = sum(y.^2)/length(y);
% 计算噪声功率
SNR = 0; % 信噪比为0dB
noisePower = sigPower / (10^(SNR/10));
% 生成高斯白噪声
noise = sqrt(noisePower)*randn(size(y));
% 将噪声加到信号中
y_noisy = y + noise;
% 绘制信号和加噪后的信号
plot(t*1e6, y, t*1e6, y_noisy);
xlabel('时间(微秒)');
ylabel('幅度');
title('20MHz正弦波信号和加噪后的信号(0db)');
legend('原始信号', '加噪后的信号');
% 进行FFT并进行频谱分析
N = length(y_noisy);
Y = fft(y_noisy);
P2 = abs(Y/N);
P1 = P2(1:N/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = fs*(0:(N/2))/N;
figure;
plot(f/1e6,10*log10(P1));
title('20MHz正弦波信号和加噪后的信号频谱(0db)');
xlabel('频率(MHz)');
ylabel('功率谱密度(dB)');
```
解释:
首先生成一个频率为 20MHz 的正弦波信号,然后计算信号功率并设定信噪比为 0dB。根据信噪比和信号功率计算出噪声功率,生成同样长度的高斯白噪声并将其加到信号中,生成加噪后的信号并绘制出来。
接着进行 FFT 并进行频谱分析,计算出频率轴上的幅度谱,绘制出频谱图。由于使用了对数坐标轴,所以可以清晰地看到信号频率处的峰值以及噪声频率处的功率谱密度。
阅读全文