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

本文介绍了一种使用Matlab实现的声音变速变调系统,包括变调处理、变速不变调处理等模块。通过窗口函数提取信号子系列,并进行连接以实现变速不变调。代码示例展示了对语音信号的处理过程,包括原始语音、重建语音和合成语音的对比,以及变速不变调后的语音效果。
摘要由CSDN通过智能技术生成

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代码问题可私信交流。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值