matlab对-30dB,f=20MHZ正弦信号进行FFT并画出频谱图分析信噪比
时间: 2023-12-03 08:42:13 浏览: 93
首先,生成一个20MHz的正弦信号,采样率为100MHz,时长为1秒:
```
fs = 100e6; % 采样率100MHz
t = 0:1/fs:1-1/fs; % 时长1秒
f = 20e6; % 频率20MHz
x = sin(2*pi*f*t); % 生成20MHz正弦信号
```
然后,加入-30dB的高斯白噪声:
```
noise_power = 10^(-30/10); % 噪声功率,单位为W
noise = sqrt(noise_power)*randn(size(x)); % 生成高斯白噪声
x = x + noise; % 加入噪声
```
进行FFT变换,并画出频谱图:
```
N = length(x); % 信号长度
X = fft(x)/N; % FFT变换
f_axis = (0:N-1)*fs/N; % 频率轴
figure;
plot(f_axis/1e6,20*log10(abs(X))); % 画出频谱图
xlabel('Frequency (MHz)');
ylabel('Amplitude (dB)');
```
分析信噪比:从频谱图中,可以看到信号的能量主要集中在20MHz左右的地方,而噪声的能量则分布在整个频带内。因此,可以通过计算信号在20MHz处的功率与噪声的平均功率比较来得到信噪比:
```
signal_power = abs(X(f==20e6))^2; % 计算信号功率
noise_power = mean(abs(X).^2) - signal_power; % 计算噪声功率
SNR = 10*log10(signal_power/noise_power); % 计算信噪比,单位为dB
```
这样就可以得到信噪比SNR的值了。
阅读全文