基于matlab的音频处理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/dxinbin/article/details/54584276
         <!--一个博主专栏付费入口结束-->
        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-d284373521.css">
                                    <div id="content_views" class="markdown_views">
                <!-- flowchart 箭头图标 勿删 -->
                <svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
                    <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
                </svg>
                                        <p>如图一段信号,是由一串频率相同的脉冲串组成,请根据各个脉冲信号的频谱,判断脉冲串的频率. <br>

音频信号

  1. 读取音频文件
[x,Fs,bits]=wavread('E:\数字信号处理\good5.wav');
T=1/Fs;  %采样周期
t=(1:length(x))*T;   %采样时间
figure(1);
plot(t,x);
title('原始信号时域图形');
xlabel('时间t/s');
ylabel('音量');
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这里写图片描述
音频信号频谱分析

y=fft(x);       %做FFT变换
f=(0:length(y)-1).*Fs/length(y);
plot(f,y)       %画出原始信号的频谱图
 
 
  • 1
  • 2
  • 3

这里写图片描述
2. 脉冲信号分离
通过观察原始信号在时域上的波形,可知该类信号包含12个脉冲,对应各个脉冲所在位置,然后将其对应的数字信号进行分离,可以得到如下各个脉冲的波形;(以两个脉冲为例)
这里写图片描述
这里写图片描述
3. 加窗去除噪声
分帧处理

function [X magY]= jiachuang(x)
N=length(x);
n0=0.04*48000;
n1=floor(0.5*n0);
num=floor((N-n0)/n1)+1;
for i=1:num;
a1=(i-1)*n1+1;
a2=(i-1)*n1+n0;
X=x(a1:a2).*hamming(n0);  %汉明窗
end
Y=fft(X);
magY=abs(Y);
end
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

这里写图片描述
这里写图片描述

4.滤波器的设计

 function [ x_daitong magy_daitong ] = lvboqi(x1)
 fp=[4000,7000];
 fs=[3000,8000];
 Fs=48000;
 As=20;Ap=1;
 wp=2*pi*fp/Fs;
 ws=2*pi*fs/Fs;
 BF=wp(1)-ws(1);
 wc=ws+BF/2;
 M=ceil((As-7.95)/(2.286*BF))+1;
 N=M+1;
 beta=0.1102*(As-8.7);
 window=(kaiser(N,beta));
 b=fir1(M,wc/pi,'bandpass',window);
 x_daitong=filter(b,1,x1);
 y_daitong=fft(x_daitong);
 magy_daitong=abs(y_daitong);
end
 figure(1)
 freqz(b,1,512);
 title('FIR带通滤波器的频率响应');
 plot(t,x_daitong);
 figure(2);
 plot(t,x_daitong);
 figure(3);
 plot(f,magy_daitong); 
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

这里写图片描述
通过所设计的滤波器,对加窗去噪后的各个脉冲信号进行进一步的滤波,通过其频谱图,可以发现对于3KM~8kM带通滤波效果良好。
这里写图片描述
这里写图片描述
为进一步分析每个脉冲在3~8KM的信号频谱波形,对信号进行了局部放大,找到该脉冲的频率点,并标出该点坐标。

function [ f y Y_daitong ] =findplot(y_daitong )
h=3000/48000*length(y_daitong);
g=10000/48000*length(y_daitong);
Y_daitong=y_daitong(h:g,:);       %截取3kHz~10KHz的信号
[y,x]=max(Y_daitong);             %找到该段最大幅值和所对应的位置点
f=3000+7000*x/length(Y_daitong);  %将对应的位置点转化为频率
end
a=3000/48000*length(f1);
b=10000/48000*length(f1);
f2=f1(:,a:b);                     %截取频率3~10KHz

[a b ydaitong]=findplot(y1daitong);%调用函数
F(i)=a;                           %将该段脉冲信号的频率存在数组中
plot(f2,ydaitong);                %画出波形图
hold on;
plot([a,a],[0,b],'r--');          %用红色的线标出频率点
text(a,b,['(',num2str(a),',',num2str(b),')'],'color','b'); %标出频率点的坐标  
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

这里写图片描述
这里写图片描述

6.计算分析
得到各个脉冲的频率:
F=[5.6500 4.1750 4.6441 4.2206 4.1957 3.5480 7.8826 7.0605 7.0107 5.7153 5.6904 4.3203]KHz
求其平均值得:
Fm= 5.3428kHz
求各个脉冲与信号脉冲的标准差为:
S=85.2072
信号的频率为5.3428kHz。

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值