创建单频信号&含噪信号
function [x_k,s_k,n_k] = generate_signal(fs,f0,T,SNR)
%generate_signal 创建信号
% fs --> 采样频率(标量)
% f0 --> 信号基频(标量)
% T --> 采样时长(标量)
% SNR --> 输入信噪比(标量)
% x_k <-- 输出带噪信号(列向量)
% s_k <-- 输出原始信号(列向量)
% n_k <-- 输出噪声信号(列向量)
t = 0:1/fs:T-1/fs;
s_k = sin(2*pi*f0*t); % 输出原始信号(行向量)
n_k = randn(size(s_k)); % 用randn函数产生高斯白噪声
signal_power = mean(s_k.*s_k); % 求出信号的平均能量
noise_power = mean(n_k.*n_k); % 求出噪声的平均能量
noise_variance = signal_power / ( 10^(SNR/10) ); % 计算出噪声设定的方差值
n_k = sqrt(noise_variance/noise_power)*n_k; % 按噪声的平均能量构成相应的白噪声
x_k = s_k+n_k; % 构成带噪语音
end