基于matleb对音频信号的频谱分析(幅频)和滤波分析

基于matlab对音频信号的频谱分析(幅频)和滤波分析

频谱分析

函数Spectrum.m
功能是生成单边频谱图和双边频谱图。
记得使用函数前要加
figure;% 建立窗口放频谱
以下是函数代码:

function Spectrum(y,t,fs)
    %y为输入信号
    %fs为采样频率
    L = length(y); %信号长度
    Xf = fftshift(abs(fft(y)));
    %快速傅里叶变换,fftshift为去除采样卷积引起的fs/2处重叠。
    subplot(3,1,1);%建立空图形
    plot(t,y);%输出原波形
    title('波形图');
    xlabel('时间');
    ylabel('幅值');
    f = [0:L/2]*fs/L;%横坐标范围[0:fs/2]
    subplot(3,1,2);
    plot(f,Xf(round(L/2):L)*2);%输出单边频谱,取一半乘2。
    title('单边幅频');
    xlabel('f/Hz');
    ylabel('An');
    grid on;%背景网格
    f = [-L/2:L/2-1]*fs/L;%横坐标范围[-fs/2:fs/2]
    subplot(3,1,3);
    plot(f,Xf);%输出双边频谱图
    title('双边幅频');
    xlabel('f/Hz');
    ylabel('|X(f)|');
    grid on;
end

滤波分析

低通、带通、高通滤波器
记得使用滤波器前要加
figure;% 建立窗口放频谱
以下是函数代码:

低通滤波器
function Lfilter(y,fs,ft)
    %y为输入信号
    %fs为采样频率
    %ft为通带截至频率
    L = length(y);
    f = [-L/2:L/2-1]*fs/L;
    Wn = ft/(0.5*fs);
    [b,a] = butter(50,Wn,'low');%计算滤波器系数
    Xt = filter(b,a,y);%滤波
    subplot(3,1,1);%建立空图形
    plot(f,fftshift(abs(fft(Xt))));
    title('信号低通滤波后幅频');
    xlabel('f/Hz');
    ylabel('|X(f)|');
    grid on;
    %sound(Xt,fs);%播放滤波后音频
    audiowrite('低通滤波后声音.wav',Xt,fs,'BitsPerSample',24);%存储滤波后wav音频文件
end

带通滤波器
function Bfilter(y,fs,f1,f2)
    %y为输入信号
    %fs为采样频率
    %ft为通带截至频率
    %f1为带通下限频率
    %f2为带通上限频率
    L = length(y);
    f = [-L/2:L/2-1]*fs/L;
    Wn1 = f1/(0.5*fs);
    Wn2 = f2/(0.5*fs);
    [b,a] = butter(50,[Wn1 Wn2]);%计算滤波器系数
    Xt = filter(b,a,y);%滤波
    subplot(3,1,2);%建立空图形
    plot(f,fftshift(abs(fft(Xt))));
    title('信号带通滤波后幅频');
    xlabel('f/Hz');
    ylabel('|X(f)|');
    grid on;
    %sound(Xt,fs);%播放滤波后音频
    audiowrite('带通滤波后声音.wav',Xt,fs,'BitsPerSample',24);%存储滤波后wav音频文件
end

高通滤波器
function Hfilter(y,fs,ft)
    %y为输入信号
    %fs为采样频率
    %ft为通带截至频率
    L = length(y);
    f = [-L/2:L/2-1]*fs/L;
    Wn = ft/(0.5*fs);
    [b,a] = butter(50,Wn,'high');%计算滤波器系数
    Xt = filter(b,a,y);%滤波
    subplot(3,1,3);%建立空图形
    plot(f,fftshift(abs(fft(Xt))));
    title('信号高通滤波后幅频');
    xlabel('f/Hz');
    ylabel('|X(f)|');
    grid on;
    %sound(Xt,fs);%播放滤波后音频
    audiowrite('高通滤波后声音.wav',Xt,fs,'BitsPerSample',24);%存储滤波后wav音频文件
end

使用测试代码


[y,fs]=audioread('C:\Users\123\Desktop\声音\交响乐.wav'); 
y = y(:,1);%取单声道,直接用双声道图像会重叠。
T = 1/fs;
t=(0:length(y)-1)*T;%计算时长
figure;% 建立窗口放频谱
Spectrum(y,t,fs);%频谱分析
figure;% 建立窗口放滤波频谱
ft1=1000;%低通上限截至频率
Lfilter(y,fs,ft1);%低通滤波
f1=1000;%带通下限
f2=2000;%带通上限
Bfilter(y,fs,f1,f2);%带通滤波
ft2=2000;%高通下限截至频率
Hfilter(y,fs,ft2);%高通滤波

  • 8
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值