• 【信号处理】Matlab实现语音变速变调


    1 内容介绍

    一种实现声音变速变调的系统,该系统由以下4个部分组成:输入缓存模块,将待处理声音信号数据读入缓存;变调处理模块,对声音信号进行变调处理以改变声音的音调;变速不变调处理模块,对声音信号进行变速不变调处理,以改变语速但音调不变;数据输出模块,把上述变速变调信号输出.变速不变调处理模块包括分割数据模块,采用窗口函数,根据变速系数从原始语音信号中提取出一串信号子系列(即小段声音);和连接数据模块,将这些信号子系列按它们的时间先后顺序连接起来就得到变速不变调信号.​

    2 部分代码

    %

    % ct1

    clear all,close all, clc;

        % 定义常数

        FL = 80;                % 帧长

        WL = 240;               % 窗长

        P = 10;                 % 预测系数个数

        [s,fs] = wavread('sunday_2.wav');             % 载入语音s

    s = s/max(s); %归一化

        L = length(s);          % 读入语音长度

        FN = floor(L/FL)-2;     % 计算帧数

        

    % 预测和重建滤波器

        exc = zeros(L,1);       % 激励信号(预测误差)

        zi_pre = zeros(P,1);    % 预测滤波器的状态

        s_rec = zeros(L,1);     % 重建语音

        zi_rec = zeros(P,1);

        

    % 合成滤波器

        exc_syn = zeros(L,1);   % 合成的激励信号(脉冲串)

        s_syn = zeros(L,1);     % 合成语音

    last_syn = 0;   %存储上一个(或多个)段的最后一个脉冲的下标

    zi_syn = zeros(P,1);   % 合成滤波器的状态

        

    % 变调不变速滤波器

        exc_syn_t = zeros(L,1);   % 合成的激励信号(脉冲串)

        s_syn_t = zeros(L,1);     % 合成语音

    last_syn_t = 0;   %存储上一个(或多个)段的最后一个脉冲的下标

    zi_syn_t = zeros(P,1);   % 合成滤波器的状态

        

    % 变速不变调滤波器(假设速度减慢一倍)

    v=.5;

        exc_syn_v = zeros(v\L,1);   % 合成的激励信号(脉冲串)

        s_syn_v = zeros(v\L,1);     % 合成语音

    last_syn_v = 0;   %存储上一个(或多个)段的最后一个脉冲的下标

    zi_syn_v = zeros(P,1);   % 合成滤波器的状态

        hw = hamming(WL);       % 汉明窗

        

    yn1_t,zi_syn_t);

    exc_syn_t((n-1)*FL+1:n*FL) =  exc_syn1_t;   %计算得到的合成激励

    s_syn_t((n-1)*FL+1:n*FL) = s_syn1_t;   %计算得到的合成语音

    last_syn_t = last_syn_t+PT1*floor((n*FL-last_syn_t)/PT1);

            

        end

        % (6)  s ,exc 和 s_rec 的区别

    figure;

    subplot(3,1,1), plot(exc), xlabel('n (samples)'), ylabel('Amplitude'), title('激励信号');

    subplot(3,1,2), plot(s), xlabel('n (samples)'), ylabel('Amplitude'), title('原语音信号');

    subplot(3,1,3), plot(s_rec), xlabel('n (samples)'), ylabel('Amplitude'), title('重建语音信号');

    figure;

    subplot(3,1,1), plot(exc), xlabel('n (samples)'), ylabel('Amplitude'), title('激励信号'), xlim([15*FL+1,16*FL]);

    subplot(3,1,2), plot(s), xlabel('n (samples)'), ylabel('Amplitude'), title('原语音信号'), xlim([15*FL+1,16*FL]);

    subplot(3,1,3), plot(s_rec), xlabel('n (samples)'), ylabel('Amplitude'), title('重建语音信号'), xlim([15*FL+1,16*FL]);

    sound(exc);

    pause(2);

        sound(s);

        pause(2);

    sound(s_rec);

    pause(2);

      %原始语音与合成语音的差别

    figure;

    subplot(3,1,1), plot(exc_syn), xlabel('n (samples)'), ylabel('Amplitude'), title('合成激励信号');

    subplot(3,1,2), plot(s), xlabel('n (samples)'), ylabel('Amplitude'), title('原语音信号');

    subplot(3,1,3), plot(s_syn), xlabel('n (samples)'), ylabel('Amplitude'), title('合成语音信号');

    sound(s);

        pause(2);

    sound(s_syn);

    pause(2);

    %变速不变调

    figure;

    subplot(3,1,1), plot(exc_syn_v), xlabel('n (samples)'), ylabel('Amplitude'), title('合成慢速激励信号') ,xlim([0,length(exc_syn_v)]);

    subplot(3,1,2), plot(s), xlabel('n (samples)'), ylabel('Amplitude'), title('原语音信号'), xlim([0,length(s)]);

    subplot(3,1,3), plot(s_syn_v), xlabel('n (samples)'), ylabel('Amplitude'), title('合成慢速语音信号'), xlim([0,length(s_syn_v)]);

    sound(s);

        pause(2);

    sound(s_syn_v);

    pause(4);

       %变调不变速

    figure;

    subplot(3,1,1), plot(exc_syn_t), xlabel('n (samples)'), ylabel('Amplitude'), title('合成高调激励信号') ,xlim([0,length(exc_syn_t)]);

    subplot(3,1,2), plot(s), xlabel('n (samples)'), ylabel('Amplitude'), title('原语音信号'), xlim([0,length(s)]);

    subplot(3,1,3), plot(s_syn_t), xlabel('n (samples)'), ylabel('Amplitude'), title('合成高调语音信号'), xlim([0,length(s_syn_t)]);

    sound(s);

        pause(2);

    sound(s_syn_t);

    3 运行结果

    4 参考文献

    [1]刘盛举, 郝桂堂, 周琴. 一种实现声音变速不变调方法及变速变调系统:, CN 101740034 A[P].

    博主简介:擅长智能优化算法神经网络预测信号处理元胞自动机图像处理路径规划无人机雷达通信无线传感器等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

    部分理论引用网络文献,若有侵权联系博主删除。

  • 相关阅读:
    剖析一下"抢茅台"脚本底层逻辑
    达梦数据库sql中with语句的使用
    淘宝API接口介绍
    ubuntu22.04 server安装
    【深度学习】U-net网络结构搭建 | pytorch
    CentOS7安装MySQL8(Red Hat版)
    流数据湖平台Apache Paimon(一)概述
    PDF压缩文件怎么压缩?两分钟让你学会三种方法
    Shell编程规范与变量使用
    个人开发笔记
  • 原文地址:https://blog.csdn.net/matlab_dingdang/article/details/126693500