文章目录

  • 1. 频域滤波
  • 2. 时域滤波
  • Matlab 所用函数解释:

1. 频域滤波

% https://ccrma.stanford.edu/~jos/parshl/Overlap_Add_Synthesis.html
function overlap_add_synthesisclose all;infile = 'P501_C_chinese_f1_FB_48k.wav';infile = 'P501_C_chinese_m1_FB_48k.wav';outfile = regexprep(infile, '\.wav', '_20200527_new.wav');[data, fs] = audioread(infile); % 384000, 48k%%figure;plot(data);title('原始信号时域');xlabel('t/s');ylabel('幅度');%%frame_length = 1024;frame_shift = 512;frame_overlap = frame_length - frame_shift;fftsize = 2^nextpow2(frame_length);% hamming windows: sqrt would make the values larger, periodicanalysis_window = sqrt(hamming(frame_length, 'periodic'));
%     analysis_window = ones(frame_length, 1);  square windowssynthesis_window = analysis_window;% 1024 * 749 (frame_length * num_frames)x = buffer(data, frame_length, frame_overlap, 'nodelay'); % 'nodelay' means start from zero, withour padding% Analysis windowing: (1024, 749) * (1024,1) could be multiplied by .*x_anawin = x.*repmat(analysis_window(:), [1, size(x, 2)]); % To frequency-domainX = fft(x_anawin, fftsize); %  default: fft(x_anawin, fftsize, 1);figure;f = linspace(-24000, 24000, 1024);plot(abs(X));title('原始信号频域');xlabel('f/Hz');ylabel('幅度');%%% Modify the spectrum X here% generate filter, i.e., (1024, 1)x_f=[0, 1000, 2000, 3500, 24000]; y_f=[1, 0.98, 0.7, 0.55, 0.1];% 1 means DC offset, X(k) should equal X(1026-k), thus X(513) is the% center, X(512) = X(514), X(2) = X(1024), X(1) = DC offset.xx=1:48000/1024:48000/1024*513; fil=interp1(x_f,y_f,xx,'cubic');% [513, 1026] 513 points, while X(513) and X(last) should be removed,% since X(513) is contained in fil, X(last) is not used(X(0) has no synmetric point)fil2=fliplr(fil);fil2(1) = [];fil2(512) = [];fil = [fil fil2];figure;plot(fil);X = X.* fil';
%   X = X.* 0.2; figure;plot(f, abs(X));
%     X(1:513,:) = X(1:513,:) * 0.2;%%% To time-domainy = ifft(X);% Synthesis windowingy_synwin = y.* repmat(synthesis_window(:), [1, size(y, 2)]);% Overlap-addy_ola = y_synwin(:, 1);for i = 2:size(y_synwin, 2)y_ola(end+(1:frame_shift)) = zeros(frame_shift, 1);y_ola(end+(-frame_length+1:0)) = y_ola(end+(-frame_length+1:0)) + y_synwin(:, i);end% Outputaudiowrite(outfile, y_ola, fs);end

对应的原始时域信号、频域信号、滤波器、滤波后的频域信号分别为:



用adobe audition查看,即可看到频率被减小了,即实现了高通滤波器。
注:红色为原来的频率,黄色为滤波后的。

2. 时域滤波

f1=5;%第一个点频信号分量频率
f2=15;%第二个点频信号分量频率
fs=100;%采样率
T=2;%时宽
B=10;%FIR截止频率
n=round(T*fs);%采样点个数
t=linspace(0,T,n);
y1= cos(2*pi*f1*t);
y2=cos(2*pi*f2*t);
y=y1+y2;%%
figure;
plot(t,y);
title('原始信号时域');
xlabel('t/s');
ylabel('幅度');figure;
plot(t,y1);
title('原始信号时域');
xlabel('t/s');
ylabel('幅度');figure;
plot(t,y2);
title('原始信号时域');
xlabel('t/s');
ylabel('幅度');%%
figure;
fft_y=fftshift(fft(y));
f=linspace(-fs/2,fs/2,n);
plot(f,abs(fft_y));
title('原始信号频谱');
xlabel('f/Hz');
ylabel('幅度');
axis([ 0 50 0 100]);figure;
fft_y=fftshift(fft(y1));
f=linspace(-fs/2,fs/2,n);
plot(f,abs(fft_y));
title('原始信号y1频谱');
xlabel('f/Hz');
ylabel('幅度');
axis([ 0 50 0 100]);figure;
fft_y=fftshift(fft(y2));
f=linspace(-fs/2,fs/2,n);
plot(f,abs(fft_y));
title('原始信号y2频谱');
xlabel('f/Hz');
ylabel('幅度');
axis([ 0 50 0 100]);%%
b=fir1(80, B/(fs/2),'high');                    %滤波产生指定带宽的噪声信号
figure;
freqz(b);%%y_after_fir=filter(b,1,y);%%figure;plot(t,y_after_fir);title('滤波后信号时域');xlabel('t/s');ylabel('幅度');fft_y1=fftshift(fft(y_after_fir));figure;f=linspace(-fs/2,fs/2,n);plot(f,abs(fft_y1));title('滤波后信号频谱');xlabel('f/Hz');ylabel('幅度');axis([ 0 50 0 100]);

具体滤波结果如下图

Matlab 所用函数解释:

  1. regexprep(infile, ‘.wav’, ‘_20200527_new.wav’): 字符串替换,输入为原始字符串,需替换的字符串,及去替换的字符串; 输出为替换后的字符串。
  2. audioread(infile): 读取wav文件,输入为文件路径加文件名,输出为归一化后的sample值和采样率fs。
  3. plot(data):画图
  4. ^: 次方,如2的3次方为:2 ^ 3
  5. nextpow2(num): 比输入的数据大一点的2的幂次方,如输入15,则返回 4。注:只有nextpow2没有nextpow3及其它的。
  6. sqrt(num): 开方
  7. hamming(frame_length, ‘periodic’):汉明窗,HAMMING(N) returns the N-point symmetric Hamming window in a column vector. HAMMING(N,SFLAG) generates the N-point Hamming window using SFLAG window sampling. SFLAG may be either ‘symmetric’ or ‘periodic’. By default, a symmetric window is returned.
  8. buffer(data, frame_length, frame_overlap, ‘nodelay’):将数据存成矩阵,
    • Y = BUFFER(X,N) partitions signal vector X into nonoverlapping data
      % segments (frames) of length N.
    • Y = BUFFER(X,N,P) specifies an integer value P which controls the amount of overlap or underlap in the buffered data frames.
      % - If P>0, there will be P samples of data from the end of one frame (column) that will be repeated at the start of the next data frame.
      % - If P<0, the buffering operation will skip P samples of data after each frame, effectively skipping over data in X, and thus reducing the buffer “frame rate”.
      % - If empty or omitted, P is assumed to be zero (no overlap or underlap).
    • Y = BUFFER(X,N,P,OPT) specifies an optional parameter OPT used in the case of overlap or underlap buffering.
      % - If P>0 (overlap), OPT specifies an initial condition vector with length equal to the overlap, P. If empty or omitted, the initial condition is assumed to be zeros(P,1). Alternatively, OPT can be set to ‘nodelay’ which removes initial conditions from the output and starts buffering at the first data sample in X.
      % - If P<0 (underlap), OPT specifies a scalar offset indicating the number of initial data samples in X to skip. The offset must be in the range [0, -P], where P<0. If empty or omitted, the offset is zero.

【音频处理】之 Matlab 实现信号的时域和频域的滤波相关推荐

  1. 用matlab验证时域卷积,用MATLAB实现信号的时域卷积

    用MATLAB实现信号的时域卷积 用 MATLAB 实现信号的时域卷积摘要:利用抽样方法绘制连续信号和离散信号.编制函数计算连续时间信号,离散时间信号的卷积.关键字:MATLAB:离散卷积:连续卷积实 ...

  2. 时序信号的时域、频域、时-频域特征提取

    文章目录 时域特征提取 频域特征提取 时-频域特征提取 参考资料 在面对工业中的传感器采集到的高维的信号,如振动信号,通常需要对数据进行统计特征提取,以进行降维.对于这类时序信号,常用的有时域.频域和 ...

  3. 【语音信号处理】1语音信号可视化——时域、频域、语谱图、MFCC详细思路与计算、差分

    基本语音信号处理操作入门 1. 数据获取 2. 语音信号可视化 2.1 时域特征 2.2 频域特征 2.3 语谱图 3. 倒谱分析 4. 梅尔系数 4.1 梅尔频率倒谱系数 4.2 Mel滤波器原理 ...

  4. 机械振动信号 常见时域、频域特征提取 Python 代码

    ''' ============== 特征提取的类 ===================== 时域特征 :11类 频域特征 : 13类 总共提取特征 : 24类参考文献 英文文献 016_C_(Q1 ...

  5. 信号的时域和频域特性的区别到底是什么?

    不严谨的说,时域和频域分析就是在不同的空间看待问题的,不同空间所对应的原子(基函数)是不同的.你想一下时域空间的基函数是什么?频域空间的基函数是什么?一般的时-频联合域空间的基函数是什么?小波域空间的 ...

  6. 一图看懂:信号的时域、频域、相位 ​​​​

    值得说明的是相位谱:如下两图,相位谱是从上往下看,距离穿过时间0点的频率轴最近的波峰(红点),投影到下平面(投影点用粉点表示),将投影得到的时间差依次除以所在频率的周期,再乘以2π(整周相位),就得到 ...

  7. 《MATLAB语音信号分析与合成(第二版)》:第10章 语音信号的合成算法

    <MATLAB语音信号分析与合成(第二版)>:第10章 语音信号的合成算法 前言 1. 数据与函数路径设置 2. MATLAB仿真一:重叠相加法语音合成 3. MATLAB仿真二:重叠存储 ...

  8. 幅度调制信号 matlab,《利用MATLAB实现信号的幅度调制与解调.doc

    <利用MATLAB实现信号的幅度调制与解调 课程设计论文 姓名:姜勇 学院:机电与车辆工程学院 专业:电子信息工程2班 学号:1665090208 安徽科技学院 学年第 学期 < > ...

  9. 《MATLAB语音信号分析与合成(第二版)》:第4章 语音信号的线性预测分析

    <MATLAB语音信号分析与合成(第二版)>:第4章 语音信号的线性预测分析 前言 1. 数据与函数路径设置 2. MATLAB仿真一:LPC的频谱分析 3. MATLAB仿真二:普通预测 ...

  10. 《MATLAB语音信号分析与合成(第二版)》:第8章 基音周期的估算方法

    <MATLAB语音信号分析与合成(第二版)>:第8章 基音周期的估算方法 前言 1. 数据与函数路径设置 2. MATLAB仿真一:基音周期提取的预处理 3. MATLAB仿真二:倒谱法的 ...

最新文章

  1. python 播放 wav 文件
  2. Java Web开发乱码问题
  3. MFC获取文字高宽设置字符间隔
  4. java中replace()和replaceAll()区别
  5. 图形化界面客户端连接phoenix操作hbase
  6. as模拟器文件夹路径_EGG Switch手机模拟器怎么用?中文教程来了......
  7. Node.js:模块查找,引用及缓存机制
  8. 苹果与阿拉斯加航空公司合作 采用iPad Pro进行自助值机登机
  9. 使用 setTimeout 实现 setInterval
  10. 教你如何监控 Apache?
  11. 山寨Facebook的Shimmer效果
  12. .Net时间运算 - DateTime类,TimeSpan类
  13. 【emWin】例程十:bmp图片显示
  14. Python字典对象实现原理
  15. 经过几天的努力,出了 2 本保姆级编程电子书!
  16. cf C. Counting Kangaroos is Fun
  17. 安装libtiff3.6
  18. mac 配置自动代理,通过pac文件
  19. 2.5 Bro脚本入门
  20. 3D结构光投影测量软件 / 界面 (基于QT)

热门文章

  1. 基于MATLAB的疲劳检测
  2. java 内置中介模式_详解Java设计模式编程中的中介者模式
  3. 智能建筑现状及发展趋势,建筑智能化的发展趋势
  4. java 代码打包_Java程序打包成jar包
  5. 【微信小程序】使用vant组件库(count-down)实现倒计时
  6. Java复习 思维导图
  7. (转)Hinton、LeCun和Bengio——深度学习综述
  8. 增值税下调对财务软件的影响
  9. 3DMine安装教程(附详细图文安装步骤)
  10. VB 注册ocx控件的方法