谱相减MATLAB代码以及信噪比计算
- 格式:doc
- 大小:203.50 KB
- 文档页数:7
matlab中的信噪⽐以⾼斯噪声为例:若有⽤信号s(n)的最⼤幅度am,要求得到的信噪⽐为p,则p=10log10[(am^2)/b^2],⽤这个公式反推出⾼斯噪声的⽅差b^2,若s(n)单通道实信号,则Matlab程序就是x=s+b*randn(size(s));若s(n)是正交双通道信号,则Matlab程序就是x=s+b/sqrt(2)*randn(size(s))。
如果s(n)是⼀个N⾏、2列的复信号,前后两列各表⽰实部和虚部,则b/sqrt(2)*randn(size(s))产⽣的也是N×2的⾼斯分布噪声,实部和虚部的⽅差均为b/sqrt(2)。
实部和虚部分别产⽣也可以,但不能⽤b*randn(size(s))。
第⼀,如果这样产⽣噪声,那么最终信号的信噪⽐应该⽤p=10log10[(am^2)/(2*b^2)];第⼆,不能⽤size(s),应该⽤size(c),c为s(n)的实(虚)部列⽮量的长度。
Matlab中计算信噪⽐⽅式:%===========================Happy===================================%function snr=SNR(I,In)% 计算信号噪声⽐函数% by Qulei% I :original signal% In:noisy signal(ie. Original signal + noise signal)% snr=10*log10(sigma2(I2)/sigma2(I2-I1))[row,col,nchannel]=size(I);snr=0;if nchannel==1%gray imagePs=sum(sum((I-mean(mean(I))).^2));%signal powerPn=sum(sum((I-In).^2));%noise powersnr=10*log10(Ps/Pn);elseif nchannel==3%color imagefor i=1:3Ps=sum(sum((I(:,:,i)-mean(mean(I(:,:,i)))).^2));%signal powerPn=sum(sum((I(:,:,i)-In(:,:,i)).^2));%noise powersnr=snr+10*log10(Ps/Pn);endsnr=snr/3;end%===================================================================%转:符号的平均功率每⽐特信号能量/符号周期SNR信噪⽐ = ------------------------- = ----------------------------------------- =噪声的平均功率噪声单边功率普密度*符号带宽Eb/T 在限带情况下 T*B=1 Eb= ---------- ================== ---------N0*B N0实际系统中噪声的单边功率普密度N0受温度和常数K决定的,在⼀定条件下为固定值;信噪⽐与信号能量的强弱成正⽐。
matlab中的计算信噪比
在MATLAB中,计算信噪比(SNR)通常涉及对信号和噪声的功率进行测量和比较。
以下是一种可能的方法:
首先,假设你有一个信号的向量s和一个包含信号和噪声的向量x。
你可以使用以下代码计算信噪比:
matlab.
signal_power = sum(abs(s).^2) / length(s); % 信号功率。
noise = x s; % 噪声向量。
noise_power = sum(abs(noise).^2) / length(noise); % 噪声功率。
SNR = 10 log10(signal_power / noise_power); % 信噪比(以分贝为单位)。
这段代码首先计算信号的功率,然后计算噪声向量,并计算噪
声的功率。
最后,它使用这些值计算信噪比,并将其转换为分贝。
另一种常见的方法是使用MATLAB的内置函数`snr`来计算信噪比。
例如:
matlab.
snr_value = snr(s, noise);
这将直接计算信号和噪声之间的信噪比。
需要注意的是,信噪比的计算可能会根据实际情况有所不同。
在一些情况下,你可能需要考虑信号和噪声的频谱特性,或者使用不同的信号和噪声统计特性的估计方法。
因此,在实际应用中,你可能需要根据具体情况对信噪比的计算方法进行调整。
总的来说,MATLAB提供了多种计算信噪比的方法,可以根据实际情况选择合适的方法进行计算。
学生毕业设计报告基于MATLAB的频谱分析与信号去噪作者系(院)专业年级学号指导教师日期学生诚信承诺书本人郑重承诺:所呈交的设计报告是我个人在导师指导下进行的研究工作及取得的研究成果。
尽我所知,除了文中特别加以标注和致谢的地方外,报告中不包含其他人已经发表或撰写的研究成果,也不包含为获得安阳师范学院或其他教育机构的学位或证书所使用过的材料。
与我一同工作的同志对本研究所做的任何贡献均已在报告中作了明确的说明并表示了谢意。
签名:日期:报告使用授权说明本人完全了解有关保留、使用学位报告的规定,即:学校有权保留送交报告的复印件,允许报告被查阅和借阅;学校可以公布报告的全部或部分内容,可以采用影印、缩印或其他复制手段保存报告。
签名:导师签名:日期:基于MATLAB的频谱分析与信号去噪摘要:本课题是基于数字信号处理的理论知识对语音信号、图像信号等的频谱分析以及对加噪声语音信号进行时域、频域分析和滤波设计。
然后利用 MATLAB软件进行编程,调试并完善程序,最终在计算机上得以实现。
滤波器设计在数字信号处理中占有极其重要的地位,数字滤波器又有FIR数字滤波器和IIR滤波器两种。
利用MATLAB信号处理工具箱可以快速有效地设计各种数字滤波器。
在设计实现的过程中,使用窗函数法来设计FIR数字滤波器,用巴特沃斯、切比雪夫和双线性变法设计IIR数字滤波器,并利用MATLAB 作为辅助工具完成设计中的计算与图形的绘制。
通过对对所设计滤波器的仿真和频率特性分析,可知利用MATLAB信号处理工具箱可以有效快捷地设计FIR和IIR数字滤波器,过程简单方便,结果的各项性能指标均符合指定要求。
关键词频域分析,滤波器, MATLAB1 引言1.1 课题背景随着信息时代和数字世界的到来,数字信号处理己成为当今一门极其重要的学科和技术领域,数字信号处理在通信、语音、图像、自动控制、医疗和家用电器等众多领域得到了广泛的应用。
任意一个信号都具有时域与频域特性,信号的频谱完全代表了信号,因而研究信号的频谱就等于研究信号本身。
MATLAB中snr函数的介绍1. 函数定义snr函数是MATLAB的一个信号处理工具箱(Signal Processing Toolbox)中的函数,用于计算信噪比(Signal-to-Noise Ratio, SNR),即信号与噪声之比。
该函数的定义如下:[snr_value, noise_power] = snr(signal, noise)2. 函数用途snr函数的主要用途是评估信号质量,判断信号是否受到噪声的干扰。
信噪比是指信号与噪声的强度之比,通常用分贝(dB)表示。
较高的信噪比表示信号的强度较大,噪声的干扰较小,从而提高了信号的质量和可靠性。
在信号处理领域中,通常需要通过调整信号处理算法来改善信号质量,而信噪比是一个重要的评估指标,因此使用snr函数可以帮助我们定量地分析和比较不同信号处理算法的效果。
3. 函数工作方式snr函数的工作方式如下:•将输入的信号分为信号(signal)和噪声(noise)两部分,其中信号是我们感兴趣的信号,噪声是干扰信号的非感兴趣信号。
•snr函数首先计算信号的功率,即信号的平方的均值。
然后将信号与噪声相减得到残差信号(residual)。
接下来,计算残差信号的功率,即残差信号的平方的均值,也就是噪声的功率。
•最后,使用以下公式计算信噪比(SNR):SNR = 10 * log10(信号的功率 / 噪声的功率)。
计算结果以分贝(dB)为单位返回。
4. 函数输入参数snr函数有两个输入参数,分别是信号(signal)和噪声(noise):•signal:要评估信噪比的信号。
可以是一维或多维数组。
signal的大小和噪声的大小必须相同。
•noise:噪声信号。
可以是一维或多维数组。
噪声信号和signal的大小必须相同。
5. 函数输出结果snr函数有两个输出结果,分别是信噪比SNR(snr_value)和噪声的功率(noise_power):•snr_value:信噪比,以分贝(dB)为单位表示。
可见光信噪比matlab
可见光信噪比在图像处理和计算机视觉领域是一个重要的指标,它用于衡量图像中有用信息和噪声的比例。
在MATLAB中,我们可以
使用不同的方法来计算可见光信噪比。
首先,我们可以通过以下步骤使用MATLAB计算可见光信噪比:
1. 读取图像,使用imread函数读取可见光图像。
2. 分割图像,将图像分割为有用信息和噪声部分。
3. 计算信噪比,使用SNR(信噪比)函数来计算信噪比。
另一种方法是使用MATLAB中的图像处理工具箱提供的函数来计
算可见光信噪比。
例如,可以使用imnoise函数向图像添加噪声,
然后使用psnr函数计算信噪比。
此外,还可以考虑使用滤波器和其他图像增强技术来改善图像
质量,并且使用MATLAB进行实验和比较不同方法对信噪比的影响。
从理论角度来看,信噪比的计算是基于图像的能量分布和噪声的能量分布,因此在MATLAB中可以利用图像处理和数学工具箱中的函数来实现这些计算。
总的来说,计算可见光信噪比涉及图像处理、信号处理和数学计算等多个方面,MATLAB提供了丰富的函数和工具箱来支持这些计算,可以根据具体的应用场景和需求选择合适的方法来计算可见光信噪比。
matlab谱减法
在MATLAB 中,可以使用`spec减法`函数进行谱减法。
下面是一个简单的示例代码:
```matlab
% 产生两个信号
s1 = sin(2*pi*50*t);
s2 = sin(2*pi*150*t);
% 计算谱减法
c = spec减法(s1,s2);
% 绘制结果
plot(c);
```
在上述代码中,`spec减法`函数接受两个信号`s1`和`s2`作为输入,并返回它们的谱减法结果。
最后,使用`plot`函数绘制结果。
请注意,`spec减法`函数是基于离散傅里叶变换(DFT)的谱减法实现。
它假设输入信号在时间上是离散的,并且已经进行了DFT 变换。
如果需要对连续时间信号进行谱减法,可以先对信号进行采样和DFT 变换,然后再应用`spec减法`函数。
此外,谱减法的结果可能受到频谱泄漏和栅栏效应的影响。
在实际应用中,可能需要进行适当的加窗处理和频率分辨率的选择,以减少这些影响。
谱减法的Matlab 程序:clear;[xx,fs]=wavread('I:\aa\0a.wav');[team,row]=size(xx);% 读语音信号if row==2 x=(xx(:,1)+xx(:,2))/2; yy=x;else% 将多通道求平均值x=xx;yy=x;endx=x-mean(x)+0.1*rand(length(x),1); N=length(x);n=220;n1=160;frame=floor((N-n)/(n-n1));for i=1:frame % 去直流分量并加噪% 每一帧长% 每两帧重合的长度% 帧数y1=x((i-1)*(n-n1)+1:(i-1)*(n-n1)+n).*hamming(n); % 每一帧对应的语音信号fy=fft(y1,n);%求fft nen( i,:)=abs(fy).A2; % 求能量ang(i,:)=angle(fy); % 求角度endyuzhi=sum(sum(nen(2:5,:)))/(4*n); for i=1:frame nen(i,:)=nen(i,:)-yuzhi;nen(i,find(nen(i,:)<0))=0;endfor i=1:frame% 求阈值,信号开始阶段的能量平均值% 减谱% 将小于0 的部分赋值为0nen(i,:)=sqrt(nen(i,:));jie=nen(i,:).*exp(j*ang(i,:)); % 求频域函数out(i,:)=real(ifft(jie))./hamming(n)'; %求逆fftendzong=out(1,:)';jiewei=n;% 对out 求导,以便于原信号比较for i=2:frame %将一系列的帧组合还原zong(jiewei-n1+1:jiewei)=(zong(jiewei-n1+1:jiewei)+out(i,1:n1)')/2;jiewei=jiewei+n-n1;zong=[zong;out(i,n1+1:end)'];endfigure(1);subplot(211);plot(x); %画加噪的原始语音信号axis([1,(n-n1)*frame+n,min(x),max(x)]);subplot(212);specgram(x,fs,1024,n,n1); % 对应的鱼谱图figure(2);subplot(211);plot(zong); %画增强的语音信号axis([1,(n-n1)*frame+n,min(zong),max(zong)]); subplot(212);specgram(zong,fs,1024,n,n1);wavplay(x,fs); % 输出音频wavplay(zong,fs);。
谱相减MATLAB代码以及信噪比计算实验二语音信号的频域处理一、实验目的、要求(1)掌握语音信号频域分析方法(2)了解语音信号频域的特点(3)了解谱减法作为频域语音增强的原理与编程实现(3)了解谱减法的缺点,并分析产生该缺点的原因二、实验原理语音虽然是一个时变、非平稳的随机过程。
但在短时间内可近似看作是平稳的。
因此如果能从带噪语音的短时谱中估计出“纯净”语音的短时谱,即可达到语音增强的目的。
由于噪声也是随机过程,因此这种估计只能建立在统计模型基础上。
利用人耳感知对语音频谱分量的相位不敏感的特性,这类语音增强算法主要针对短时谱的幅度估计。
短时话幅度估计概述设一帧加窗后的带噪语音为()()()01y n s n d n n N =+≤≤- (2.1)其中()s n 为纯净语音,()d n 假设为平稳加性高斯噪声。
将()y n 在一组基{()}k n φ上展开,使展对系数为各不相关的随机变量。
设()y n 的相关函数为(,)y R n m ,由K -L 展开得知{()}k n φ满足1()()(,)()N k y k m K n R n m m λφφ-==∑ (2.2)则()y n 的展开式为110()()()()N k k K N k k n y n Y nY y n n φφ-=-=?==??∑∑ (2.3) 如果()y n 的相关长度小于帧长N ,则()k n φ的近似函数为2()k nk n j N π=(2.4)可见()y n 的展开过程实际上相当于离散博里叶交换,其展开系数(为傅里叶变换系数。
由()()()y n s n d n =+,则有:k k k Y S N =+。
其中[]||exp k k k Y Y j θ=、[]||exp k k k S S j α=、k N 分别为()y n 、()s n 及()d n 的傅里叶交换系数。
由于假设噪声是高斯分布的,其傅里叶系数k N 相当于多个高斯样本的加权和,故可认为仍然为高斯分布。
拉曼光谱是一种非常重要的光谱分析技术,广泛应用于化学、材料和生物等领域。
在拉曼光谱分析中,信噪比是一个非常重要的指标,它直接影响到光谱的质量和分析结果的准确性。
在matlab软件中,如何有效提高拉曼光谱信噪比是一个非常重要的问题。
本文将对matlab中提高拉曼光谱信噪比的方法进行介绍,希望对相关研究和实际应用有所帮助。
一、拉曼光谱信噪比的影响因素拉曼光谱信噪比的大小受到多种因素的影响,包括光源的稳定性、样品的表面光滑度、检测器的性能和环境噪声等。
在实际应用中,我们往往无法控制全部的因素,所以需要通过数据处理的方法来提高光谱的信噪比。
二、matlab 中提高拉曼光谱信噪比的方法1. 数据采集和预处理在进行拉曼光谱测量时,首先需要对样品进行准备,保证其表面光滑度,同时选择稳定的光源和优质的检测器。
在采集光谱数据之后,也需要进行数据预处理,包括波长校正、基线校正和信号平滑等,这些步骤可以有效地提高光谱的信噪比。
2. 信号平滑和峰识别在matlab中,可以使用各种信号平滑和峰识别的方法来对拉曼光谱数据进行处理。
可以使用移动平均法和低通滤波法来对光谱信号进行平滑处理,去除噪声的干扰;也可以通过峰识别算法来找到光谱中的各个峰值,更清晰地展示样品的拉曼光谱特征。
3. 多元分析方法除了单一的信号处理方法,matlab中也提供了多元分析的工具箱,可以对拉曼光谱数据进行主成分分析、偏最小二乘回归等多元分析方法,从而提取出光谱中的有效信息,降低噪声的影响。
4. 优化算法在matlab中,还可以通过优化算法对光谱数据进行优化处理,可以使用遗传算法、模拟退火算法等优化方法,找到合适的参数,使得光谱的信噪比达到最优。
三、实际案例分析为了验证上述方法的有效性,我们在实际样品上进行了拉曼光谱测量,并使用matlab进行了数据处理。
结果表明,通过综合运用上述方法,我们成功地提高了样品的拉曼光谱信噪比,清晰地展现出了样品的特征峰值和峰形。
实验二 语音信号的频域处理一、 实验目的、要求(1)掌握语音信号频域分析方法 (2)了解语音信号频域的特点(3)了解谱减法作为频域语音增强的原理与编程实现 (3)了解谱减法的缺点,并分析产生该缺点的原因 二、实验原理语音虽然是一个时变、非平稳的随机过程。
但在短时间内可近似看作是平稳的。
因此如果能从带噪语音的短时谱中估计出“纯净”语音的短时谱,即可达到语音增强的目的。
由于噪声也是随机过程,因此这种估计只能建立在统计模型基础上。
利用人耳感知对语音频谱分量的相位不敏感的特性,这类语音增强算法主要针对短时谱的幅度估计。
短时话幅度估计概述 设一帧加窗后的带噪语音为()()()01y n s n d n n N =+≤≤- (2.1)其中()s n 为纯净语音,()d n 假设为平稳加性高斯噪声。
将()y n 在一组基{()}k n φ上展开,使展对系数为各不相关的随机变量。
设()y n 的相关函数为(,)y R n m ,由K -L 展开得知{()}k n φ满足1()()(,)()N k y k m K n R n m m λφφ-==∑ (2.2)则()y n 的展开式为110()()()()N k k K N k k n y n Y nY y n n φφ-=-=⎧=⎪⎪⎨⎪=⎪⎩∑∑ (2.3) 如果()y n 的相关长度小于帧长N ,则()k n φ的近似函数为2()k nk n j N πϕ⎛⎫=⎪⎝⎭ (2.4)可见()y n 的展开过程实际上相当于离散博里叶交换,其展开系数(为傅里叶变换系数。
由()()()y n s n d n =+,则有:k k k Y S N =+。
其中[]||exp k k k Y Y j θ=、[]||exp k k k S S j α=、k N 分别为()y n 、()s n 及()d n 的傅里叶交换系数。
由于假设噪声是高斯分布的,其傅里叶系数k N 相当于多个高斯样本的加权和,故可认为仍然为高斯分布。
其均值为0,方差可通过无语音时对噪声的分析而获得。
语音增强的任务就是利用已知的噪声功率谱信息,从k Y 中估计出k S 。
由于人耳对相位不敏感,故只需估计出||k S ,然后借用带噪语音的相位,进行傅里叶逆变换就可得到增强的语音。
基于短时谱幅度估计的方法的原理图如图2.1所示。
图2.1 短时谱估计原理图在短时谱幅(STSA)估计基础上,人们提出了许多语音增强算法。
基本思想是利用输入带噪语音短时谱幅来估计清洁语音短时谱幅,结合带噪语音相位信息,得到增强信号。
运用短时傅里叶变换(STFT)和重叠相加是短时谱估计技术中最常用的方法。
输入信号)(n y 的短时谱幅|)(|k Y 与一个修正因子相乘,得到增强信号谱幅度|)(ˆ|k S(通常修正因子与噪声信号)(n d 谱幅估计密切相关);或将含噪语音谱幅减去噪声谱幅估计,得到增强信号谱幅,这些方法统称为相减类型算法(subtractive -type algorithms)。
噪声谱幅估计可以通过有声、无声检测获取。
一般认为噪声与信号不相关,增强信号谱幅|)(ˆ|k S是清洁语音信号)(n s 的谱幅估计。
通常假设人耳对含噪语音相位产生的畸变不敏感,所以进行IDFT 恢复成时域信号时,含噪语音的相位一般不作处理。
三、使用仪器、材料微机(带声卡)、耳机,话筒。
四、 实验步骤(1) 分析含噪语音信号的频谱(幅度谱和相位谱) (2) 获取噪声信号频谱(幅度谱) (3) 对含噪语音信号进行分帧并进行加窗处理 (4) 将含噪语音信号谱和噪声谱作为输入,进行谱减法 (5) 回复增强语音信号帧. (6) 对比输入信号与增强信号波形,分析算法对其产生的影响. 五、实验过程原始记录(数据,图表,计算)假设)(n y 为含噪语音离散时间序列,由清洁语音信号)(n s 和非相关加性噪声信号)(n d 组成。
)(n y 可表示为)(n y =)(n s +)(n d (2.5)将输入信号按帧处理,前后帧之间重叠(一般为50%),对每帧含噪语音进行加窗处理,然后进行FFT 变换,变换到频率域。
含噪语音的能量谱可以表示为2|)(|k Y ≈2|)(|k S +2|)(|k D (2.6) 其中)(k Y 为)(k Y =∑-=-102)(N n Nkn j en y π=|)(|k Y )(k i e ϕ (2.7)其中)(k ϕ为含噪语音)(k Y 的相位。
由于没法直接得到含噪语音中噪声能量谱2|)(|k D ,一般将无声阶段的数帧噪声信号进行能量谱加权平均得到噪声能量谱估计2|)(|k D 。
假设噪声与语音信号不相关,语音能量谱估计为2|)(ˆ|k S=2|)(|k Y -2|)(ˆ|k D (2.8) 其中清洁语音能量谱估计2|)(ˆ|k S由含噪语音能量谱减去噪声能量谱估计得到。
由于噪声能量谱估计与含噪语音中噪声能量谱之间存在差异,式(3.4)可能出现负值,为了避免能量谱出现负值,将这些负值设为零,这一处理称为半波整流(half-wave rectification)。
通过半波整流,清洁语音能量谱估计2|)(ˆ|k S可表示为 0|)(ˆ|0|)(ˆ|0|)(ˆ||)(ˆ|2222<>⎩⎨⎧=k S k Sk S k S当当 (2.9) 结合含噪语音相位信息,通过逆离散傅里叶变换(IDFT)得到时域清洁语音信号的估计信号)(ˆn s。
)(ˆn s=IDFT()(|)(ˆ|k j e k S ϕ) (2.10) 其中增强语音信号频谱)(ˆk S也可以通过时变滤波器)(k G 重建 )(ˆk S =)(k G )(k Y (2.11) 式中时变滤波器(或称为增益函数))(k G 可表示为否则如果βαβα+<⎪⎪⎪⎩⎪⎪⎪⎨⎧⋅⋅-=1|)(||)(ˆ|)|)(||)(ˆ|()|)(||)(ˆ|1()(225.0225.022k Y k D k Y k D k Y k Dk G (2.12)六:实验结果,及分析(a) 原始含噪语音(b) 谱相减增强语音(c) 原始含噪语音(d) 谱相减增强语音图2.2 谱减法结果分析实验结果:图2.2中(a),(c)为不同信噪比输入含噪语音信号,图2.2中(b),(d)为对应增强语音信号。
当信噪比较低时,降噪效果较差。
并且引入音乐噪声。
算法缺陷分析:(1)不可避免的引入音乐噪声。
要有效地滤除含噪语音中的噪声,需要准确地估计含噪语音中噪声的频谱。
噪声谱估计越准确,增强信号谱中音乐噪声越小。
然而,由于不能直接得到噪声谱,在绝大多数谱相减算法中,通过加权平均无声阶段噪声谱得到噪声谱估计,这种噪声谱估计与含噪语音中的瞬时噪声谱存在差异,噪声平稳性越差,差异越大,由于这种差异的存在,谱相减不可避免地引入音乐噪声。
(2) 半波、全波整流式(3.4)中负能量值的产生是由于噪声谱估计发生了错误。
这些负值用半波整流(被设定为0)或全波整流(被设定为绝对值),这样处理并没有纠正这种错误,可能导致时域信号更进一步的失真。
(3) 用含噪语音的相位作为增强语音的相位在生成增强时域信号时,含噪语音的相位并没有作任何修改。
这是基于这样一个事实,相位的失真对语音质量下降造成的影响不大。
当信噪比比较高(>5dB)时,相位失真确实对语音质量的影响不大,然而,当信噪比较低时(<0dB)这种由于相位失真造成的语音质量下降是可以感觉得到的。
七、实验参考程序代码谱相减原程序代码hanning=zeros(1,256);speech=zeros(1,32000);dd=wavread('D:\语音信号处理实验2\noise.wav');%噪声;sp=wavread('D:\语音信号处理实验2\speech.wav');%纯语音;hanning=zeros(1,256);noise=dd(10000:45000);speech=sp(25000:60000);e2=noise+speech;szeros=zeros(1,32000);soutput1=zeros(1,32000);j=sqrt(-1);a=3,b=0.01;Snoise=zeros(1,256);phase=zeros(1,256);for n=1:256hanning(n)=(1/2)*(1-cos((2*pi)*(n-1)/255));end% to get noise spectralNoise=zeros(1,256);Noise1=zeros(1,256);for i=1:3Noise1(1:256)=abs(fft(e2(1+i*256:256*(i+1)).*hanning'));Noise=Noise+Noise1/3;% spectral subtraction algrithmfor i=1:245 %%第i帧snoise=e2((i-1)*128+1:(i-1)*128+256).*hanning';phase=angle(fft(snoise)); % to get noisy signal spectral phaseSnoise=abs(fft(snoise)); % to get noisy signal spectral amplitudefor n=1:256if(Snoise(n)^2-Noise(n)^2)<0 %the power of enhanced speech must be positiveSout0(n)=0.1*Snoise(n);elseSout0(n)=(Snoise(n)^2-(Noise(n)*1.5)^2)^0.5; %power type spectral subtractionendS0(n)=Sout0(n)*(cos(phase(n))+j*sin(phase(n))); % to get enhanced speech spectral amplitudeendsout0=ifft(S0);szeros(((i-1)*128+1):((i-1)*128+256))=real(sout0);soutput1=soutput1+szeros;szeros=zeros(1,32000);end%the following is for SNR calculationsp_energe=zeros(1,256);sn_energe=zeros(1,256);SN=zeros(1,256);in_SNR1=zeros(1,125);out_SNR1=zeros(1,125);snoise=zeros(1,256);for i=1:240snoise=speech((i-1)*128+1:(i-1)*128+256).*hanning';%第i帧清洁语音存放到snoiseSN=noise((i-1)*128+1:(i-1)*128+256).*hanning'; %第i帧清洁语音存放到SN%in_SNR1(i)sp_energe(i)=snoise(1:256)'*snoise(1:256);%第i帧清洁语音snoise的能量存放到sp_energe(i) sn_energe(i)=SN(1:256)'*SN(1:256);%第i帧皂声SN的能量存放到sn_energe(i)in_SNR1(i)=10*log10(sp_energe(i)/sn_energe(i));%第i帧含噪语音信号输入信噪比in_SNR1(i)SN=soutput1((i-1)*128+1:(i-1)*128+256).*hanning; %第i帧输出信号存放SNsn_energe1(i)=SN(1:256)*SN(1:256)';%第i帧输出信号SN能量out_SNR1(i)=10*log10(sp_energe(i)/abs(sn_energe1(i)-sp_energe(i)));%第i帧增强信号输出信噪比endplot(e2);hold onplot(soutput1,'r');plot(speech,'g');plot(in_SNR1) hold onplot(out_SNR1,'r')figureplot(hanning);%sound(speech); %sound(e2); sound(soutput1);。