用matlab对20MHz的正弦信号加-20db白噪声,进行FFT变换并进行频谱分析(包括频率和信噪比)
时间: 2023-09-18 20:11:17 浏览: 142
Matlab编程实现FFT变换及频谱分析的程序代码.zip
5星 · 资源好评率100%
可以按照以下步骤进行:
1. 生成20MHz正弦信号和-20dB的白噪声。
```matlab
fs = 100e6; % 采样频率
t = 0:1/fs:1e-6; % 采样时间
f = 20e6; % 正弦信号频率
x = sin(2*pi*f*t); % 20MHz正弦信号
noise = randn(size(x)); % 高斯白噪声
noise = noise / (10^(-20/20)); % -20dB
y = x + noise; % 加噪声后的信号
```
2. 对加噪声后的信号进行FFT变换。
```matlab
N = length(y); % 采样点数
Y = fft(y); % FFT变换
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; % 频率向量
```
3. 绘制频谱图。
```matlab
figure;
plot(f/1e6, 10*log10(P1)); % 单边频谱幅度谱
xlim([0 50]); % 设置x轴范围
xlabel('Frequency (MHz)'); % 设置x轴标签
ylabel('Magnitude (dB)'); % 设置y轴标签
```
4. 计算信噪比。
```matlab
noise_power = sum(noise.^2) / length(noise); % 噪声功率
signal_power = sum(x.^2) / length(x); % 信号功率
snr = 10*log10(signal_power / noise_power); % 信噪比
disp(['SNR = ' num2str(snr) ' dB']); % 显示信噪比
```
完整代码如下:
```matlab
fs = 100e6; % 采样频率
t = 0:1/fs:1e-6; % 采样时间
f = 20e6; % 正弦信号频率
x = sin(2*pi*f*t); % 20MHz正弦信号
noise = randn(size(x)); % 高斯白噪声
noise = noise / (10^(-20/20)); % -20dB
y = x + noise; % 加噪声后的信号
N = length(y); % 采样点数
Y = fft(y); % FFT变换
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)); % 单边频谱幅度谱
xlim([0 50]); % 设置x轴范围
xlabel('Frequency (MHz)'); % 设置x轴标签
ylabel('Magnitude (dB)'); % 设置y轴标签
noise_power = sum(noise.^2) / length(noise); % 噪声功率
signal_power = sum(x.^2) / length(x); % 信号功率
snr = 10*log10(signal_power / noise_power); % 信噪比
disp(['SNR = ' num2str(snr) ' dB']); % 显示信噪比
```
阅读全文