matlab中释选择你要注释的段落,然后Ctrl+R,整段的前面就都被加上了注释符“%”。
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
如果没看错是再求信号的功率谱,
Fs=2048;
%
设定采样点数
FFTN=1024;
%设定FFT点数
t=(0:1023)/Fs;
%
设定正弦信号的采样时间点
x=2sin(2pi256t+pi/8);
%
产生正弦信号
y=fftshift(fft(x,FFTN));
%这句没太看懂,应该是求信号的功率谱,但结果是复数,需取模,这句需楼主在核实下
yam=abs(y)2/FFTN;
%需取模,
f=((0:FFTN-1)-FFTN/2)Fs/FFTN;
%设定画图时的横坐标,Hz为单位
figure(1);plot(f,yam);xlabel('f(Hz)');ylabel('幅值');
%
以横坐标Hz,纵坐标取模结果,画图,
[amax
index]=max(yam);
%取纵坐标最大值和序号
gmax=angle(y(index));
%这句也没太看,取出模值最大值进行什么处理,
fmax=f(index);
%取出模值最大点对应的频率值
以上除了标注的,其他应该没问题,楼主在看看那两句吧,查查matlab的help
%基本减谱法
clear;
%[xx,fs]=wavread('E:\mywhisper\shuwav');
%[xx,fs]=wavread('E:\speech\x\w1xun_01wav');
%[xx,fs]=wavread('E:\speech\耳语音切割\b\w1ba_5');
[xx,fs]=wavread('D:\yuanwav');% 读取音频文件yuanwav,并返回采样数据给变量xx及采样率Fs
[team,row]=size(xx);%将数组xx的行数赋给team,列数赋给row
if row==2
x=(xx(:,1)+xx(:,2))/2;
yy=x;
%如果语音信号xx为2列,即信号为双声道,则将其转换成单声道信号,即取两列的平均值赋给x,并将x的值赋给yy
else
x=xx;
yy=x;
%若语音信号xx为单声道,则将xx的值赋给x,并将x的值赋给yy
end
x=x-mean(x)+01rand(length(x),1
N=length(x);%将语音信号长度赋给变量N
n=220;%对语音信号进行分帧,帧长为220
n1=160;%帧移为160
frame=floor((N-n)/(n-n1));%将分帧数赋给变量frame
%frame=floor(N/n);
for i=1:frame
y1=x((i-1)(n-n1)+1:(i-1)(n-n1)+n)hamming(n);
%对每段分帧进行加窗处理
fy=fft(y1,n);
nen(i,:)=abs(fy)^2;% 将频域信号功率赋给矩阵变量nen
ang(i,:)=angle(fy);%将频域信号的相位角赋给矩阵变量ang
end
yuzhi=sum(sum(nen(2:5,:)))/(4n);
for i=1:frame
nen(i,:)=nen(i,:)-yuzhi;
nen(i,find(nen(i,:)<0))=0;
%chuli=nen(i,1:n/2);
%chuli=chuli-yuzhi;
%chuli(find(chuli<0))=0;
%nen(i,:)=[chuli,fliplr(chuli)];
% nen(i,:)=filter(1,[05 05],nen(i,:));
% nen(i,find(nen(i,:)<0))=0;
end
for i=1:frame
nen(i,:)=sqrt(nen(i,:));%将纯语音功率谱开根,得到频域值
jie=nen(i,:)exp(jang(i,:));
out(i,:)=real(ifft(jie))/hamming(n)'; %对纯语音频谱进行逆傅里叶变换,并取其实部,并进行去窗处理
end
zong=out(1,:)';%将第一帧中未重叠部分记入数组zong
jiewei=n;
for i=2:frame
zong(jiewei-n1+1:jiewei)
=(zong(jiewei-n1+1:jiewei)+out(i,1:n1)')/2;
jiewei=jiewei+n-n1;% 使指针jiewei依次指向下一帧的帧尾
zong=[zong;out(i,n1+1:end)'];将从第二帧开始的每一帧中未重叠部分记入数组zong
end
%zong=out(1,:)';
%for i=2:frame
%zong=[zong;out(i,:)'];
%end
%
%for i=1:frame
% zong=[zong,nen(i,:)'];
% zong(i(n-n1)+1:(i-1)(n-n1)+n)
=zong(i(n-n1)+1:(i-1)(n-n1)+n)/2;
figure(1); %创建图1
subplot(211); %把图形窗口分成21个小窗口,取第1个小窗口
plot(x);%以数组x绘图基本二维曲线
axis([1,(n-n1)frame+n,min(x),max(x)]);% 对当前二维图形对象的X轴和Y轴进行标定,x轴的范围为1到最后一个分帧结尾,y轴的范围为带噪语音时域最小值到最大值
subplot(212); %把图形窗口分成21个小窗口,取第2个小窗口
specgram(x,fs,1024,n,n1);%画出语音的语谱图
figure(2); %创建图2
subplot(211); %把图形窗口分成21个小窗口,取第1个小窗口
plot(zong); %以数组zong绘图基本二维曲线
axis([1,(n-n1)frame+n,min(zong),max(zong)]); % 对当前二维图形对象的X轴和Y轴进行标定,x轴的范围为1到最后一个分帧结尾,y轴的范围为纯语音时域最小值到最大值
subplot(212); %把图形窗口分成21个小窗口,取第2个小窗口
specgram(zong,fs,1024,n,n1); %画出语音的语谱图
wavplay(x,fs);%播放单声道带噪语音音频
wavplay(zong,fs);%播放单声道纯净语音音频
% 无裂纹信号程序
clear all; % 清除历史记录
N1=4000; % 给定N1值为4000;
fs=5120; % 采样频率为5120
load 'd:\nn4txt'; % 读取d:\nn4txt这个文本文档,nn4是文件名,d表示这个文件在d盘
x=nn4(1:N1); % 读取这个文本中的前N1个数并将其附值给变量x
Num=length(x); % 求x的长度,其实这里他写的有点多余,完全可以用N1
t=(0:Num-1)/fs; % 给出时间序列,用点0,1,2Num-1分别除以采样频率fs得到离散时间点,其长度为Num
figure(1); % 第一个图像,
subplot(1,1,1) % 画第一张图,其实这里也没必要这么写,这个式中括号中前两个1指画1行1列总共也就是1个图,要是suplot(2,2,1)就是指一共要画四个图,图以2行2列排列,这里画册的是第一个。
plot(1000t(1:200),x(1:200),'k'); % 这是具体画的 *** 作函数,前面两个一个是生成图,然后指定几张图,如何排列,这个是画,画的是以时间t为横轴,x值为Y轴,点数为200点。前面的乘1000是把秒转换为毫秒
title('解调前的时域波形','FontSize',12); % 图的标题为 解调前的时域波形
xlabel('时间(毫秒)', 'FontSize',12); % 标注,横坐标为时间(毫秒)字体为FontSize,12,其中Fontsize指的是一种字体
grid; % 网格,指图中网格可见,可以是grid on;也可以是grid off;不写就是前种
Y = fft(x,Num); % 将时域信号进行傅立叶变换
Pyy = Y conj(Y) / Num; % 求频幅,至于为什么要除以Num就是为了有一个标量进行对比。其实更常用的是这样Pyy=abs(Y)/max(abs(Y))
f = fs(0:Num/2)/Num; % 求其离散频率点。
figure(2); %生成第二个图
subplot(1,1,1); % 画第二个图,和上面的一样,
plot(f,Pyy(1:Num/2+1),'k'); % 画频谱图,
title('Power spectrum','FontSize',12); %标题
xlabel('frequency (Hz)','FontSize',12); %标坐标标注
grid; %如上
y1=cos(2314159261640t); %cos(2314159261640t);% 1640为激励频率,调幅波进行解调
y=x(y1'); % 用上面生成的信号和原信号对应点相乘,也就是所谓的调制,成成调制后的信号
% y=xcos(2314159261640t);
sum=0; % 生成新变量sum并给定其初值为0
for i=1:length(y); % 循环
sum=sum+y(i); % 这个循环的作用就是求y的总和,其实也可以写成sum=sum(y)
end
y=y-sum/length(y); % 这是一个数据预处理的过程,让信号的离散点分别减去所有点相加后除以总个数的平均值,数据处理上的东西,也不太懂,反正就是把信号先处理一下,
figure(3); %生成第三个图,
subplot(1,1,1); %同上
plot(1000t(1:200),abs(y(1:200)),'k');%同上
title('解调后的时域波形','FontSize',12);%同上
xlabel('时间(毫秒)', 'FontSize',12);%同上
grid;%同上
Y = fft(y,Num);
Pyy = Y conj(Y) / Num;
f = fs(0:Num/2)/Num;
figure(4);
plot(f,Pyy(1:Num/2+1),'k');
title('Power spectrum','FontSize',12);
xlabel('frequency (Hz)','FontSize',12);
grid;
% 这一大锻就是画图,具体和上面一样,
%有裂纹信号程序
clear all; %%下面的程序和上面的基本一样,我想没有必要再一一标注。
N1=4000;
fs=5120;
load 'd:\cc4txt';
x=cc4(1:N1);
Num=length(x);
t=(0:Num-1)/fs;
figure(1);
subplot(1,1,1)
plot(1000t(1:200),x(1:200),'k');
title('解调前的时域波形','FontSize',12);
xlabel('时间(毫秒)', 'FontSize',12);
grid;
Y = fft(x,Num);
Pyy = Y conj(Y) / Num;
f = fs(0:Num/2)/Num;
figure(2);
subplot(1,1,1);
plot(f,Pyy(1:Num/2+1),'k');
title(' Power spectrum ','FontSize',12);
xlabel('frequency (Hz)','FontSize',12);
grid;
y1=cos(2314159261640t);%cos(2314159261640t); % 1640为激励频率,调幅波进行解调
y=x(y1');
% y=xcos(2314159261640t);
sum=0;
for i=1:length(y);
sum=sum+y(i);
end
y=y-sum/length(y);
figure(3);
subplot(1,1,1);
plot(1000t(1:200),abs(y(1:200)),'k');
title('解调后的时域波形','FontSize',12);
xlabel('时间(毫秒)', 'FontSize',12);
grid;
Y = fft(y,Num);
Pyy = Y conj(Y) / Num;
f = fs(0:Num/2)/Num;
figure(4);
plot(f,Pyy(1:Num/2+1),'k');
title(' Power spectrum ','FontSize',12);
xlabel('frequency (Hz)','FontSize',12);
grid;
ones(m,n)生成m×n的全一矩阵,矩阵所有元素都是1
[ones(m,n),ones(m,n)]把两个矩阵并列起来合成一个m×2n的矩阵 加个‘表示转置
成为一个2n×m的其中元素全为1的矩阵
K1x1'就是这两个矩阵相乘
plot是图形输出命令 以t1为横坐标 u1(1,;)表示u1矩阵的第一行,以它为纵坐标绘图显示
plot(t1,u1(1,:),'k',t1,u1(2,:),'k--')画两条线 分辨 t1横坐标 u1(1,:)纵坐标 以及t1横坐标u1(2,:)纵坐标
‘k--’表示对图中线条样式的定制 ’k‘是黑色 “--”表示虚线(默认是实线) 单独‘k'表示黑色实线
以上就是关于matlab中怎么注释全部的内容,包括:matlab中怎么注释、matlab中fft()用法、基本谱减法进行语音增强的matlab程序求注释等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)