产生长度为 N,的一段均值为0,方差为1的实高斯白噪声序列,产生长度为 N的三个实正弦信号,其归一化频率分别是 0.1,0.25,0.27,信噪比分别是30dB,30dB,27dB,给出matlab程序
时间: 2024-05-02 21:23:56 浏览: 175
matlab程序,求信噪比SNR.m
以下是产生符合要求的信号和加入高斯白噪声的 Matlab 程序:
```matlab
% 信号长度
N = 1000;
% 产生三个实正弦信号
f1 = 0.1;
f2 = 0.25;
f3 = 0.27;
amp1 = 1;
amp2 = 0.8;
amp3 = 0.6;
t = 1:N;
x1 = amp1 * sin(2*pi*f1*t)';
x2 = amp2 * sin(2*pi*f2*t)';
x3 = amp3 * sin(2*pi*f3*t)';
% 归一化频率
fn1 = f1 / (0.5*N);
fn2 = f2 / (0.5*N);
fn3 = f3 / (0.5*N);
% 计算三个信号的功率
P1 = sum(abs(x1).^2) / N;
P2 = sum(abs(x2).^2) / N;
P3 = sum(abs(x3).^2) / N;
% 计算三个信号的噪声功率
SNR1 = 30; % dB
SNR2 = 30; % dB
SNR3 = 27; % dB
Pn1 = P1 / (10^(SNR1/10));
Pn2 = P2 / (10^(SNR2/10));
Pn3 = P3 / (10^(SNR3/10));
% 产生高斯白噪声序列
n = randn(N, 1);
% 计算噪声方差
sigma = sqrt(Pn1 + Pn2 + Pn3);
% 加入噪声
y = x1 + x2 + x3 + sigma * n;
% 归一化
y = y / sqrt(sum(abs(y).^2)/N);
% 输出结果
figure;
subplot(2,2,1);
plot(t, x1);
ylim([-1.2 1.2]);
title('x1');
subplot(2,2,2);
plot(t, x2);
ylim([-1.2 1.2]);
title('x2');
subplot(2,2,3);
plot(t, x3);
ylim([-1.2 1.2]);
title('x3');
subplot(2,2,4);
plot(t, y);
ylim([-1.2 1.2]);
title('y');
```
这段程序会绘制出三个正弦信号和加入噪声后的结果。可以看到,加入噪声的信号仍然能够很好地区分出三个正弦信号。
阅读全文