MATLAB GUI笔记(十):音频信号处理

这篇具有很好参考价值的文章主要介绍了MATLAB GUI笔记(十):音频信号处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

笔记十是音频信号处理,首先加载音频信号,分析其时频域,然后加入单频噪声干扰,最后选择滤波器进行滤波处理。

一、音频信号时频域分析

1. 打开GUI

选择Blank GUI,然后更改保存路径
MATLAB GUI笔记(十):音频信号处理

2. 点击1个面板和2个坐标区,然后拖动出来

MATLAB GUI笔记(十):音频信号处理

3. 双击面板查看它的属性

改变字体大小和显示内容
MATLAB GUI笔记(十):音频信号处理

4. 再拖动一个按钮

MATLAB GUI笔记(十):音频信号处理

5. 双击按钮查看它的属性

更改字体大小和显示内容
MATLAB GUI笔记(十):音频信号处理

6. 右键打开文件按钮,选择查看回调,点击callback

MATLAB GUI笔记(十):音频信号处理
注意:以下代码中的部分变量使用global,是全局变量,这样别的控件callback函数也能调用该变量。

global x;                                 % 信号的时域
global Fs;                                % 信号的采样频率
global tl;                                % 信号的时域坐标范围
global x2;                                % 信号的时域
% 获取文件的路径和名称,注意文件格式为.wav格式
[filename, pathname] = uigetfile('*.wav', '音频信号路径');
% 如果没有选择文件,则返回0,显示未选择文件
if isequal(filename,0)
   disp('未选择文件')
else
% 如果选择了文件,保存文件的路径
   path = fullfile(pathname, filename);   % 将文件的所处文件夹路径和文件名拼接成文件路径
   [handles.x,handles.Fs]=audioread(path);% 将文件读取出来,输出信号的时域和采样频率并保存在handle中
   x=handles.x;                           % 信号的时域
   Fs=handles.Fs;                         % 信号的采样频率
   axes(handles.axes1);                   % 将当前绘图区设置为axes1
   tl=[0:1/Fs:(length(handles.x)-1)/Fs];  % 信号时域波形的坐标范围,间隔为采样频率的倒数
   plot(tl,handles.x);                    % 绘制信号时域波形
   axis([-inf inf -1.2 1.2]);             % 坐标轴的范围
   title('音频信号时域波形');             % 标题
   xlabel('时间/s');                      % 横坐标标签
   ylabel('幅度');                        % 纵坐标标签
   grid on;                               % 网格线打开
   
   N=length(handles.x);                   % 信号的长度
   df=Fs/N;                               % 频谱分辨率
   w=[0:df:df*(N-1)] - Fs/2;              % 频谱范围,-fs/2至fs/2
   X=fft(handles.x);                      % 对信号做FFT
   X=fftshift(X);                         % 将FFT之后的频谱中心化,将0-fs频谱转换成-fs/2至fs/2频谱
   axes(handles.axes2);                   % 设置当前坐标区为axes2
   plot(w,abs(X)/max(abs(X)));            % 绘制信号频谱
   axis([-10000,10000,0,1]);              % 坐标轴范围
   title('音频信号频域波形');             % 标题
   xlabel('频率/Hz');                     % 横坐标标签
   ylabel('归一化幅度');                  % 纵坐标标签
   grid on;                               % 打开网格线
   x2=x;
end

7. 原始信号展示

MATLAB GUI笔记(十):音频信号处理
MATLAB GUI笔记(十):音频信号处理

二、播放音频和关闭音频

8. 拖动两个按钮

MATLAB GUI笔记(十):音频信号处理

9. 双击按钮查看它的属性

可以更改字体大小和显示内容
MATLAB GUI笔记(十):音频信号处理
MATLAB GUI笔记(十):音频信号处理

10. 右键播放音频按钮,选择查看回调,点击callback

MATLAB GUI笔记(十):音频信号处理

global x2;                      % 音频信号
global Fs;                      % 信号的采样频率
sound(x2,Fs);                   % 播放音频

11. 右键关闭音频按钮,选择查看回调,点击callback

MATLAB GUI笔记(十):音频信号处理

clear sound;                    % 关闭音频

三、加入单频干扰后的视频域分析

MATLAB GUI笔记(十):音频信号处理

13. 双击按钮和可编辑文本

查看属性并更改字体大小和显示内容
MATLAB GUI笔记(十):音频信号处理
MATLAB GUI笔记(十):音频信号处理

14. 右键加入单频噪声干扰按钮,查看回调,点击callback

MATLAB GUI笔记(十):音频信号处理

global x;                               % 信号时域波形
global Fs;                              % 信号采样频率
global tl;                              % 信号时域范围
global x2;                              % 信号时域波形
axes(handles.axes1);                    % 将当前坐标区设置为axes1
t=0:1/Fs:(length(x)-1)/Fs;              % 单频干扰信号的时域范围      
Au=0.07;                                % 单频干扰信号幅度
fn =  get(handles.edit1,'string');      % 获取输入的单频干扰频率值 
fn = str2double(fn);                    % 将string转换成double型
noise=Au*cos(2*pi*fn*t)';               % 单频干扰信号的波形,加转置是因为音频信号x是列向量,需要统一
x=x+noise;                              % 将音频信号和单频干扰相加
plot(tl,x);                             % 绘制加入噪声后音频信号时域波形
title('加入噪声后时域波形');            % 标题
xlabel('时间/s');                       % 横轴标签
ylabel('幅度');                         % 纵轴标签
grid on;                                % 打开网格线
N=length(x);                            % 信号长度
df=Fs/N;                                % 信号频谱分辨率
w=[0:df:df*(N-1)] - Fs/2;               % 信号频率范围
X=fft(x);                               % 对信号做FFT
X=fftshift(X);                          % 将0-fs频谱搬移到-fs/2-fs/2
axes(handles.axes2);                    % 将当前坐标区设置为axes2
plot(w,abs(X)/max(abs(X)));             % 绘制信号频谱
axis([-10000,10000,0,1]);               % 坐标轴范围
title('加入噪声后频域波形');            % 标题
xlabel('频率/Hz');                      % 横轴标签
ylabel('幅度');                         % 纵轴标签
grid on;                                % 打开网格线
x2=x;

15. 单频干扰信号展示

MATLAB GUI笔记(十):音频信号处理

四、滤波后信号时频域分析

16. 拖动3个坐标区、1个面板、4个单选按钮、4个按钮、2个静态文本和2个可编辑文本

MATLAB GUI笔记(十):音频信号处理

17 双击它们,更改字体大小和显示内容以及标签

面板
MATLAB GUI笔记(十):音频信号处理
单选按钮
MATLAB GUI笔记(十):音频信号处理
MATLAB GUI笔记(十):音频信号处理
MATLAB GUI笔记(十):音频信号处理
MATLAB GUI笔记(十):音频信号处理
按钮
MATLAB GUI笔记(十):音频信号处理
MATLAB GUI笔记(十):音频信号处理
MATLAB GUI笔记(十):音频信号处理
MATLAB GUI笔记(十):音频信号处理
静态文本
MATLAB GUI笔记(十):音频信号处理
MATLAB GUI笔记(十):音频信号处理
可编辑文本
MATLAB GUI笔记(十):音频信号处理
MATLAB GUI笔记(十):音频信号处理

18. 右键低通按钮,查看回调函数,点击callback

MATLAB GUI笔记(十):音频信号处理

global x;                           % 音频信号
global Fs;                          % 采样频率
global tl;                          % 音频信号时域范围
global x2;                          % 音频信号

x1=x;
fp =  get(handles.edit2,'string');  % 截止频率1   
fp =  str2double(fp)*2;             % 将截止频率转换成double,然后乘以2,乘以2是为了归一化化成数字频率
if get(handles.radiobutton1,'value')% 如果选中了第一个单选按钮,矩形窗按钮
    b2=fir1(30, fp/Fs, boxcar(31)); % 生成fir滤波器系统函数中分子多项式的系数
    % fir1函数三个参数分别是阶数,数字截止频率,滤波器类型
    % 这里是生成了30阶(31个抽头系数)的矩形窗滤波器
    axes(handles.axes3);            % 设置当前坐标区为axes3
    [h,w]=freqz(b2, 1,512);         % 生成fir滤波器的频率响应
    % freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512
    plot(w/pi*Fs/2,20*log(abs(h))); % 绘制滤波器的幅频响应
    xlabel('频率');                 % 横轴标签
    ylabel('幅度');                 % 纵轴标签
    title('滤波器频谱');            % 标题
    x1=fftfilt(b2,x1);              % 对信号进行滤波,x1是等待滤波的信号,b2是fir滤波器的系统函数的分子多项式系数
    elseif get(handles.radiobutton2,'value')% 如果选中了第二个单选按钮,三角窗按钮
    b2=fir1(30, fp/Fs, triang(31)); % 生成fir滤波器系统函数中分子多项式的系数
    % fir1函数三个参数分别是阶数,数字截止频率,滤波器类型
    % 这里是生成了30阶(31个抽头系数)的三角窗滤波器
    axes(handles.axes3);            % 设置当前坐标区为axes3
    [h,w]=freqz(b2, 1,512);         % 生成fir滤波器的频率响应
    % freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512
    plot(w/pi*Fs/2,20*log(abs(h))); % 绘制滤波器的幅频响应
    xlabel('频率');                 % 横轴标签
    ylabel('幅度');                 % 纵轴标签
    title('滤波器频谱');            % 标题
    x1=fftfilt(b2,x1);              % 对信号进行滤波,x1是等待滤波的信号,b2是fir滤波器的系统函数的分子多项式系数
    elseif get(handles.radiobutton3,'value')% 如果选中了第三个单选按钮,汉明窗按钮
    b2=fir1(30, fp/Fs, hamming(31));  % 生成fir滤波器系统函数中分子多项式的系数
    % fir1函数三个参数分别是阶数,数字截止频率,滤波器类型
    % 这里是生成了30阶(31个抽头系数)的汉明窗滤波器
    axes(handles.axes3);            % 设置当前坐标区为axes3
    [h,w]=freqz(b2, 1,512);         % 生成fir滤波器的频率响应
    % freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512
    plot(w/pi*Fs/2,20*log(abs(h))); % 绘制滤波器的幅频响应
    xlabel('频率');                 % 横轴标签
    ylabel('幅度');                 % 纵轴标签
    title('滤波器频谱');            % 标题
    x1=fftfilt(b2,x1);              % 对信号进行滤波,x1是等待滤波的信号,b2是fir滤波器的系统函数的分子多项式系数
    elseif get(handles.radiobutton4,'value')% 如果选中了第四个单选按钮,凯撒窗按钮
    b2=fir1(30,fp/Fs, kaiser(31));  % 生成fir滤波器系统函数中分子多项式的系数
    % fir1函数三个参数分别是阶数,数字截止频率,滤波器类型
    % 这里是生成了30阶(31个抽头系数)的凯撒窗滤波器
    axes(handles.axes3);            % 设置当前坐标区为axes3
    [h,w]=freqz(b2, 1,512);         % 生成fir滤波器的频率响应
    % freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512
    plot(w/pi*Fs/2,20*log(abs(h))); % 绘制滤波器的幅频响应
    xlabel('频率');                 % 横轴标签
    ylabel('幅度');                 % 纵轴标签
    title('滤波器频谱');            % 标题
    x1=fftfilt(b2,x1);              % 对信号进行滤波,x1是等待滤波的信号,b2是fir滤波器的系统函数的分子多项式系数
end;
axes(handles.axes4);                % 设置当前坐标区为axes4
plot(tl,x1);                        % 绘制滤波后的时域波形
title('滤波后时域波形');            % 标题
xlabel('时间/s');                   % 横轴标签
ylabel('幅度');                     % 纵轴坐标
axis([-inf,inf,-1.2,1.2]);          % 坐标轴范围
N=length(x1);                       % 时域波形长度
df=Fs/N;                            % 滤波后信号的频谱分辨率
w=[0:df:df*(N-1)] - Fs/2;           % 频率范围
X=fft(x1);                          % 对滤波后的信号做FFT
X=fftshift(X);                      % 将0-fs频谱,转换到-fs/2-fs/2频谱
axes(handles.axes5);                % 设置当前坐标区为axes4
plot(w,abs(X)/max(abs(X)));         % 绘制频谱
axis([-10000,10000,0,1]);           % 坐标轴范围
title('滤波后频谱');                % 标题
xlabel('频率/Hz');                  % 横轴标签
ylabel('幅度');                     % 纵轴坐标
grid on;                            % 打开网格线
x2=x1;

19. 同样,更改高通,带通和带阻的callback函数

高通

global x;                           % 音频信号
global Fs;                          % 采样频率
global tl;                          % 音频信号时域范围
global x2;                          % 音频信号

x1=x;
fp =  get(handles.edit2,'string');  % 截止频率1   
fp =  str2double(fp)*2;             % 将截止频率转换成double,然后乘以2,乘以2是为了归一化化成数字频率
if get(handles.radiobutton1,'value')% 如果选中了第一个单选按钮,矩形窗按钮
    b2=fir1(30, fp/Fs,'high',boxcar(31)); % 生成fir滤波器系统函数中分子多项式的系数
    % fir1函数四个参数分别是阶数、数字截止频率、类型、滤波器类型
    % 这里是生成了30阶(31个抽头系数)的矩形窗高通滤波器
    axes(handles.axes3);            % 设置当前坐标区为axes3
    [h,w]=freqz(b2, 1,512);         % 生成fir滤波器的频率响应
    % freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512
    plot(w/pi*Fs/2,20*log(abs(h))); % 绘制滤波器的幅频响应
    xlabel('频率');                 % 横轴标签
    ylabel('幅度');                 % 纵轴标签
    title('滤波器频谱');            % 标题
    x1=fftfilt(b2,x1);              % 对信号进行滤波,x1是等待滤波的信号,b2是fir滤波器的系统函数的分子多项式系数
    elseif get(handles.radiobutton2,'value')% 如果选中了第二个单选按钮,三角窗按钮
    b2=fir1(30, fp/Fs, 'high',triang(31)); % 生成fir滤波器系统函数中分子多项式的系数
    % fir1函数四个参数分别是阶数、数字截止频率、类型、滤波器类型
    % 这里是生成了30阶(31个抽头系数)的三角窗高通滤波器
    axes(handles.axes3);            % 设置当前坐标区为axes3
    [h,w]=freqz(b2, 1,512);         % 生成fir滤波器的频率响应
    % freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512
    plot(w/pi*Fs/2,20*log(abs(h))); % 绘制滤波器的幅频响应
    xlabel('频率');                 % 横轴标签
    ylabel('幅度');                 % 纵轴标签
    title('滤波器频谱');            % 标题
    x1=fftfilt(b2,x1);              % 对信号进行滤波,x1是等待滤波的信号,b2是fir滤波器的系统函数的分子多项式系数
    elseif get(handles.radiobutton3,'value')% 如果选中了第三个单选按钮,汉明窗按钮
    b2=fir1(30, fp/Fs,'high',hamming(31)); % 生成fir滤波器系统函数中分子多项式的系数
    % fir1函数四个参数分别是阶数、数字截止频率、类型、滤波器类型
    % 这里是生成了30阶(31个抽头系数)的汉明窗高通滤波器
    axes(handles.axes3);            % 设置当前坐标区为axes3
    [h,w]=freqz(b2, 1,512);         % 生成fir滤波器的频率响应
    % freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512
    plot(w/pi*Fs/2,20*log(abs(h))); % 绘制滤波器的幅频响应
    xlabel('频率');                 % 横轴标签
    ylabel('幅度');                 % 纵轴标签
    title('滤波器频谱');            % 标题
    x1=fftfilt(b2,x1);              % 对信号进行滤波,x1是等待滤波的信号,b2是fir滤波器的系统函数的分子多项式系数
    elseif get(handles.radiobutton4,'value')% 如果选中了第四个单选按钮,凯撒窗按钮
    b2=fir1(30,fp/Fs,'high',kaiser(31));  % 生成fir滤波器系统函数中分子多项式的系数
    % fir1函数四个参数分别是阶数、数字截止频率、类型、滤波器类型
    % 这里是生成了30阶(31个抽头系数)的凯撒窗高通滤波器
    axes(handles.axes3);            % 设置当前坐标区为axes3
    [h,w]=freqz(b2, 1,512);         % 生成fir滤波器的频率响应
    % freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512
    plot(w/pi*Fs/2,20*log(abs(h))); % 绘制滤波器的幅频响应
    xlabel('频率');                 % 横轴标签
    ylabel('幅度');                 % 纵轴标签
    title('滤波器频谱');            % 标题
    x1=fftfilt(b2,x1);              % 对信号进行滤波,x1是等待滤波的信号,b2是fir滤波器的系统函数的分子多项式系数
end;
axes(handles.axes4);                % 设置当前坐标区为axes4
plot(tl,x1);                        % 绘制滤波后的时域波形
title('滤波后时域波形');            % 标题
xlabel('时间/s');                   % 横轴标签
ylabel('幅度');                     % 纵轴坐标
axis([-inf,inf,-1.2,1.2]);          % 坐标轴范围
N=length(x1);                       % 时域波形长度
df=Fs/N;                            % 滤波后信号的频谱分辨率
w=[0:df:df*(N-1)] - Fs/2;           % 频率范围
X=fft(x1);                          % 对滤波后的信号做FFT
X=fftshift(X);                      % 将0-fs频谱,转换到-fs/2-fs/2频谱
axes(handles.axes5);                % 设置当前坐标区为axes4
plot(w,abs(X)/max(abs(X)));         % 绘制频谱
axis([-10000,10000,0,1]);           % 坐标轴范围
title('滤波后频谱');                % 标题
xlabel('频率/Hz');                  % 横轴标签
ylabel('幅度');                     % 纵轴坐标
grid on;                            % 打开网格线
x2=x1;

带通

global x;                           % 音频信号
global Fs;                          % 采样频率
global tl;                          % 音频信号时域范围
global x2;                          % 音频信号

x1=x;
fp =  get(handles.edit2,'string');  % 截止频率1   
fp =  str2double(fp)*2;             % 将截止频率转换成double,然后乘以2,乘以2是为了归一化化成数字频率
fs =  get(handles.edit3,'string');  % 截止频率2   
fs =  str2double(fs)*2;             % 将截止频率转换成double,然后乘以2,乘以2是为了归一化化成数字频率
if get(handles.radiobutton1,'value')% 如果选中了第一个单选按钮,矩形窗按钮
    b2=fir1(30, [fp/Fs fs/Fs], boxcar(31)); % 生成fir滤波器系统函数中分子多项式的系数
    % fir1函数三个参数分别是阶数,数字截止频率,滤波器类型
    % 这里是生成了30阶(31个抽头系数)的矩形窗带通滤波器
    axes(handles.axes3);            % 设置当前坐标区为axes3
    [h,w]=freqz(b2, 1,512);         % 生成fir滤波器的频率响应
    % freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512
    plot(w/pi*Fs/2,20*log(abs(h))); % 绘制滤波器的幅频响应
    xlabel('频率');                 % 横轴标签
    ylabel('幅度');                 % 纵轴标签
    title('滤波器频谱');            % 标题
    x1=fftfilt(b2,x1);              % 对信号进行滤波,x1是等待滤波的信号,b2是fir滤波器的系统函数的分子多项式系数
    elseif get(handles.radiobutton2,'value')% 如果选中了第二个单选按钮,三角窗按钮
    b2=fir1(30, [fp/Fs fs/Fs], triang(31)); % 生成fir滤波器系统函数中分子多项式的系数
    % fir1函数三个参数分别是阶数,数字截止频率,滤波器类型
    % 这里是生成了30阶(31个抽头系数)的三角窗带通滤波器
    axes(handles.axes3);            % 设置当前坐标区为axes3
    [h,w]=freqz(b2, 1,512);         % 生成fir滤波器的频率响应
    % freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512
    plot(w/pi*Fs/2,20*log(abs(h))); % 绘制滤波器的幅频响应
    xlabel('频率');                 % 横轴标签
    ylabel('幅度');                 % 纵轴标签
    title('滤波器频谱');            % 标题
    x1=fftfilt(b2,x1);              % 对信号进行滤波,x1是等待滤波的信号,b2是fir滤波器的系统函数的分子多项式系数
    elseif get(handles.radiobutton3,'value')% 如果选中了第三个单选按钮,汉明窗按钮
    b2=fir1(30, [fp/Fs fs/Fs], hamming(31));  % 生成fir滤波器系统函数中分子多项式的系数
    % fir1函数三个参数分别是阶数,数字截止频率,滤波器类型
    % 这里是生成了30阶(31个抽头系数)的汉明窗带通滤波器
    axes(handles.axes3);            % 设置当前坐标区为axes3
    [h,w]=freqz(b2, 1,512);         % 生成fir滤波器的频率响应
    % freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512
    plot(w/pi*Fs/2,20*log(abs(h))); % 绘制滤波器的幅频响应
    xlabel('频率');                 % 横轴标签
    ylabel('幅度');                 % 纵轴标签
    title('滤波器频谱');            % 标题
    x1=fftfilt(b2,x1);              % 对信号进行滤波,x1是等待滤波的信号,b2是fir滤波器的系统函数的分子多项式系数
    elseif get(handles.radiobutton4,'value')% 如果选中了第四个单选按钮,凯撒窗按钮
    b2=fir1(30,[fp/Fs fs/Fs], kaiser(31));  % 生成fir滤波器系统函数中分子多项式的系数
    % fir1函数三个参数分别是阶数,数字截止频率,滤波器类型
    % 这里是生成了30阶(31个抽头系数)的凯撒窗带通滤波器
    axes(handles.axes3);            % 设置当前坐标区为axes3
    [h,w]=freqz(b2, 1,512);         % 生成fir滤波器的频率响应
    % freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512
    plot(w/pi*Fs/2,20*log(abs(h))); % 绘制滤波器的幅频响应
    xlabel('频率');                 % 横轴标签
    ylabel('幅度');                 % 纵轴标签
    title('滤波器频谱');            % 标题
    x1=fftfilt(b2,x1);              % 对信号进行滤波,x1是等待滤波的信号,b2是fir滤波器的系统函数的分子多项式系数
end;
axes(handles.axes4);                % 设置当前坐标区为axes4
plot(tl,x1);                        % 绘制滤波后的时域波形
title('滤波后时域波形');            % 标题
xlabel('时间/s');                   % 横轴标签
ylabel('幅度');                     % 纵轴坐标
axis([-inf,inf,-1.2,1.2]);          % 坐标轴范围
N=length(x1);                       % 时域波形长度
df=Fs/N;                            % 滤波后信号的频谱分辨率
w=[0:df:df*(N-1)] - Fs/2;           % 频率范围
X=fft(x1);                          % 对滤波后的信号做FFT
X=fftshift(X);                      % 将0-fs频谱,转换到-fs/2-fs/2频谱
axes(handles.axes5);                % 设置当前坐标区为axes4
plot(w,abs(X)/max(abs(X)));         % 绘制频谱
axis([-10000,10000,0,1]);           % 坐标轴范围
title('滤波后频谱');                % 标题
xlabel('频率/Hz');                  % 横轴标签
ylabel('幅度');                     % 纵轴坐标
grid on;                            % 打开网格线
x2=x1;

带阻

global x;                           % 音频信号
global Fs;                          % 采样频率
global tl;                          % 音频信号时域范围
global x2;                          % 音频信号

x1=x;
fp =  get(handles.edit2,'string');  % 截止频率1   
fp =  str2double(fp)*2;             % 将截止频率转换成double,然后乘以2,乘以2是为了归一化化成数字频率
fs =  get(handles.edit3,'string');  % 截止频率2   
fs =  str2double(fs)*2;             % 将截止频率转换成double,然后乘以2,乘以2是为了归一化化成数字频率
if get(handles.radiobutton1,'value')% 如果选中了第一个单选按钮,矩形窗按钮
    b2=fir1(30, [fp/Fs fs/Fs],'stop', boxcar(31)); % 生成fir滤波器系统函数中分子多项式的系数
    % fir1函数三个参数分别是阶数,数字截止频率,滤波器类型
    % 这里是生成了30阶(31个抽头系数)的矩形窗带阻滤波器
    axes(handles.axes3);            % 设置当前坐标区为axes3
    [h,w]=freqz(b2, 1,512);         % 生成fir滤波器的频率响应
    % freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512
    plot(w/pi*Fs/2,20*log(abs(h))); % 绘制滤波器的幅频响应
    xlabel('频率');                 % 横轴标签
    ylabel('幅度/dB');              % 纵轴标签
    title('滤波器频谱');            % 标题
    x1=fftfilt(b2,x1);              % 对信号进行滤波,x1是等待滤波的信号,b2是fir滤波器的系统函数的分子多项式系数
    elseif get(handles.radiobutton2,'value')% 如果选中了第二个单选按钮,三角窗按钮
    b2=fir1(30, [fp/Fs fs/Fs],'stop', triang(31)); % 生成fir滤波器系统函数中分子多项式的系数
    % fir1函数三个参数分别是阶数,数字截止频率,滤波器类型
    % 这里是生成了30阶(31个抽头系数)的三角窗带阻滤波器
    axes(handles.axes3);            % 设置当前坐标区为axes3
    [h,w]=freqz(b2, 1,512);         % 生成fir滤波器的频率响应
    % freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512
    plot(w/pi*Fs/2,20*log(abs(h))); % 绘制滤波器的幅频响应
    xlabel('频率');                 % 横轴标签
    ylabel('幅度/dB');              % 纵轴标签
    title('滤波器频谱');            % 标题
    x1=fftfilt(b2,x1);              % 对信号进行滤波,x1是等待滤波的信号,b2是fir滤波器的系统函数的分子多项式系数
    elseif get(handles.radiobutton3,'value')% 如果选中了第三个单选按钮,汉明窗按钮
    b2=fir1(30, [fp/Fs fs/Fs],'stop', hamming(31));  % 生成fir滤波器系统函数中分子多项式的系数
    % fir1函数三个参数分别是阶数,数字截止频率,滤波器类型
    % 这里是生成了30阶(31个抽头系数)的汉明窗带阻滤波器
    axes(handles.axes3);            % 设置当前坐标区为axes3
    [h,w]=freqz(b2, 1,512);         % 生成fir滤波器的频率响应
    % freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512
    plot(w/pi*Fs/2,20*log(abs(h))); % 绘制滤波器的幅频响应
    xlabel('频率');                 % 横轴标签
    ylabel('幅度/dB');              % 纵轴标签
    title('滤波器频谱');            % 标题
    x1=fftfilt(b2,x1);              % 对信号进行滤波,x1是等待滤波的信号,b2是fir滤波器的系统函数的分子多项式系数
    elseif get(handles.radiobutton4,'value')% 如果选中了第四个单选按钮,凯撒窗按钮
    b2=fir1(30,[fp/Fs fs/Fs],'stop', kaiser(31));  % 生成fir滤波器系统函数中分子多项式的系数
    % fir1函数三个参数分别是阶数,数字截止频率,滤波器类型
    % 这里是生成了30阶(31个抽头系数)的凯撒窗带阻滤波器
    axes(handles.axes3);            % 设置当前坐标区为axes3
    [h,w]=freqz(b2, 1,512);         % 生成fir滤波器的频率响应
    % freqz函数的三个参数分别是滤波器系统函数的分子多项式的系数,分母多项式的系数(fir滤波器分母系数为1)和采样点数(默认)512
    plot(w/pi*Fs/2,20*log(abs(h))); % 绘制滤波器的幅频响应
    xlabel('频率');                 % 横轴标签
    ylabel('幅度/dB');              % 纵轴标签
    title('滤波器频谱');            % 标题
    x1=fftfilt(b2,x1);              % 对信号进行滤波,x1是等待滤波的信号,b2是fir滤波器的系统函数的分子多项式系数
end;
axes(handles.axes4);                % 设置当前坐标区为axes4
plot(tl,x1);                        % 绘制滤波后的时域波形
title('滤波后时域波形');            % 标题
xlabel('时间/s');                   % 横轴标签
ylabel('幅度');                     % 纵轴坐标
axis([-inf,inf,-1.2,1.2]);          % 坐标轴范围
N=length(x1);                       % 时域波形长度
df=Fs/N;                            % 滤波后信号的频谱分辨率
w=[0:df:df*(N-1)] - Fs/2;           % 频率范围
X=fft(x1);                          % 对滤波后的信号做FFT
X=fftshift(X);                      % 将0-fs频谱,转换到-fs/2-fs/2频谱
axes(handles.axes5);                % 设置当前坐标区为axes4
plot(w,abs(X)/max(abs(X)));         % 绘制频谱
axis([-10000,10000,0,1]);           % 坐标轴范围
title('滤波后频谱');                % 标题
xlabel('频率/Hz');                  % 横轴标签
ylabel('归一化幅度');               % 纵轴坐标
grid on;                            % 打开网格线
x2=x1;

20. 结果展示

MATLAB GUI笔记(十):音频信号处理文章来源地址https://www.toymoban.com/news/detail-488632.html

到了这里,关于MATLAB GUI笔记(十):音频信号处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Matlab信号处理笔记

    寒假开始学习基于MATLAB的信号处理。学习教材: 以此博客来记录 Matlab基本函数-fix函数 与C语言的switch-case语句不同的是,在MATLAB语言中,当其中一个case语句后的条件为真时,switch-case语句不对其后的case语句进行判断,也就是说在MATLAB语言中,即使有多条case判断语句为真,也

    2024年02月07日
    浏览(57)
  • 【老生谈算法】基于matlab时域频域处理的语音信号变声处理系统设计与算法原理(论文+程序源码+GUI图形用户界面)——变声算法

    大家好,今天给大家介绍基于matlab的语音信号变声处理系统设计与算法原理(论文+程序源码)。 运用matlab软件实现对声音的变声处理,利用离散付里叶变换进行频谱分析;设计数字滤波器组;通过时域和频域方法做出各种音效效果,实现变速(慢放、快放),变调(频谱左

    2024年02月04日
    浏览(62)
  • MATLAB信号处理与应用 读书笔记 一

    完成了基本操作,今天组数也正常,需要对应解决fsctrl文件中的信号处理相关 重点关注4傅里叶变换,6FIR滤波器,10信号处理中的应用 字符的链接[\\\'aa\\\',\\\'bb\\\']; FFT用DFT原理,理解起来还是吃力 FFT绘图部分,原信号: 叠加上随机噪声 plot画图,画连续的也需要进行点数离散化,点

    2024年02月04日
    浏览(43)
  • 数字信号处理翻转课堂笔记17——窗函数法设计FIR滤波器及matlab实现

    对应教材:《数字信号处理(第五版)》西安电子科技大学出版社,丁玉美、高西全著 (1)窗函数法设计FIR线性相位滤波器的原理; (2)加窗效应:加窗对滤波器特性的影响(难点); (3)典型窗函数及其主要特性和参数(重点); (4)窗函数法设计FIR滤波器的步骤(

    2024年01月16日
    浏览(53)
  • FPGA 音频信号处理

    第八届集创赛杯赛题目——紫光同创杯 - 全国大学生集成电路创新创业大赛 题目任务要求:采集信号、降噪、识别、视频展示。 硬件:麦克风、扬声器、FPGA(盘古50)、HDMI显示器 软件:紫光同创PDS(用于部署)、anaconda、jupyter(用于部署训练网络) 1.麦克风采集好数据经过

    2024年03月14日
    浏览(55)
  • 音频信号处理库librosa

    参考: 1. librosa官网 2. librosa语音信号处理 3. 语音信号处理库 ——Librosa 4. librosa音频处理教程 5. Python音频信号处理库函数librosa介绍

    2024年02月05日
    浏览(46)
  • 【FPGA-DSP】第九期:音频信号处理

    从本文开始将记录一些简单的 音频信号处理算法 在System Generator中的实现方法。本文将介绍如何搭建音频信号的采集与输出模型。 音频信号属于一维信号,一些基本概念如下: 采样频率:根据奈奎斯特采样定理,采样频率Fs应该不低于声音信号中最高频率2倍。常见的音频格

    2024年02月01日
    浏览(53)
  • 聊聊音频信号处理中一个不太起眼的算法-limiter

    本文对笔者关于音频信号处理中的 Limiter 的理解作以记录。如有表述不当之处欢迎批评指正。欢迎任何形式的转载,但请务必注明出处。 由于工作上的需要,笔者花了一周左右的时间对 limiter (它属于动态范围控制器里面的一种算法,动态范围控制器包括 compressor, expander,

    2024年02月21日
    浏览(63)
  • 嵌入式操作教程_数字信号处理_音频编解码:3-6 AAC音频解码实验

    了解AAC音频格式,掌握AAC音频解码的原理,并实现将AAC格式的音频解码为PCM 音频编解码的主要对象是音乐和语音,音频的编解码格式可分为无压缩的格式、无损压缩格式、有损音乐压缩格式、有损语音压缩格式和合成算法。本实验中使用的AAC格式属于有损音乐压缩格式。音频

    2024年04月15日
    浏览(67)
  • Matlab信号处理1:模拟去除信号噪声

    一个简单的示例: 设计Matlab程序,去掉左图信号中大于20Hz的频率,使其变为右图。 注: 1. 第85行低通滤波器的设计需要在命令行窗口输入 filterDesigner 以打开滤波器设计窗口,如下图: 在窗口中设置如下红框中主要参数,然后点击 设计滤波器 : 生成成后,会出现粉框中的

    2024年02月09日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包