matlab语音信号的采集与处理
fs=22050;[x,fs,Nbits]=wavread('G:\Matlab\matlab课程设计资料\Matlab滤波器程序\WindowsXP登录音');t=0:...
fs=22050;
[x,fs,Nbits] =wavread('G:\Matlab\matlab课程设计资料\Matlab滤波器程序\Windows XP 登录音') ;
t=0:1/22050:(length(x)-1)/22050;
sound(x,fs) ; %对加载的语音信号进行回放
figure(1)
plot(x) %做原始语音信号的时域图形
title('原始语音信号');
xlabel('time n');
ylabel('fuzhi n');
figure(2)
freqz(x) %绘制原始语音信号的频率响应图
title('频率响应图')
n=length(x); %求出语音信号的长度
y1=fft(x,n) ; %傅里叶变换
y2=fftshift(y1); %对频谱图进行平移
f=0:fs/n:fs*(n-1)/n; %得出频点
figure(3)
subplot(2,1,1);
plot(abs(y2)) %做原始语音信号的FFT频谱图
title('原始语音信号FFT频谱')
subplot(2,1,2);
plot(f,abs(y2)); %绘制原始语音信号的频谱图
title('原始语音信号频谱')
%加噪声
k=1:1:n; %定义k 值,噪声与原始语音长度一致
c1=10*sin(2*pi*5000*k); %噪声信号的函数
figure(4)
plot(k,c1)
title('噪声信号时域图'); %绘制噪声信号的时域波形图
figure(5)
freqz(c1) %绘制噪声信号的频率响应图
title('噪声信号频率响应图')
s=length(c1); %噪声信号的长度
xc=fft(c1,s); %对噪声信号进行频谱变换
xcc=fftshift(xc);
f=0:fs/s:fs*(s-1)/s;
figure(6) %绘制噪声语音的FFT频谱图
plot(f,abs(xcc))
title('噪声信号的频谱图');
%噪音与原始信号叠加
z=x'+c1;
y3=fft(z,s); %对叠加信号进行频谱变换
y4=fftshift(y3); %对频谱图平移
f=0:fs/s:fs*(s-1)/s; %得出频点
figure(7)
plot(f,abs(y4)); %绘出加噪语音频谱图
axis([0 8000 0 50]);
title('含噪语音信号的频谱');
figure(8)
subplot(2,1,1);
plot(f,abs(y2)) %做原始语音信号的FFT频谱图
title('原始语音信号FFT频谱')
subplot(2,1,2);
plot(f,abs(y4)) %做加噪语音信号的FFT频谱图
title('加噪语音信号频谱')
运行后显示z=x'+c1有错误 ,求高手解答 展开
[x,fs,Nbits] =wavread('G:\Matlab\matlab课程设计资料\Matlab滤波器程序\Windows XP 登录音') ;
t=0:1/22050:(length(x)-1)/22050;
sound(x,fs) ; %对加载的语音信号进行回放
figure(1)
plot(x) %做原始语音信号的时域图形
title('原始语音信号');
xlabel('time n');
ylabel('fuzhi n');
figure(2)
freqz(x) %绘制原始语音信号的频率响应图
title('频率响应图')
n=length(x); %求出语音信号的长度
y1=fft(x,n) ; %傅里叶变换
y2=fftshift(y1); %对频谱图进行平移
f=0:fs/n:fs*(n-1)/n; %得出频点
figure(3)
subplot(2,1,1);
plot(abs(y2)) %做原始语音信号的FFT频谱图
title('原始语音信号FFT频谱')
subplot(2,1,2);
plot(f,abs(y2)); %绘制原始语音信号的频谱图
title('原始语音信号频谱')
%加噪声
k=1:1:n; %定义k 值,噪声与原始语音长度一致
c1=10*sin(2*pi*5000*k); %噪声信号的函数
figure(4)
plot(k,c1)
title('噪声信号时域图'); %绘制噪声信号的时域波形图
figure(5)
freqz(c1) %绘制噪声信号的频率响应图
title('噪声信号频率响应图')
s=length(c1); %噪声信号的长度
xc=fft(c1,s); %对噪声信号进行频谱变换
xcc=fftshift(xc);
f=0:fs/s:fs*(s-1)/s;
figure(6) %绘制噪声语音的FFT频谱图
plot(f,abs(xcc))
title('噪声信号的频谱图');
%噪音与原始信号叠加
z=x'+c1;
y3=fft(z,s); %对叠加信号进行频谱变换
y4=fftshift(y3); %对频谱图平移
f=0:fs/s:fs*(s-1)/s; %得出频点
figure(7)
plot(f,abs(y4)); %绘出加噪语音频谱图
axis([0 8000 0 50]);
title('含噪语音信号的频谱');
figure(8)
subplot(2,1,1);
plot(f,abs(y2)) %做原始语音信号的FFT频谱图
title('原始语音信号FFT频谱')
subplot(2,1,2);
plot(f,abs(y4)) %做加噪语音信号的FFT频谱图
title('加噪语音信号频谱')
运行后显示z=x'+c1有错误 ,求高手解答 展开
2个回答
展开全部
这是我刚做的双线性变换法低通滤波器,运行是正确的!ly是语音信号的名字,别的自己改改就行!
原语音信号程序
figure(1);
[y,fs,nbits]=wavread ('ly');
sound(y,fs,nbits); %回放语音信号
n = length (y) ; %求出语音信号的长度
Y=fft(y,n); %傅里叶变换
subplot(2,1,1);plot(y);title('原始信号波形');
subplot(2,1,2);plot(abs(Y));title('原始信号频谱')
加噪语音信号程序
figure(2);
[y,fs,nbits]=wavread ('ly');
n = length (y) ; %求出语音信号的长度
t=[0:1/8000:2 zeros(1,23520-1)]';
noise=0.04*sin(10000*pi*t);%sin函数产生噪声
s=y+noise; %语音信号加入噪声
sound(s);
subplot(2,1,1);plot(s);title('加噪语音信号的时域波形');
S=fft(s); %傅里叶变换
subplot(2,1,2);plot(abs(S));title('加噪语音信号的频域波形')
滤波后的信号程序
Ft=8000;
Fp=1000;
Fs=1200;
wp=2*pi*Fp/Ft;
ws=2*pi*Fs/Ft;
fp=2*Ft*tan(wp/2);
fs=2*Fs*tan(wp/2);
[n11,wn11]=buttord(wp,ws,1,50,'s'); %求低通滤波器的阶数和截止频率
[b11,a11]=butter(n11,wn11,'s'); %求S域的频率响应的参数
[num11,den11]=bilinear(b11,a11,0.5); %利用双线性变换实现频率响应S域到Z域的变换
[y,fs,nbits]=wavread ('ly');
n = length (y) ; %求出语音信号的长度
t=[0:1/8000:2 zeros(1,23520-1)]';
noise=0.04*sin(10000*pi*t);%sin函数产生噪声
s=y+noise; %语音信号加入噪声
z11=filter(num11,den11,s);
sound(z11);
m11=fft(z11); %求滤波后的信号
figure(3);
subplot(2,1,1);plot(z11);title('滤波后的信号波形');
subplot(2,1,2);plot(abs(m11),'r');title('滤波后信号的频谱');
你的串号我已经记下,采纳后我会帮你制作
原语音信号程序
figure(1);
[y,fs,nbits]=wavread ('ly');
sound(y,fs,nbits); %回放语音信号
n = length (y) ; %求出语音信号的长度
Y=fft(y,n); %傅里叶变换
subplot(2,1,1);plot(y);title('原始信号波形');
subplot(2,1,2);plot(abs(Y));title('原始信号频谱')
加噪语音信号程序
figure(2);
[y,fs,nbits]=wavread ('ly');
n = length (y) ; %求出语音信号的长度
t=[0:1/8000:2 zeros(1,23520-1)]';
noise=0.04*sin(10000*pi*t);%sin函数产生噪声
s=y+noise; %语音信号加入噪声
sound(s);
subplot(2,1,1);plot(s);title('加噪语音信号的时域波形');
S=fft(s); %傅里叶变换
subplot(2,1,2);plot(abs(S));title('加噪语音信号的频域波形')
滤波后的信号程序
Ft=8000;
Fp=1000;
Fs=1200;
wp=2*pi*Fp/Ft;
ws=2*pi*Fs/Ft;
fp=2*Ft*tan(wp/2);
fs=2*Fs*tan(wp/2);
[n11,wn11]=buttord(wp,ws,1,50,'s'); %求低通滤波器的阶数和截止频率
[b11,a11]=butter(n11,wn11,'s'); %求S域的频率响应的参数
[num11,den11]=bilinear(b11,a11,0.5); %利用双线性变换实现频率响应S域到Z域的变换
[y,fs,nbits]=wavread ('ly');
n = length (y) ; %求出语音信号的长度
t=[0:1/8000:2 zeros(1,23520-1)]';
noise=0.04*sin(10000*pi*t);%sin函数产生噪声
s=y+noise; %语音信号加入噪声
z11=filter(num11,den11,s);
sound(z11);
m11=fft(z11); %求滤波后的信号
figure(3);
subplot(2,1,1);plot(z11);title('滤波后的信号波形');
subplot(2,1,2);plot(abs(m11),'r');title('滤波后信号的频谱');
你的串号我已经记下,采纳后我会帮你制作
展开全部
我试过 很好 没有错误
你可以试试
1、在运行前 先清理一下内存 clear ;clc
2、[x,fs,Nbits] =wavread('G:\Matlab\matlab课程设计资料\Matlab滤波器程序\Windows XP 登录音') ;中的路径改为直接G盘目录下 wav文件名字只用字母(不要包含中文)
这样或许就可以了
如果还不行那就是matlab的问题了 因为我的确实可以出图像 我的matlab版本2010b
希望可以帮到你
你可以试试
1、在运行前 先清理一下内存 clear ;clc
2、[x,fs,Nbits] =wavread('G:\Matlab\matlab课程设计资料\Matlab滤波器程序\Windows XP 登录音') ;中的路径改为直接G盘目录下 wav文件名字只用字母(不要包含中文)
这样或许就可以了
如果还不行那就是matlab的问题了 因为我的确实可以出图像 我的matlab版本2010b
希望可以帮到你
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询