【数字信号处理】MATLAB OLA(Overlap-Add)实现变调不变速/变速不变调

这篇具有很好参考价值的文章主要介绍了【数字信号处理】MATLAB OLA(Overlap-Add)实现变调不变速/变速不变调。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在做数字信号处理实验的大作业~发现很多变调不变速/变速不变调的文章都讲的没有很清楚,记录一下自己看了很多文章之后整理的思路。

最终大作业
【【科技】 MATLAB鬼畜之小狗唱歌 | |数字信号处理实验大作业-哔哩哔哩】

第一步:分帧加窗

【数字信号处理】MATLAB OLA(Overlap-Add)实现变调不变速/变速不变调

分帧:

设每一帧长度为 N N N个点,总长度为 L L L个点
每一帧与前一帧有 H a H_a Ha个点的非重叠部分,这个 H a H_a Ha并不大。
设原信号为y,则第n帧信号取自
y ( ( ( n − 1 ) × H a ) : ( ( n − 1 ) × H a + N − 1 ) ) y( ((n-1)\times H_a):((n-1)\times H_a+N-1)) y(((n1)×Ha):((n1)×Ha+N1))
比如第一帧就是 y ( 1 : N ) y(1:N) y(1:N),第二帧就是 y ( H a : H a + N − 1 ) y(H_a:H_a+N-1) y(Ha:Ha+N1)

如果我们把信号按一模一样的方式重组,设重组完的信号为 y 1 y_1 y1,即将第一帧按顺序填入 y 1 ( 1 : N ) y_1(1:N) y1(1:N),第二帧填入 y 1 ( H a : H a + N − 1 ) y_1(H_a:H_a+N-1) y1(Ha:Ha+N1),整体信号信息不会发生变化,只是幅度有变,但没有大的影响。

如果重组时微调非重叠部分的间距,信号信息也不会有很大的改变,只是声音速度变慢了,但频率不变,所以通过改变重组时的非重叠部分可以改变速度,实现变速不变调。

加窗:

如果直接按分好的帧重组,相当于给原信号加了一个矩形窗,会造成一些频谱泄露,影响输出信号的效果,所以加一个汉宁窗~

代码:(enframe为MATLAB的voicebox中一个函数,可以实现很方便的分帧加窗~,这里加了一个汉宁窗,以减少频谱泄露的影响,)

第二步:调整非重叠部分长度

【数字信号处理】MATLAB OLA(Overlap-Add)实现变调不变速/变速不变调
前文提到,调整非重叠部分长度对信号信息没有很大影响,但可以调整速度。所以我们在重组信号时调整好非重叠部分长度就可以实现调整速度了~

function [Y,Fs] = speedchange(y,fs,alpha)
L=length(y);%音频信号长度
N=0.05*fs;%取50ms为每一帧的长度
N=floor(N);
Ha=floor(N*0.25);
Hs=floor(Ha*alpha);
%给定synthesis hopsize-Hs和α来确定analysis hopsize-Ha
tempy=enframe(y,hanning(N),Ha);%分帧加窗,得到每一帧的系数
%Ha为分帧加窗时非重叠部分点数,Hs为重组成新的信号时的非重叠部分点数
%加汉宁窗,减弱音爆(矩形窗会有更严重的信号突变)
nf=fix((L-N+Ha)/Ha);%帧数
y1=zeros(1,(nf-1)*Hs+N);%构造输出信号,新建一个0矩阵用于存放输出信号
%总时长(nf-1)*Hs+N=((L-N+Ha)/Ha-1)*Hs+N=(L-N)*Hs/Ha+N=(L-N)*alpha+Hs
y1(1:N)=tempy(1,:);%第一帧加入输出信号中
for i=1:nf-1
    y1(1+i*Hs:i*Hs+N)=y1(1+i*Hs:i*Hs+N)+tempy(i+1,1:N);%重组成输出信号
end
%用OLA法得到输出信号
Y=y1;
Fs=fs;
end

系数 α \alpha α与最终信号时间的关系推导:
帧数 n f = ( L + H a − N ) / H a n_f=(L+H_a-N)/H_a nf=(L+HaN)/Ha
重组完的信号点数
L 2 = ( n f − 1 ) ∗ H s = [ ( L + H a − N ) / H a − 1 ] × H s + N = ( L − N ) / H a × H s + N = ( L − N ) × α + N ≈ α L L2=(n_f-1)*H_s=[(L+H_a-N)/H_a-1]\times H_s +N=(L-N)/H_a\times H_s+N=(L-N) \times \alpha +N \approx \alpha L L2=(nf1)Hs=[(L+HaN)/Ha1]×Hs+N=(LN)/Ha×Hs+N=(LN)×α+NαL

就可以实现变速不变调啦~

变调不变速只需要改变采样频率重采样即可~可以使用resample函数改变采样率。

↓将采样率为Fs的音频采样率改为fs

Y=outwav;
Fs=fs*alpha;
[P,Q] = rat(fs/Fs);
Y = resample(Y,P,Q);
Fs=fs;

有兴趣的朋友也可以看看相位声码器文章来源地址https://www.toymoban.com/news/detail-487673.html

到了这里,关于【数字信号处理】MATLAB OLA(Overlap-Add)实现变调不变速/变速不变调的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 信号处理之FIR数字滤波器(Matlab仿真)

            数字滤波器的作用是滤除不感兴趣的信号,留下想要的信号。数字滤波器可分为无限脉冲响应(IIR)数字滤波器、有限脉冲响应(FIR)数字滤波器两种,两者各有优缺点,其中FIR数字滤波器因其具有良好的线性相位特性受到广泛应用,线性相位是指信号中各频率成分的相对

    2024年02月03日
    浏览(40)
  • 数字信号处理实验---LSI系统的分析 Matlab代码

    1.试用Matlab计算其幅频特性和相频特性,并绘图。 代码: n = 0:10; %定义采样点n w = [0:1:500]*2*pi/500; % [0,pi]轴被分成1002个点 x1 = power(0.9*exp(1i*pi/3),n); %定义输入序列 x2 = exp(-1i*n); %定义一个系统的冲激响应 x = zeros(1,length(w)); %定义空数组存储系统的频域响应 for i=1:length(x1)     x=x

    2024年01月15日
    浏览(35)
  • matlab数字信号处理实验(5)时域采样与频域采样

    一、实验目的 1、理解时域采样理论与频域采样理论; 2、掌握模拟信号采样前后频谱的变化,以及如何选择采样频率才能使采样后的信号 不丢失信息; 3、掌握频率域采样会引起时域周期化的原因,频率域采样定理及其对频域采样点数 选择的指导作用; 4、对信号在某个表示

    2024年02月07日
    浏览(33)
  • 【数字化处理】仿生假体控制中肌电信号的数字化处理研究(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码及文献 文献

    2024年02月12日
    浏览(36)
  • 数字信号处理-10-并行FIR滤波器MATLAB与FPGA实现

    本文介绍了设计滤波器的FPGA实现步骤,并结合杜勇老师的书籍中的并行FIR滤波器部分进行一步步实现硬件设计,对书中的架构做了复现以及解读,并进行了仿真验证。 FIR滤波器的结构形式时,介绍了直接型、级联型、频率取样型和快速卷积型4种。在FPGA实现时,最常用的是最

    2023年04月09日
    浏览(39)
  • 数字信号处理篇之浮点数与定点数的转换(MATLAB)

      对于计算机等数字信号处理器件,数字和信号变量都是用二进制进行表示的。在本文中,我们学习了定点数的概念、浮点数与定点数的转换以及在MATLABZ中实现浮点数与定点数的转换。   对于二进制数,大家应该都很熟悉,在学习数电的过程中,我们知道,十进制转二

    2024年02月11日
    浏览(47)
  • 数字信号处理实验---Z变换及系统的零极点分析 Matlab代码

    一.各种函数的用法 1.tf2zp函数:通常用于将传递函数(Transfer Function)转换为零极增益形式(ZPK form),转换前G(s) = num(s) / den(s),转换后G(s) = K * (s - z1) * (s - z2) * ... * (s - zn) / (s - p1) * (s - p2) * ... * (s - pn) 2.zp2tf函数:用于将零极增益形式(ZPK form)转换为传递函数(Transfer Fu

    2024年01月23日
    浏览(37)
  • 数字信号处理音频FIR去噪滤波器(基于MATLAB GUI的开发)

    利用MATLAB GUI设计平台,用窗函数法设计FIR数字滤波器,对所给出的含有噪声的声音信号进行数字滤波处理,得到降噪的声音信号,进行时域频域分析,同时分析不同窗函数的效果。将文件解压至一个目录下,运行m文件即可使用。 读取.wav音频文件函数 :audioread();(老版

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

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

    2024年01月16日
    浏览(41)
  • 【MATLAB】【数字信号处理】产生系统的单位冲激响应h(t)与H(z)零极点分布

    产生 h(t) 与 H(z) 零极点分布 微机,仿真软件MATLAB 2022a 程序如下: 运行结果如下: 代码如下: 运行结果如下:

    2024年01月19日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包