精华内容
下载资源
问答
  • matlab开发-DSB语音信号调制解调。双边带调制解调仿真
  • matlab语音信号的频谱分析,对语音信号的频谱、相位、语谱图、放大语音信号,调制到高频,加噪声,滤波去除高频等操作
  • MATLAB语音信号处理

    千次阅读 多人点赞 2019-10-05 07:12:34
    这个界面涉及功能众多,其中包括语音信号的观察分析、音色变换、AM调制解调、减抽样、加噪去噪、相频分析和幅频滤波等,最重要的是对MATLAB中函数的掌握,通过不同函数的组合实现你想要实现的功能。 本篇不会给出...

    数字信号处理课设,我们使用MATLAB对语音信号进行了一系列处理,并将其所有功能集中于下图界面中:

    这个界面涉及功能众多,其中包括语音信号的观察分析、音色变换、AM调制解调、减抽样、加噪去噪、相频分析和幅频滤波等,最重要的是对MATLAB中函数的掌握,通过不同函数的组合实现你想要实现的功能。

    本篇不会给出整个界面的程序,下面会分块给出每个功能的程序,整个界面只需GUI设计界面文件、定义结构体并把对应键程序打进去即可。

    1、语音信号的采集

    1.1题目要求

    使用windows下的录音机录制一段语音信号、音乐信号或者采用其他软件截取一段音乐信号(要求:时间不超过5s,文件格式为WAV。)

    请每位同学都参与录音,内容自定。

    使用wavread语句读取语音/音乐信号获取抽样率;(注意:读取的信号是双声道信号,即为双列向量,需要分列处理);

    输出时域语音/音乐信号的波形。

    实现对录音信号的声音大小的调节。

    实现对两种语音/音乐信号的混音音效。

    实现音乐信号的回音音效。

    1.2设计内容及方案

    ① 读取音频信号:我是通过wavread函数读取.wav文件的方式来获得,当然首先要自己创建一个.wav音频,我是通过电脑录音生成.mp3然后格式工厂转成.wav的,需保存到同一文件夹下。

    分声道处理:一般音乐和语音信号都是双声道信号,时域和频谱图会有两个颜色,所以要取单列来分析,通过x1=x(:,1)语句来实现。

    画时域波形图:用plot函数来画图,注意横坐标为时间t。

    ④ 音量大小调节:通过将音频直接乘一个系数来实现调音量。

    ⑤ 混音和回声:混音即将两个音频相加,要相加就得保证矩阵一样,所以要通过截取并补零矩阵来实现;回声是把三个信号叠加,这三个信号在不同位置补零音量也逐渐变小,就可以实现回声。

    ⑥ 播放声音:本题我使用wavplay来播放声音,会有警告,后面的题我用sound比较好。

    1.3程序源码及注释

    clear
    [x,fs] = wavread('beautiful.wav');%音乐信号
    [y,fs1]= wavread('1.wav');%女生声音
    [z,fs2]= wavread('2.wav');%男生声音
    %输出频率
    fs
    fs1
    fs2
    %音乐语音信号分声道处理
    x1=x(:,1);
    y1=y(:,1);
    z1=z(:,1);
    %画音乐信号时域图
    n1=length(x1);%length取数列长度即元素个数
    figure(1)
    t1=(0:(n1-1))/fs;
    plot(t1,x1);
    axis([0,5,-1,1]);
    xlabel('时间t');
    ylabel('幅度');
    title('音乐信号时域波形');
    %画语音信号时域图
    n2=length(y1);
    figure(2)
    subplot(2,1,1);
    t2=(0:(n2-1))/fs1;
    plot(t2,y1);%女生
    axis([0,4,-0.5,0.5]);
    xlabel('时间t');
    ylabel('幅度');
    title('女生语音信号时域波形');
    n3=length(z1);
    subplot(2,1,2);
    t3=(0:(n3-1))/fs2;
    plot(t3,z1);%男生
    axis([0,4,-0.5,0.5]);
    xlabel('时间t');
    ylabel('幅度');
    title('男生语音信号时域波形');
    %对语音信号声音大小调节
    wavplay(y,fs1); %播放原语音
    y11=10*y;
    wavplay(y11,fs1); %加大音量播放
    y22=0.5*y;
    wavplay(y22,fs1); %减小音量播放
    %两种语音信号的混音
    [m,n]=size(y1);%size取矩阵的行列数
    [m0,n0]=size(z1);
    a=zeros(abs(m-m0),n);%两矩阵行数差为零矩阵行数
    if length(y1)<length(z1)
         y2=[y1;a];
         y3=y2+z1;%两个矩阵行数一样才能相加,所以要补零
    else 
         y2=[z1;a];
         y3=y2+y1;%y1和z1中长的那个不变,短的那个补零
    end;
    wavplay(y3,fs1) ;%播放混音语音
      %画混音波形
    figure(3)
    subplot(2,1,1);
    t4=(0:(max(n2,n3)-1))/fs1;
    plot(t4,y3);
    axis([0,4.5,-0.5,0.5]);
    xlabel('时间');
    ylabel('幅度');
    title('两语音信号叠加后时域波形');
    %音乐信号的回音
    x11=x1(1:200000);%截取部分
    x11=x11';%因为输出为一列所以要转置成一行
    int0=zeros(1,20000);%1行2000列的零矩阵
    temp1=[x11,int0,int0];
    temp2=[int0,0.6*x11,int0];
    temp3=[int0,int0,0.3*x11];%通过补零实现延时,同时声音一个比一个小
    hui=temp1+temp2+temp3;%三重声音相加实现回声
    N=length(hui);
    wavplay(hui,fs1);%播放回音音乐
      %画回声波形
    subplot(2,1,2);
    t1=(0:(N-1))/fs;
    plot(t1,hui);
    axis([0,4.5,-1,1]);
    xlabel('时间');
    ylabel('幅度');
    title('回声时域波形');

    1.4运行结果

    仿真结果分析:我听到了原声和音量放大减小的声音,也听到了混音和回声的效果,变化明显;本题我画了音乐和两个语音信号的时域波形以及混音回声的时域波形,音乐信号幅度比语音信号高且连贯性高,混音之后幅度叠加,回声之后幅度也增大,波形有很明显的变化。

    2、语音/音乐信号的频谱和音谱的观察

    2.1题目要求

    输出语音/音乐信号的波形和频谱,观察现象;

    使用sound语句播放语音/音乐信号,注意不同抽样率下音调变化,解释现象。

    2.2设计内容及方案

    本题读取音频信号、画时域波形和播放原理和上题一样,涉及的新内容有:

    ① 画频谱图:我将横坐标设为频率f,纵坐标需要用fft函数求傅里叶变换然后利用abs函数求幅值画幅度谱,再用plot画出频谱图。

    调节频率:我将频率fs乘一个系数放大缩小并播放,感受频率对语音的影响。

    2.3程序源码及注释

    clear
    [x,fs] = wavread('beautiful.wav');%音乐信号
    [y,fs1]= wavread('1.wav');%女生声音
    [z,fs2]= wavread('2.wav');%男生声音
    %输出频率
    fs
    fs1
    fs2
    %音乐语音信号分声道处理
    x1=x(:,1);
    y1=y(:,1);
    z1=z(:,1);
    %画音乐信号时域图
    n1=length(x1);%length取数列长度即元素个数
    figure(1)
    subplot(2,1,1);
    t1=(0:(n1-1))/fs;
    plot(t1,x1);
    axis([0,5,-1,1]);
    xlabel('时间t');
    ylabel('幅度');
    title('音乐信号时域波形');
    %画音乐信号频域图
    X1=fft(x1,n1);
    subplot(2,1,2);
    f1=0:fs/n1:fs*(n1-1)/n1;
    plot(f1,abs(X1));%也可以使用fftshift函数使fft后的结果以fs/2为中心左右互换
    axis([0,44100,0,6000]);
    xlabel('频率f');
    ylabel('幅度');
    title('音乐信号频谱');
    %画女生语音信号时域图
    n2=length(y1);
    figure(2)
    subplot(2,2,1);
    t2=(0:(n2-1))/fs1;
    plot(t2,y1);
    axis([0,4,-0.5,0.5]);
    xlabel('时间t');
    ylabel('幅度');
    title('女生语音信号时域波形');
    %画女生语音信号频域图
    Y=fft(y1,n2);
    subplot(2,2,2);
    f2=0:fs1/n2:fs1*(n2-1)/n2;
    plot(f2,abs(Y));
    axis([0,48000,0,700]);
    xlabel('频率f');
    ylabel('幅度');
    title('女生语音信号频谱');
    %画男生语音信号时域图
    n3=length(z1);
    subplot(2,2,3);
    t3=(0:(n3-1))/fs2;
    plot(t3,z1);
    axis([0,4,-0.5,0.5]);
    xlabel('时间t');
    ylabel('幅度');
    title('男生语音信号时域波形');
    %画男生语音信号频域图
    Z=fft(z1,n3);
    subplot(2,2,4);
    f3=0:fs2/n3:fs2*(n3-1)/n3;
    plot(f3,abs(Z));
    axis([0,48000,0,700]);
    xlabel('频率f');
    ylabel('幅度');
    title('男生语音信号频谱');
    %不同抽样率语音信号
    sound(y1,fs);%播放原音乐
    pause(5);
    sound(y1,2*fs);%播放高频率音乐
    pause(2);
    sound(y1,0.5*fs);%播放低频率音乐

    2.4运行结果

    仿真结果分析:本题中画了频谱图,可以更直观的看到信号的特征,包括截至频率和音频范围,我的音乐和语音信号主要集中在低频段,而且音乐信号的幅度要比语音信号的幅度高。通过放大缩小频率的声音变化,即频率大时语调变高且语速加快,让我感受到了频率对信号的作用。

    3、语音/音乐信号的抽取(减抽样)

    3.1题目要求

    观察语音/音乐信号频率的上限,选择适当的抽取间隔对信号进行减抽样(给出两种抽取间隔,代表混叠与非混叠);

    输出减抽样语音/音乐信号的波形和频谱,观察现象,给出理论解释;

    播放减抽样语音/音乐信号,注意抽样率改变,比较不同抽取间隔下的声音,解释现象。

    3.2设计内容及方案

    减抽样:本题研究的唯一内容就是对信号以不同间隔抽样,我抽取了200000长度的信号,便于以一定间隔抽样。首先我以小间隔2抽样,信号声音基本和原声差不多,没有发生混叠;而后我又用大间隔20抽样,信号声音有了很明显的变化,即发生了混叠。

    3.3程序源码及注释

    clear
    [x,fs]=wavread('beautiful.wav');%音乐信号
    x1=x(:,1);%取单列
    x2=x1(1:200000);%截取长度
    N1=length(x2)%求信号长度
    %画原信号时域波形和频谱
    t1=(0:(N1-1))/fs;
    figure(1);
    subplot(2,1,1);
    plot(t1,x2);
    title('原信号时域波形');
    xlabel('时间t');
    ylabel('幅度');
    f1=0:fs/N1:fs*(N1-1)/N1;
    Fx1=fft(x2,N1); %求傅里叶变换
    subplot(2,1,2);
    plot(f1,abs(Fx1));
    title('原信号的频谱');%画原信号频谱
    xlabel('频率f');
    ylabel('幅度');
    %非混叠间隔减抽样
    d1=2;j=0;
    for i=1:d1:200000
        j=j+1;
        x22(j)=x2(i);%对信号以d1为间隔做减抽样
    end
    N2=length(x22);%对信号以d1为间隔做减抽样的长度
      %画d1间隔抽样图
    t2=(0:(N2-1))/fs;
    figure(2);
    subplot(2,1,1);
    plot(t2,x22);
    title('以d1为间隔减抽样时域波形');
    xlabel('时间t');
    ylabel('幅度');
    subplot(2,1,2);
    f2=0:(fs/d1)/N2:(fs/d1)*(N2-1)/N2;
    Fx2=fft(x22,N2);%求傅里叶变换画频谱
    plot(f2,abs(Fx2));
    title('以d1为间隔减抽样后的频谱(非混叠)');
    xlabel('频率f');
    ylabel('幅度');
    %混叠间隔减抽样
    d2=20;j=0;
    for i=1:d2:200000
        j=j+1;
        x3(j)=x2(i);%对信号以d2为间隔做减抽样
    end
    N3=length(x3) ;%对信号以d2为间隔做减抽样长度
      %画d2间隔抽样图
    t3=(0:(N3-1))/fs;
    figure(3)
    subplot(2,1,1);
    plot(t3,x3);
    title('以d2为间隔减抽样后的时域波形');
    xlabel('时间t');
    ylabel('幅度');
    subplot(2,1,2);
    f3=0:(fs/d2)/N3:(fs/d2)*(N3-1)/N3;
    Fx3=fft(x3,N3);%求傅里叶变换画频谱
    plot(f3,abs(Fx3));
    title('以d2为间隔减抽样后的频谱(混叠)');
    xlabel('频率f');
    ylabel('幅度');
    %播放减抽样信号
    sound(x2,fs);%原信号播放
    pause(5);
    sound(x22,fs/d1);%以d1为间隔减抽样信号播放(非混叠)
    pause(8);
    sound(x3,fs*(1/d2));%以d2为间隔减抽样信号播放(混叠)

    3.4运行结果

    仿真结果分析:从信号的时域波形和频谱图可以看出抽样后时间范围和频率范围都有所减小,小间隔抽样频谱波形变化比较小,没有发生混叠,大间隔抽样频谱波形有了很大的变化,发生了混叠。抽取间隔越小,声音越清晰,时间间隔越大,声音越不清晰,混叠现象越明显。未混叠时,声音尖锐,混叠时,声音轻,只有淡淡的音调,基本没有起伏,不清晰。

    原因:采样频率fs必须大于等于2fc,采样频率小于2fc时,发生混叠,若采样频率越小,则混叠越明显。我的图中fc不到5000Hz,间隔2采样频率fs为22000Hz大于两倍的fc所以不混叠;间隔20采样频率fs为2200Hz小于两倍的fc所以发生混叠。

    4 语音/音乐信号的AM调制

    4.1题目要求

    ① 观察语音/音乐信号的频率上限,选择适当调制频率对信号进行调制(给出高、低两种调制频率);

    输出调制信号的波形和频谱,观察现象,给出理论解释;

    播放调制语音/音乐信号,注意不同调制频率下的声音,解释现象。

    4.2设计内容及方案

    在这道题中我统一使用了频率归一化,便于从原信号中读取截止频率和设置载波频率。

    取低频载波对信号进行AM调制:这里取了0.1pi为低频调制载波频率,与原信号相乘实现AM调制,这里用点乘转置矩阵实现。

    取高频载波对信号进行AM调制:这里取了0.7pi为低频调制载波频率,与原信号相乘实现AM调制,这里用点乘转置矩阵实现。

    播放调制后信号:分别播放低频和高频调制时的音乐,用sound函数播放。

    4.3程序源码及注释

    clear
    [x,fs]=wavread('beautiful.wav'); %读取音乐信号
    x1=x(:,1);%取单列 
    N=length(x1);%求信号长度 
    n=0:N-1;%所有元素
    t=(0:(N-1))/fs;%时间
    f=0:fs/N:fs*(N-1)/N;%频率
    w=2*f/fs;%归一化
    %画原信号时域波形和频谱
    figure(1);
    subplot(2,1,1);
    plot(t,x1);
    title('原信号时域波形');
    xlabel('时间t');
    ylabel('幅度');
    Fx1=fft(x1,N); %求傅里叶变换
    subplot(2,1,2);
    plot(w,abs(Fx1));
    title('原信号的频谱');%画原信号频谱
    xlabel('w');
    ylabel('幅度');
    %低频调制
    x2=cos(n*0.1*pi);%低频时余弦信号
    x22=x1.*x2';%低频调制信号
    X2=fft(x2); 
    X22=fft(x22);
    %高频调制
    x3=cos(n*0.7*pi);%高频时余弦信号
    x33=x1.*x3';%高频调制信号
    X3=fft(x3); 
    X33=fft(x33); 
    %画出低频时载波和调制信号波形
    figure(2)
    subplot(2,2,1);
    plot(t,x2);
    axis([0,0.001,-1,1]);
    title('低频时余弦信号时域波形');
    xlabel('时间t');
    ylabel('幅度');
    subplot(2,2,2);
    plot(w,abs(X2));
    title('低频时余弦信号频谱');
    xlabel('w');
    ylabel('幅度');
    
    subplot(2,2,3);
    plot(t,x22);
    title('低频调制信号时域波形');
    xlabel('时间t');
    ylabel('幅度');
    subplot(2,2,4);
    plot(w,abs(X22));
    title('低频调制信号频谱');
    xlabel('w');
    ylabel('幅度');
    %画出高频时载波和调制信号波形
    figure(3)
    subplot(2,2,1);
    plot(t,x3);
    axis([0,0.001,-1,1]);
    title('高频时余弦信号时域波形');
    xlabel('时间t');
    ylabel('幅度');
    subplot(2,2,2);
    plot(w,abs(X3));
    title('高频时余弦信号频谱');
    xlabel('w');
    ylabel('幅度');
    
    subplot(2,2,3);
    plot(t,x33);
    title('高频调制信号时域波形');
    xlabel('时间t');
    ylabel('幅度');
    subplot(2,2,4);
    plot(w,abs(X33));
    title('高频调制信号频谱');
    xlabel('w');
    ylabel('幅度');
    %播放调制信号
    sound(x1,fs);%播放原音乐
    pause(5);
    sound(x22,fs);%低频调制播放
    pause(5);
    sound(x33,fs);%高频调制播放

    4.4运行结果

    仿真结果分析:从图中可以看出原音乐信号的截止频率为0.2pi,这里设置了0.1pi和0.7pi两种频率对信号进行AM调制,原信号的调制相当于频谱搬移, 左移一个右移一个,调制的目的是便于信号在信道中传输。当调制频率较高时,声音响度低,几乎只能听见兹兹的声音, 信号几乎完全失真,当调制频率较低时,声音很尖锐,响度较大,能听出调子,但也有兹兹的声音。

    5、AM调制语音/音乐信号的同步解调

    5.1题目要求

    设计巴特沃斯滤波器完成同步解调,观察滤波器频率响应曲线;

    窗函数法设计FIR滤波器完成同步解调,观察滤波器频率响应曲线(要求:分别使用矩形窗和布莱克曼窗,进行比较);

    输出解调信号的波形和频谱,观察现象,给出理论解释;

    播放解调语音/音乐信号,比较不同滤波器下的声音,解释现象。

    5.2设计内容及方案

    对调制后的信号进行解调:将调制后的信号与调制时相同的载波相乘实现解调,这里用点乘转置矩阵实现。

    用巴特沃斯滤波器对解调信号进行滤波:首先求巴特沃斯滤波器的频率响应,其中用到了buttord求满足性能指标的滤波器阶数N和3dB截止频率wc、用butter计算模拟滤波器的传输函数Ha(s)、用freqz求频响。然后用filter实现滤波。

    用矩形窗FIR滤波器对解调信号进行滤波:首先求矩形窗FIR滤波器的频率响应,其中先求理想低通单位脉冲响应hd,然后加矩形窗截断求模拟脉冲响应,再利用freqz求频率响应。然后利用卷积conv实现滤波。

    用布莱克曼窗FIR滤波器对解调信号进行滤波:首先求布莱克曼窗FIR滤波器的频率响应,其中先求理想低通单位脉冲响应hd,然后加布莱克曼窗截断求模拟脉冲响应,再利用freqz求频率响应。然后利用卷积conv实现滤波。

    播放调制、解调和滤波后的声音:通过声音变化感受调制、解调和滤波。

    5.3程序源码及注释

    clear
    [y,fs]=audioread('beautiful.wav');%读取音乐信号
    y1=y(:,1);%取单列 
    N1=length(y1);%求信号长度 
    n=0:N1-1;%所有元素
    t=n/fs;%时间
    f=0:fs/N1:fs*(N1-1)/N1;%频率
    w=2*f/fs;%归一化
    y2=cos(n*pi*0.12);%0.12pi时余弦信号  
    Y=y1.*y2';%音乐信号AM调制
    Y2=Y.*y2';%解调相乘器
    Y22=fft(Y2);%傅里叶变换
    %画解调信号时域波形和频谱
    figure(1);
    subplot(2,1,1);
    plot(t,Y2);
    xlabel('时间t');
    ylabel('幅度');
    title('解调信号时域波形');
    subplot(2,1,2);
    plot(w,abs(Y22));
    xlabel('w');
    ylabel('幅度');
    title('解调信号频谱');
    %求巴特沃斯滤波器频率响应
    wp=0.12;ws=0.3;rp=1;rs=50; %设计巴特沃斯IIR滤波器参数
    [N,wc]=buttord(wp,ws,rp,rs); %求满足性能指标的滤波器阶数N和3dB截止频率wc
    [b,a]=butter(N,wc); %计算模拟滤波器的传输函数Ha(s)
    [Hd,w]=freqz(b,a);%求频响
    figure(2)
    subplot(3,1,1);
    plot(w/pi,abs(Hd));
    axis([0,1,0,1.5]);
    xlabel('w/π');
    ylabel('幅度');
    title('巴特沃斯频率响应曲线');
    %求巴特沃斯滤波器滤波信号
    Y3=filter(b,a,Y2);%滤波音乐信号
    N3=length(Y3)
    t1=(0:(N3-1))/fs;%时间
    f1=0:fs/N3:fs*(N3-1)/N3;%频率
    w1=2*f1/fs;%归一化
    Y33=fft(Y3);%傅里叶变换
    subplot(3,1,2);
    plot(t1,Y3);
    xlabel('时间t');
    ylabel('幅度');
    title('巴特沃斯滤波信号时域波形');
    subplot(3,1,3);
    plot(w1,abs(Y33));
    xlabel('w');
    ylabel('幅度');
    title('巴特沃斯滤波信号频谱');
    %理想低通单位脉冲响应hd计算(窗函数法要用)
    N=11;n1=[0:1:(N-1)];wc1=0.2*pi;  
    alpha=(N-1)/2;
    m=n1-alpha+eps;%加一个小数避免0作除数
    hd=sin(wc1*m)./(pi*m);
    %求矩形窗FIR滤波器频率响应
    w_han1=(boxcar(N))';%矩形窗
    h1=hd.*w_han1;%加窗截断得脉冲响应
        %以下为频率响应计算
    [H,w]=freqz(h1,1,1000,'whole');
    mag=abs(H);%mag为幅度
    db=20*log10((mag+eps)/max(mag));
    pha=angle(H);%pha为相位
    grd=grpdelay(h1,1,w);%grd为群延迟
        %以下为画图
    figure(3);
    subplot(3,2,1);
    plot(w/pi,db);
    axis([0,2,-200,30]);
    xlabel('w/π');
    ylabel('幅度');
    title('矩形窗频响图');
    %求矩形窗FIR滤波器滤波信号
    Y4=conv(Y2,h1);%卷积滤波
    N4=length(Y4);
    t2=(0:(N4-1))/fs;%时间
    f2=0:fs/N4:fs*(N4-1) /N4;%频率
    w2=2*f2/fs;%归一化
    Y44=fft(Y4,N4);%傅里叶变换
    subplot(3,2,3);
    plot(t2,Y4);
    xlabel('时间t');
    ylabel('幅度');
    title('矩形窗滤波信号时域波形');
    subplot(3,2,5);
    plot(w2,abs(Y44));
    xlabel('w');
    ylabel('幅度');
    title('矩形窗滤波信号频谱');
    %求布莱克曼窗FIR滤波器频率响应
    w_han2=(blackman(N))';%布莱克窗
    h2=hd.*w_han2;%加窗截断得脉冲响应
         %以下为频率响应计算
    [H,w]=freqz(h2,1,1000,'whole');
    mag=abs(H);%mag为幅度
    db=20*log10(mag+eps)/max(mag);
    pha=angle(H);%pha为相位
    grd=grpdelay(h2,1,w);%grd为群延迟
         %以下为画图
    subplot(3,2,2);
    plot(w/pi,db);
    axis([0,2,-200,30]);
    xlabel('w/π');
    ylabel('幅度');
    title('布莱克曼窗频响图');
    %求布莱克曼窗FIR滤波器滤波信号
    Y5=conv(Y2,h2);%卷积滤波
    N5=length(Y5);
    t3=(0:(N4-1))/fs;%时间
    f3=0:fs/N4:fs*(N4-1)/N4;%频率
    w3=2*f3/fs;%归一化
    Y55=fft(Y5,N5);%傅里叶变换
    subplot(3,2,4);
    plot(t3,Y5);
    xlabel('时间t');
    ylabel('幅度');
    title('布莱克曼滤波信号时域波形');
    subplot(3,2,6);
    plot(w3,abs(Y55));
    xlabel('w');
    ylabel('幅度');
    title('布莱克曼滤波信号频谱图');
    %播放解调后声音
    sound(y1,fs);%原声音
    pause(5);
    sound(Y,fs);%AM调制后的声音 
    pause(5);
    sound(Y2,fs);%解调后的声音 
    pause(5);
    sound(Y3,fs);%巴特沃斯滤波器滤波后的声音 
    pause(5);
    sound(Y4,fs);%矩形窗滤波器滤波后的声音 
    pause(5);
    sound(Y5,fs);%布莱克曼窗滤波后的声音

    5.4运行结果

     仿真结果分析:首先得到了解调后的时域波形和频谱图,可以看出解调后的信号并没有完全恢复原信号,会夹杂一点调制过程中的载波,通过滤波后信号频谱有了很大改善。播放声音发现:巴特沃斯滤波后声音清晰,基本和原来的音乐差不多,但是音乐稍微低沉。巴特沃斯滤波器的特点是通频带的频率响应曲线平滑。矩形窗滤波声音较为沉闷,也伴有杂音。原因是矩形窗主瓣窄,旁瓣大,频率识别精度最高,幅值识别精度最低 。布莱克曼窗滤波声音与原信号较为接近,声音有些尖锐,也有轻微杂音。原因是布莱克曼窗主瓣宽,旁瓣小,频率识别精度最低,但幅值识别精度最高。

    6、语音/音乐信号的滤波去噪

    6.1题目要求

    原始信号叠加幅度为0.05,频率为3kHz,5kHz,8kHz的三余弦混合噪声,观察噪声频谱以及加噪后语音/音乐信号的音频和频谱,并播放音乐,感受噪声对语音/音乐信号的影响;

    给原始语音/音乐信号叠加幅度为0.5的随机白噪声(可用rand语句产生),观察噪声频谱以及加噪后语音/音乐信号的音频和频谱,并播放音乐,感受噪声对语音/音乐信号的影响;

    根据步骤①、②观察到的频谱,选择合适指标设计滤波器进行滤波去噪,关注去噪后信号音谱和频谱,并播放音乐,解释现象。

    6.2设计内容及方案

    给信号加三余弦混合噪声:首先求得三余弦混合噪声,幅值为0.05,分别给频率3kHz,5kHz,8kHz,叠加得到噪声,然后将噪声和原信号叠加。

    给信号加随机白噪声:首先求得随机白噪声,幅值为0.5,用randn语句产生噪声,然后将噪声和原信号叠加。

    滤掉噪声:我使用了巴特沃斯滤波器来滤噪,其中用到buttord求满足性能指标的滤波器阶数N和3dB截止频率wc、用butter求s域的频率响应的参数、用bilinear函数即利用双线性变换实现频率响应s域到z域的变换,然后用filter求滤波后信号。

    6.3程序源码及注释

    clear
    [y,fs]=audioread('beautiful.wav');%读取音乐信号
    y1=y(:,1);%取单列                            
    N=length(y1);%求信号长度 
    Y=fft(y1,N);%傅里叶变换
    t=(0:(N-1))/fs;%时间
    f=0:fs/N:fs*(N-1)/N;%频率
    w=2*f/fs;%归一化
    %原信号时域波形和频谱图
    figure(1);
    subplot(2,1,1);
    plot(t,y1);
    xlabel('时间t');
    ylabel('幅度');
    title('原信号时域波形');
    subplot(2,1,2);
    plot(w,abs(Y));
    xlabel('w');
    ylabel('幅度');
    title('原信号频谱图');
    %加三余弦混合噪声
    A0=0.05;%噪声幅度
    d1=A0*cos(2*pi*3000*t);%3kHz的余弦噪音
    d2=A0*cos(2*pi*5000*t);%5kHz的余弦噪音
    d3=A0*cos(2*pi*8000*t);%8kHz的余弦噪音
    x1=d1+d2+d3;%噪声叠加
    X1=fft(x1);%噪声傅里叶变换
    y2=y1+(x1)';%加三余弦混合噪声后信号
    Y1=fft(y2);%加噪信号傅里叶变换
    figure(2);
    subplot(3,2,1);
    plot(w,abs(X1));
    xlabel('w');
    ylabel('幅度');
    title('三余弦噪声频谱');
    subplot(3,2,3);
    plot(t,y2);
    xlabel('时间t');
    ylabel('幅度');
    title('加三余弦噪声信号时域波形');
    subplot(3,2,5);
    plot(w,abs(Y1));
    xlabel('w');
    ylabel('幅度');
    title('加三余弦噪声信号频谱图');
    %加随机白噪声
    x2=0.5*randn(N,1);%噪声
    X2=fft(x2);%噪声傅里叶变换
    y3=y1+x2;%加随机噪声后信号       
    Y2=fft(y3);%加噪信号傅里叶变换
    subplot(3,2,2);
    plot(w,abs(X2));
    xlabel('w');
    ylabel('幅度');
    title('随机白噪声频谱图');
    subplot(3,2,4);
    plot(t,y3);
    xlabel('时间t');
    ylabel('幅度');
    title('加随机噪声信号时域波形');
    subplot(3,2,6);
    plot(w,abs(Y2));
    xlabel('w');
    ylabel('幅度');
    title('加随机噪声信号频谱图');
    %巴特沃斯滤波器去噪
    wp=0.1;ws=0.16;Rp=1;Rs=15;
    [n1,Wn1]=buttord(wp,ws,Rp,Rs,'s');%求低通滤波器的阶数和截止频率
    [b1,a1]=butter(n1,Wn1,'s');%求s域的频率响应的参数
    [b2,a2]=bilinear(b1,a1,1);%利用双线性变换实现频率响应s域到z域的变换
    z1=filter(b2,a2,y2);%求滤三余弦混合噪声后的信号
    z2=filter(b2,a2,y3);%求滤随机噪声后的信号
      %画滤噪后的图
    m1=fft(z1);
    m2=fft(z2);
    figure(3);
    subplot(2,2,1);
    plot(t,z1);
    xlabel('时间t');
    ylabel('幅度');
    title('滤三余弦噪声后信号时域波形');
    subplot(2,2,3);
    plot(w,abs(m1));
    xlabel('w');
    ylabel('幅度');
    title('滤三余弦噪声后信号频谱');
    subplot(2,2,2);
    plot(t,z2);
    xlabel('时间t');
    ylabel('幅度');
    title('滤随机噪声后信号时域波形');
    subplot(2,2,4);
    plot(w,abs(m2));
    xlabel('w');
    ylabel('幅度');
    title('滤随机噪声后信号频谱');
    %播放
    sound(y1,fs);%原音乐
    pause(5);
    sound(y2,fs);%加三余弦噪声
    pause(5);
    sound(y3,fs);%加随机噪声
    pause(5);
    sound(z1,fs);%滤三余弦噪声
    pause(5);
    sound(z2,fs);%滤随机噪声

    6.4运行结果

    仿真结果分析:从图中可以看到三余弦混合噪声的频谱图以及信号加三余弦混合噪声后的时域波形和频谱,通过播放感受到了噪声对信号的影响;滤波之后对噪声的改善很大,噪声变小,原声音更加清晰,只是巴特沃斯滤波会把一部分原信号频率滤掉,声音会有点低沉。

    7、语音/音乐信号的幅频滤波及相频分析

    7.1题目要求

    设计低通滤波器(可自行选择不同的截止频率),滤除原始语音/音乐信号的高频信息,观察滤波前后的幅度频谱,并比较滤波前后的音乐效果,感受高频信息对语音/音乐信号的影响;

    设计高通滤波器(可自行选择不同的截止频率),滤除原始语音/音乐信号的低频信息,观察滤波前后的幅度频谱,并比较滤波前后的音乐效果,感受低频信息对语音/音乐信号的影响;

    选取两段不同的语音/音乐信号,分别将其幅度谱与相位谱交叉组合构成新的语音/音乐信号,播放比较组合后的音乐与原始音乐,感受相频信息对语音/音乐信号的影响。

    7.2设计内容及方案

    低通滤波器设计:我这里用了巴特沃斯低通滤波器,其中用buttord求低通滤波器的阶数和截止频率,用butter求s域的频率响应的参数,用bilinear即双线性变换法实现频率响应s域到z域的变换,用filter实现滤波。

    高通滤波器设计:我这里用了巴特沃斯低通滤波器转高通,其中用buttord求低通滤波器的阶数和截止频率,用buttap创建巴特沃斯低通滤波器原型,用zp2tf将模拟低通变高通,用bilinear即双线性变换法实现频率响应s域到z域的变换,用filter实现滤波。

    幅度谱和相位谱交叉:用函数abs和angle分别取信号的幅度和相位,然后将其交叉创建新的信号。

    7.3程序源码及注释

    clear
    [y,fs]=audioread('突然好想你.wav');%读取音乐信号
    y1=y(:,1);%取单列                            
    N=length(y1);%求信号长度
    Y=fft(y1,N);%傅里叶变换
    t=(0:(N-1))/fs;%时间
    f=0:fs/N:fs*(N-1)/N;%频率
    w=2*f/fs;%归一化
    %IIR低通滤波器
    wp=0.1;ws=0.2;Rp=1;Rs=15;
    [n1,Wn1]=buttord(wp,ws,Rp,Rs,'s');%求低通滤波器的阶数和截止频率
    [b1,a1]=butter(n1,Wn1,'s');%求s域的频率响应的参数
    [b2,a2]=bilinear(b1,a1,1);%利用双线性变换实现频率响应s域到z域的变换
    z1=filter(b2,a2,y1);%滤波后信号
    m1=fft(z1);
    figure(1);
    subplot(2,1,1);
    plot(w,abs(Y));
    xlabel('w');
    ylabel('幅度');
    title('原信号频谱');
    subplot(2,1,2);
    plot(w,abs(m1));
    xlabel('w');
    ylabel('幅度');
    title('低通滤波信号频谱');
    %高通滤波器
    wp=0.1;ws=0.2;rp=1;rs=15;
    [n,Wn]=buttord(wp,ws,rp,rs,'s');%设计模拟滤波器
    [z,p,k]=buttap(n);%创建巴特沃斯低通滤波器原型
    [b,a]=zp2tf(z,p,k);%由零极点转换为传递函数
    [b11,a11]=lp2hp(b,a,Wn);%模拟低通变高通
    [b22,a22]=bilinear(b11,a11,0.5);%利用双线性变换实现频率响应S域到Z域的变换
    z2=filter(b22,a22,y1);%滤波后信号
    m2=fft(z2);
    figure(2);
    subplot(2,1,1);
    plot(w,abs(Y));
    xlabel('w');
    ylabel('幅度');
    title('原信号频谱');
    subplot(2,1,2);
    plot(w,abs(m2));
    xlabel('w');
    ylabel('幅度');
    title('高通滤波信号频谱');
    %幅度谱相位谱交叉
    [x,fs0]=audioread('beautiful.wav');
    x0=x(:,1); 
    x1=x0(1:200000);%信号2截取长度200000
    y2=y1(1:200000);%信号1截取长度200000
    N=length(x1);
    X=fft(x1,N);
    Y=fft(y2,N);
    t0=(0:(N-1))/fs0;
    f0=0:fs0/N:fs0*(N-1)/N;
    w0=2*f0/fs0;%数字角频率
    %画两信号的幅度谱和相位谱
    figure(3);                                 
    subplot(2,2,1);
    plot(w0,abs(Y));
    xlabel('w');
    ylabel('幅度');
    title('信号1的幅度谱');
    subplot(2,2,2);
    plot(w0,abs(X));
    xlabel('w');
    ylabel('幅度');
    title('信号2的幅度谱');
    subplot(2,2,3);
    plot(w0,angle(Y));   
    xlabel('w');
    ylabel('相位');
    title('信号1的相位谱');
    subplot(2,2,4);
    plot(w0,angle(X));
    xlabel('w');
    ylabel('相位');
    title('信号2的相位谱');
    F1=abs(Y).*exp(1i*angle(X));%音乐信号1的幅度谱和音乐信号2的相位谱交叉
    F2=abs(X).*exp(1i*angle(Y));%音乐信号2的幅度谱和音乐信号1的相位谱交叉y3=real(ifft(F1,N));%对交叉得到的频域信号做傅里叶逆变换
    y4=real(ifft(F2,N));%对交叉得到的频域信号做傅里叶逆变换
    %绘制交叉得到的信号的波形和频谱
    figure(4)
    subplot(2,2,1);
    plot(t0,y3);
    xlabel('时间');
    ylabel('幅度');
    title('1幅度谱和2相位谱交叉信号时域波形');
    subplot(2,2,2);
    plot(w0,abs(F1));
    xlabel('w');
    ylabel('幅度');
    title('1幅度谱和2相位谱交叉信号频谱');
    subplot(2,2,3);
    plot(t0,y4);
    xlabel('时间');
    ylabel('幅度')
    title('2幅度谱和1相位谱交叉信号时域波形');
    subplot(2,2,4);
    plot(w0,abs(F2));
    xlabel('w');
    ylabel('幅度');
    title('2幅度谱和1相位谱交叉信号频谱');
    %播放
    sound(y1,fs);%原音乐
    pause(5);
    sound(z1,fs);%低通滤波声音
    pause(5);
    sound(z2,fs);%高通滤波声音
    pause(5);
    sound(y3,fs);%幅度谱1与相位谱2交叉
    pause(5);
    sound(y4,fs);%相位谱1与幅度谱2交叉

    7.4运行结果

    仿真结果分析:通过观察原信号的归一化频谱,确定巴特沃斯高通滤波器的参数wp,ws的值并实现滤波,从低通滤波和高通滤波的频谱图中可以看出:低通滤波器滤掉了信号的高频部分,声音变得低沉;高通滤波器滤掉了信号的低频部分,声音变得尖锐。幅度谱与相位谱交叉时,通过听交叉后的语音让我感受到了相频特性对一个信号的影响,音乐幅度谱没变相位谱变还会有原声,只是整体节奏改变。

    8、语音信号变声处理系统

    8.1题目要求

    ① 电视台经常针对某些事件的知情者进行采访,为了保护知情者,经常改变说话人的声音,请利用所学的知识,将其实现;

    要求处理后的语音信号基本不影响正常收听与理解。

    8.2设计内容及方案

    变声主要通过调用voice函数来实现,改变voice函数的参数,小于1时偏女声,大于1时偏男声。

    8.3程序源码及注释

     

    clear
    [y1,fs]=audioread('beautiful.wav');%读取音乐信号
    y1=y1(:,1);%取单列
    N1=length(y1);%求信号长度
    n=0:N1-1;%所有元素
    t=n/fs;%时间
    f=0:fs/N1:fs*(N1-1)/N1;%频率
    Y1=fft(y1,N1);%傅里叶变换
    %画原信号图
    figure(1)
    subplot(2,2,1);
    plot(t,y1);
    xlabel('时间t');
    ylabel('幅度');
    title('原信号时域波形图');
    subplot(2,2,2);
    plot(f,abs(Y1));
    xlabel('频率f');
    ylabel('幅度');
    title('原信号频谱图');
    y2=voice(y1,0.5);  %变声
    N2=length(y2);
    k=0:1:N2-1;
    t=k/fs;
    f=k*fs/N2;
    Y2=fft(y2,N2);
    %画变音后信号图
    subplot(2,2,3);
    plot(t,y2);
    xlabel('时间t');
    ylabel('幅度');
    title('变声信号时域波形图');
    subplot(2,2,4);
    plot(f,abs(Y2));
    xlabel('频率f');
    ylabel('幅度');
    title('变声信号频谱图');
    sound(y2,fs);

     

    voice函数:

    function Y=voice(y1,f)      %更改采样率使基频改变 f>1降低;f<1升高?
    f=round(f*1000);
    d=resample(y1,f,1000);      %时长整合使语音文件恢复原来时长
    W=400;
    Wov=W/2;
    Kmax=W*2;
    Wsim=Wov;
    xdecim=8;
    kdecim=2;
    X=d';
    F=f/1000;
    Ss=W-Wov;
    xpts=size(X,2);
    ypts=round(xpts/F);
    Y=zeros(1,ypts);
    xfwin=(1:Wov)/(Wov+1);
    ovix=(1-Wov):0;
    newix=1:(W-Wov);
    simix=(1:xdecim:Wsim)-Wsim;
    padX=[zeros(1,Wsim),X,zeros(1,Kmax+W-Wov)];
    Y(1:Wsim)=X(1:Wsim);
    lastxpos=0;
    km=0;
    for ypos=Wsim:Ss:(ypts-W)
    xpos=round(F*ypos);
    kmpred=km+(xpos-lastxpos);
    lastxpos=xpos;
    if(kmpred<=Kmax)
       km=kmpred;
    else
    ysim=Y(ypos+simix);
    rxy=zeros(1,Kmax+1);
    rxx=zeros(1,Kmax+1);
    Kmin=0;
    for k=Kmin:kdecim:Kmax
    xsim=padX(Wsim+xpos+k+simix);
    rxx(k+1)=norm(xsim);
    rxy(k+1)=(ysim*xsim');
    end
    Rxy=(rxx~=0).*rxy./(rxx+(rxx==0));
    km=min(find(Rxy==max(Rxy))-1);
    end
    xabs=xpos+km;
    Y(ypos+ovix)=((1-xfwin).*Y(ypos+ovix))+(xfwin.*padX(Wsim+xabs+ovix));
    Y(ypos+newix)=padX(Wsim+xabs+newix);
    end
    end

    8.4运行结果

    仿真结果分析:该程序可以很好的实现对声音信号的变声处理,变声后语速基本没有改变,可以听清讲述者想传达的内容,只是音色有了变化。

    小结:一次收获很多的课设,希望对你有用。

     

    转载于:https://www.cnblogs.com/BoBoRing/p/10290538.html

    展开全文
  • 本文首先简要介绍利用Matlab语言编制脚本文件,对信号调用相应的函数进行各种调制,产生各类的已调波及对其进行解调,并且对其进行频谱分析,然后利用SIMULINK工具箱对其进行解调仿真,通过改变相应参数观测结果为...
  • 基于MATLAB语音信号采集与分析,把语音信号调制成高频信号作为噪声加上原始信号并通过低通滤波器进行滤除高频噪声的源程序!内含 wav源文件+源程序+仿真说明
  • 名字叫d.slx的可以直接运行,用的matlab是2018b.此资源是配合博客https://blog.csdn.net/weixin_44884357/article/details/107875528的
  • “调幅”就是调制幅度,高频信号的幅度随着音频信号幅度的改变而改变,当音频信号的幅度高时高频信号的幅度也跟着高,反之跟着变低,形成音频信号的幅度包络,但高频信号的频率没有变; 二、源代码 function ...

    一、简介

    “调幅”就是调制幅度,高频信号的幅度随着音频信号幅度的改变而改变,当音频信号的幅度高时高频信号的幅度也跟着高,反之跟着变低,形成音频信号的幅度包络,但高频信号的频率没有变;

    二、源代码

    function varargout = AMtiaozhi(varargin)
    % AMTIAOZHI M-file for AMtiaozhi.fig
    %      AMTIAOZHI, by itself, creates a new AMTIAOZHI or raises the existing
    %      singleton*.
    %
    %      H = AMTIAOZHI returns the handle to a new AMTIAOZHI or the handle to
    %      the existing singleton*.
    %
    %      AMTIAOZHI('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in AMTIAOZHI.M with the given input arguments.
    %
    %      AMTIAOZHI('Property','Value',...) creates a new AMTIAOZHI or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before AMtiaozhi_OpeningFunction gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to AMtiaozhi_OpeningFcn via varargin.
    %
    %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
    %      instance to run (singleton)".
    %
    % See also: GUIDE, GUIDATA, GUIHANDLES
    
    % Edit the above text to modify the response to help AMtiaozhi
    
    % Last Modified by GUIDE v2.5 10-May-2010 16:42:40
    
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @AMtiaozhi_OpeningFcn, ...
                       'gui_OutputFcn',  @AMtiaozhi_OutputFcn, ...
                       'gui_LayoutFcn',  [] , ...
                       'gui_Callback',   []);
    if nargin & isstr(varargin{1})
        gui_State.gui_Callback = str2func(varargin{1});
    end
    
    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end
    % End initialization code - DO NOT EDIT
    
    
    % --- Executes just before AMtiaozhi is made visible.
    function AMtiaozhi_OpeningFcn(hObject, eventdata, handles, varargin)
    % This function has no output args, see OutputFcn.
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to AMtiaozhi (see VARARGIN)
    
    % Choose default command line output for AMtiaozhi
    handles.output = hObject;
    
    % Update handles structure
    guidata(hObject, handles);
    
    % UIWAIT makes AMtiaozhi wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
    
    
    % --- Outputs from this function are returned to the command line.
    function varargout = AMtiaozhi_OutputFcn(hObject, eventdata, handles)
    % varargout  cell array for returning output args (see VARARGOUT);
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Get default command line output from handles structure
    varargout{1} = handles.output;
    
    
    % --- Executes during object creation, after setting all properties.
    function popupmenu1_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to popupmenu1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
    
    % Hint: popupmenu controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc
        set(hObject,'BackgroundColor','white');
    else
        set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
    end
    set(hObject, 'String', {'调制信号', '载波信号','已调波信号'});
    
    
    % --- Executes on selection change in popupmenu1.
    function popupmenu1_Callback(hObject, eventdata, handles)
    % hObject    handle to popupmenu1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Hints: contents = get(hObject,'String') returns popupmenu1 contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from popupmenu1
    
    
    % --- Executes during object creation, after setting all properties.
    function popupmenu2_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to popupmenu2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
    
    % Hint: popupmenu controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc
        set(hObject,'BackgroundColor','white');
    else
        set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
    end
    

    三、运行结果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    四、备注

    完整代码或者代写添加QQ 1564658423
    往期回顾>>>>>>
    【特征提取】基于matlab小波变换的音频水印嵌入提取【含Matlab源码 053期】
    【语音处理】基于matlab GUI语音信号处理【含Matlab源码 290期】
    【语音采集】基于matlab GUI语音信号采集【含Matlab源码 291期】

    展开全文
  • 语音信号CDMA扩频调制

    2018-05-28 20:53:43
    要求以63位长的m序列为扩频码,对语音信号进行扩频调制。将扩频调制前后的信号频谱进行比较,验证结果是否正确。这题要用C语言编程,用CCS仿真,但是我不会,#include&lt;stdio.h&gt;#include&lt;math.h...

    使用MATLAB将.wav音频文件(由同学自己录制)转换为CCS可读取的.dat文件。语音信号数据速率可自定义。要求以63位长的m序列为扩频码,对语音信号进行扩频调制。将扩频调制前后的信号频谱进行比较,验证结果是否正确。


    这题要用C语言编程,用CCS仿真,但是我不会,

    #include<stdio.h>

    #include<math.h>

    #define num 1000
        int inp[num];
        int array[num*4];
        int out[num];
        int *input;
        int *arr;
        int *output;
    int read_signals(int *input);
    int edit(int *input,int *arr);
    int write_buffer(int *arr,int *output,int *m);
    int output_signals(int *output);
    int *m;
    int *n;
    void main()
    {


        int i=0,b;
        int mseq[63]={0,0,1,1,0,0,0,1,0,1,0,0,1,1,1,1,0,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,0,0,1,1,0,1,0,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0};
        input=inp;
        arr=array;
        output=out;
        m=mseq;
        for(b=0;b<63;b++)
        {if(mseq[b]==0)
        n[b]=1;
        else
        n[b]=0;
        }
        while(1)
        {
           read_signals(input);//加探针
           edit(input,arr);
           write_buffer(arr,output,m);
           output_signals(output);
           i++;
        }
    }
    int read_signals(int *input)
    {
        return (1);
    }


    int write_buffer(int *arr,int *output,int *m)
    {
        int i,a;
        for(i=0;i<num*4;i++)
        {if(arr[i]==1)
        {for(a=0;a<63;a++)
            output[i]=m[a];
        }
         else
         {for(a=0;a<63;a++)
            output[i]=n[a];
         }
        }
        return(1);
    }
    int output_signals(int *output)
    {
        return(1);
    }
    int edit(int *input,int *arr)
    {int i;
    int a=0;
    for(i=0;i<num;i++)
    {
    switch(input[i])
    {case '0':array[a]=0;array[a+1]=0;array[a+2]=0;array[a+3]=0;
     case '1':array[a]=0;array[a+1]=0;array[a+2]=0;array[a+3]=1;
     case '2':array[a]=0;array[a+1]=0;array[a+2]=1;array[a+3]=0;
     case '3':array[a]=0;array[a+1]=0;array[a+2]=1;array[a+3]=1;
     case '4':array[a]=0;array[a+1]=1;array[a+2]=0;array[a+3]=0;
     case '5':array[a]=0;array[a+1]=1;array[a+2]=0;array[a+3]=1;
     case '6':array[a]=0;array[a+1]=1;array[a+2]=1;array[a+3]=0;
     case '7':array[a]=0;array[a+1]=1;array[a+2]=1;array[a+3]=1;
     case '8':array[a]=1;array[a+1]=0;array[a+2]=0;array[a+3]=0;
     case '9':array[a]=1;array[a+1]=0;array[a+2]=0;array[a+3]=1;
     case 'a':array[a]=1;array[a+1]=0;array[a+2]=1;array[a+3]=0;
     case 'b':array[a]=1;array[a+1]=0;array[a+2]=1;array[a+3]=1;
     case 'c':array[a]=1;array[a+1]=1;array[a+2]=0;array[a+3]=0;
     case 'd':array[a]=1;array[a+1]=1;array[a+2]=0;array[a+3]=1;
     case 'e':array[a]=1;array[a+1]=1;array[a+2]=1;array[a+3]=0;
     case 'f':array[a]=1;array[a+1]=1;array[a+2]=1;array[a+3]=1;
     break;
    }
    a=a+4;
    }
    return 0;

    }

    感觉程序有问题

    展开全文
  • “调幅”就是调制幅度,高频信号的幅度随着音频信号幅度的改变而改变,当音频信号的幅度高时高频信号的幅度也跟着高,反之跟着变低,形成音频信号的幅度包络,但高频信号的频率没有变; 二、源代码 function ...

    一、简介

    “调幅”就是调制幅度,高频信号的幅度随着音频信号幅度的改变而改变,当音频信号的幅度高时高频信号的幅度也跟着高,反之跟着变低,形成音频信号的幅度包络,但高频信号的频率没有变;

    二、源代码

    function varargout = AMtiaozhi(varargin)
    % AMTIAOZHI M-file for AMtiaozhi.fig
    %      AMTIAOZHI, by itself, creates a new AMTIAOZHI or raises the existing
    %      singleton*.
    %
    %      H = AMTIAOZHI returns the handle to a new AMTIAOZHI or the handle to
    %      the existing singleton*.
    %
    %      AMTIAOZHI('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in AMTIAOZHI.M with the given input arguments.
    %
    %      AMTIAOZHI('Property','Value',...) creates a new AMTIAOZHI or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before AMtiaozhi_OpeningFunction gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to AMtiaozhi_OpeningFcn via varargin.
    %
    %      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
    %      instance to run (singleton)".
    %
    % See also: GUIDE, GUIDATA, GUIHANDLES
    
    % Edit the above text to modify the response to help AMtiaozhi
    
    % Last Modified by GUIDE v2.5 10-May-2010 16:42:40
    
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @AMtiaozhi_OpeningFcn, ...
                       'gui_OutputFcn',  @AMtiaozhi_OutputFcn, ...
                       'gui_LayoutFcn',  [] , ...
                       'gui_Callback',   []);
    if nargin & isstr(varargin{1})
        gui_State.gui_Callback = str2func(varargin{1});
    end
    
    if nargout
        [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
        gui_mainfcn(gui_State, varargin{:});
    end
    % End initialization code - DO NOT EDIT
    
    
    % --- Executes just before AMtiaozhi is made visible.
    function AMtiaozhi_OpeningFcn(hObject, eventdata, handles, varargin)
    % This function has no output args, see OutputFcn.
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to AMtiaozhi (see VARARGIN)
    
    % Choose default command line output for AMtiaozhi
    handles.output = hObject;
    
    % Update handles structure
    guidata(hObject, handles);
    
    % UIWAIT makes AMtiaozhi wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
    
    
    % --- Outputs from this function are returned to the command line.
    function varargout = AMtiaozhi_OutputFcn(hObject, eventdata, handles)
    % varargout  cell array for returning output args (see VARARGOUT);
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Get default command line output from handles structure
    varargout{1} = handles.output;
    
    
    % --- Executes during object creation, after setting all properties.
    function popupmenu1_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to popupmenu1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
    
    % Hint: popupmenu controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc
        set(hObject,'BackgroundColor','white');
    else
        set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
    end
    set(hObject, 'String', {'调制信号', '载波信号','已调波信号'});
    
    
    % --- Executes on selection change in popupmenu1.
    function popupmenu1_Callback(hObject, eventdata, handles)
    % hObject    handle to popupmenu1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Hints: contents = get(hObject,'String') returns popupmenu1 contents as cell array
    %        contents{get(hObject,'Value')} returns selected item from popupmenu1
    
    
    % --- Executes during object creation, after setting all properties.
    function popupmenu2_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to popupmenu2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    empty - handles not created until after all CreateFcns called
    
    % Hint: popupmenu controls usually have a white background on Windows.
    %       See ISPC and COMPUTER.
    if ispc
        set(hObject,'BackgroundColor','white');
    else
        set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
    end
    

    三、运行结果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    四、备注

    完整代码或者代写添加QQ912100926
    往期回顾>>>>>>
    【信号处理】基于GUI界面之处理录音与音频【Matlab 123期】
    【信号处理】CDR噪声和混响抑制【含Matlab源码 198期】
    【信号处理】最小二乘法解决稀疏信号恢复问题【Matlab 199期】
    【信号处理】遗传算法的VST混响【Matlab 200期】
    【信号处理】HMM的睡眠状态检测【Matlab 201期】
    【信号处理】小波变换的音频水印嵌入提取【Matlab 202期】
    【信号处理】ICA算法信号分离【Matlab 203期】
    【信号处理】基于GUI界面的脉搏信号之脉率存档【Matlab 204期】
    【信号处理】基于GUI界面的虚拟信号发生器(各种波形)【Matlab 205期】
    【信号处理】基于GUI界面信号发生器之电子琴【Matlab 206期】
    【信号处理】数字电子琴设计与实现【Matlab 207期】
    【雷达通信】雷达数字信号处理【Matlab 214期】
    【雷达通信】线性调频(LFM)脉冲压缩雷达仿真【Matlab 215期】
    【雷达通信】距离多普勒(RD)、CS、RM算法的机载雷达成像【Matlab 216期】
    【雷达通信】《现代雷达系统分析与设计》【Matlab 217期】
    【语音处理】基于matlab GUI语音信号处理平台【含Matlab源码 218期】
    【语音采集】基于GUI语音信号采集【Matlab 219期】

    展开全文
  • 基于MATLAB有噪声语音信号的处理,关于滤波器的各种调制和解调过程,方波信号 还有正弦信号
  • 信号与系统-语音信号调制解调

    千次阅读 2018-09-25 17:21:16
    1 三角波的matlab谐波叠加和当信号周期和宽度变化时的频谱变化 t=-3:0.001:3; omega=2*pi/2; y=(sawtooth(2*pi*0.5*(t+1),0.5)+1)/2; plot(t,y); grid on; xlabel('t'),ylabel('三角波'); axis([-3 3 -1.5 ...
  • 语音信号处理与分析及其MATLAB实现,可以对语音信号进行采集,调制和输出
  • 在本设计中,应用了一种通过调制原始语音信号来产生高频噪声信号的方法。除此之外,设计了两种不同的滤波器来对加噪后的语音信号进行滤波处理。 关键词:语音信号分析与处理;数字信号;信号加噪;数字滤波器
  • “调幅”就是调制幅度,高频信号的幅度随着音频信号幅度的改变而改变,当音频信号的幅度高时高频信号的幅度也跟着高,反之跟着变低,形成音频信号的幅度包络,但高频信号的频率没有变; 二、源代码 function ...
  • 【语音处理】基于matlab GUI语音信号处理【含Matlab源码 290期】 【语音采集】基于matlab GUI语音信号采集【含Matlab源码 291期】 【语音调制】基于matlab GUI语音幅度调制【含Matlab源码 292期】 【语音合成】基于...
  • 做出来的部分如上。由于是第一次用simulink,这里除了am信号通信部分,对simulink的使用理解也做一下简单记录。...首先,信号发送部分,题目是语音信号,本来想自己录制一段语音进行发送接收,但是matlab ...
  • 这个界面涉及功能众多,其中包括语音信号的观察分析、音色变换、AM调制解调、减抽样、加噪去噪、相频分析和幅频滤波等,最重要的是对MATLAB中函数的掌握,通过不同函数的组合实现你想要实现的功能。 本篇不会给出...
  • 基于MATLAB语音分析处理系统

    千次阅读 2020-11-18 22:14:23
    其中时域的分析处理有两种方法:一种是进行语音信号分析,这属于线性处理的范畴,主要是通过信号的加减、时移、倍乘、卷积、求相关函数等来实现;另一种是生成和变换成各种调制信号,这属于非线性的范畴,主要是对...
  • 课程设计你想要的我们都有快点来关注我吧课设题目:语音信号的 A 律 13 折线 PCM 编解码的 MATLAB 实现。课设题目要求:任务:(1)录制不短于 5 秒钟的音频信号,利用 Matlab 进行抽样、量化、编码实现 A律 13 折线 ...
  • 基于matlab语音通信过程仿真报告 整体流程设计 样本音频信号的频谱分析 对音频信号的滤波 对音频信号进行PCM编码 对编码后的信号进行汉明编码 对编码后的信号进行qpsk调制 发送信号进入AWGN信道 对接收到的信号...
  • 设计主要是仿真通信系统中的信源编码和频带传输,用MATLAB中的Simulink 进行...录制一段语音信号,对其进行DPCM编码后再进行PSK调制,送入加性高斯白噪声信道传输,在接收端对其进行PSK解调和DPCM解码以恢复原信号。
  • MATLAB实现的AM、FM调制

    2009-04-11 17:02:51
    利用m语言编写的对采集的语音信号进行频率和幅度的调制,得出了对应的调制输出波形
  • 实验原理1.LPC分析(1)基本思想:(2)语音信号的LPC分析2. PCM编译码(1)抽样信号的量化原理(2)脉冲编码调制的基本原理五.实验结果六.实验分析 一.实验目的 实现发送端记录声音信号,经过有限带宽信道(假设...
  • 该语音通信过程的由matlab录音产生一段语音信号,加一正弦噪声,经自适应对消滤波器后,再经一完成的通信系统到达接收端,并恢复出语音信号。这一过程包括了A /D采样、自适应滤波、A /D采样、PCM、信道编码、BPSK...
  • 随着科技的发展,数字信号处理器DSP(Digital Signal Processor)被广泛的应用在各种电子产品中,从便携的个人数字...若以所处理信号的特点来讲,又可分为语音信号处理,图像信号处理,一维信号处理和多维信号处理等。
  • 其中以脉冲编码调制(即PCM,Pluse Code Modulation)为代表的波形编码在语音信号处理的过程中应用最为广泛,是数字通信系统发展的一次飞跃。 1.2 PCM技术的研究现状   脉冲编码调制的概念是1937年由法国工程师...
  • Matlab】PCM语音编解码 ...其中以脉冲编码调制(即PCM,Pluse Code Modulation)为代表的波形编码在语音信号处理的过程中应用最为广泛,是数字通信系统发展的一次飞跃。 1.2 PCM技术的研究现状   
  • matlab 音频处理工具箱

    2014-03-30 10:53:08
    matlab的可视化语音信号处理软件,可以轻松的处理各类语音信号,进行FFT和LPC调制
  • Matlab系统建模实践

    2021-01-07 11:41:40
    语音数字化量化噪声的改善(脉冲编码调制PCM) ...(1) 采集语音信号(模拟信号),并画出其时域图与频域图 (2) 对信号进行滤波处理 (3) 利用非均匀量化方法对信号进行编码 (4) 对编码过的信号进

空空如也

空空如也

1 2 3
收藏数 45
精华内容 18
关键字:

matlab语音信号调制

matlab 订阅