Q_shing 2023-06-24 00:13 采纳率: 100%
浏览 96
已结题

matlab app 录音信号AM调幅时频域分析

AM调幅波时域图像除幅值平移外无变化,频谱图为0。

img

img

myRecording=getaudiodata(app.recorder);
            L0= length(myRecording);
            t = (0:L0-1)/app.fs;
%             assignin('base','t',t);
            x=myRecording;
%             assignin('base','x',x);
            x_am=(2+x).*cos(2*pi*8000*t);
            plot(app.UIAxes4,t,x);
            plot(app.UIAxes,t,x_am);
            title(app.UIAxes,'调幅信号时域图像');
            xlabel(app.UIAxes,'t(s)'), ylabel(app.UIAxes,'幅度')
            L1=length(x);
            y1=abs(fft(x)/L1);
            f1=app.fs*(0:(L1/2))/L1;
            plot(app.UIAxes3, f1,y1(1:L1/2+1)); %绘制频域图像
%             xlim(app.UIAxes3,[4000,12000]);
            L=length(x_am);
%             NFFT = 2^nextpow2(L); %确定 FFT 变换的长度
%             y = fft(x_am, NFFT)/L;
%             f = app.fs/2*linspace(0,1,NFFT/2+1); %频率向量
%             plot(app.UIAxes2, f,2*abs(y(1:NFFT/2+1))); %绘制频域图像
            y=abs(fft(x_am)/L);
            L0=length(y);
            f=app.fs*(0:(L0/2))/L;
            plot(app.UIAxes2, f,y(1:L/2+1)); %绘制频域图像
            title(app.UIAxes2,'调幅信号频域图像');
            xlim(app.UIAxes2,[4000,12000]);
%             ylim(app.UIAxes2,[-0.0005,0.001]);
            xlabel(app.UIAxes2,'f(Hz)'), ylabel(app.UIAxes2,'幅度');


  • 写回答

3条回答 默认 最新

  • 鹅毛在路上了 优质创作者: 嵌入式与硬件开发技术领域 2023-06-24 08:17
    关注

    经试验调试发现,频域调幅信号没有波形的原因是xlim范围选择不准确,且由于频域调幅信号部分峰值(1.5左右)特别大,导致有用信号频段不是很明显(0.01),就像在高楼面前放了一颗树,请改用axis()函数同时限制横轴纵轴范围:

    axis([2000, 4000, 0, 0.01]);
    

    而时域AM图像怀疑可能是app.UIAxes选择的名称不对,在.m测试脚本中注释掉带有app.X的地方是可以有效果的。

    clc,clear,close all;
    [myRecording,fs] = audioread('chirp.wav');
    %load data
    
    L0= length(myRecording);
    t = (0:L0-1)/fs;
    %             assignin('base','t',t);
    x=myRecording;
    %             assignin('base','x',x);
    x_am=(2+x).*cos(2*pi*8000*t);
    subplot(221)
    plot(t,x);
    % plot(app.UIAxes4,t,x);
    subplot(222)
    plot(t,x_am);
    title('调幅信号时域图像');
    xlabel('t(s)'), ylabel('幅度')
    % xlabel('t(s)'), ylabel(app.UIAxes,'幅度')
    % plot(app.UIAxes,t,x_am);
    % title(app.UIAxes,'调幅信号时域图像');
    % xlabel(app.UIAxes,'t(s)'), ylabel(app.UIAxes,'幅度')
    L1=length(x);
    y1=abs(fft(x)/L1);
    f1=fs*(0:(L1/2))/L1;
    % f1=app.fs*(0:(L1/2))/L1;
    subplot(223)
    plot(f1,y1(1:L1/2+1)); %绘制频域图像
    % plot(app.UIAxes3, f1,y1(1:L1/2+1)); %绘制频域图像
    %             xlim(app.UIAxes3,[4000,12000]);
    L=length(x_am);
    %             NFFT = 2^nextpow2(L); %确定 FFT 变换的长度
    %             y = fft(x_am, NFFT)/L;
    %             f = app.fs/2*linspace(0,1,NFFT/2+1); %频率向量
    %             plot(app.UIAxes2, f,2*abs(y(1:NFFT/2+1))); %绘制频域图像
    y=abs(fft(x_am)/L);
    L0=length(y);
    f=fs*(0:(L0/2))/L;
    % f=app.fs*(0:(L0/2))/L;
    subplot(224)
    plot(f,y(1:L/2+1)); %绘制频域图像
    title('调幅信号频域图像');
    axis([2000, 4000, 0, 0.01]);
    xlabel('f(Hz)'), ylabel('幅度');
    % save('data.mat', 'x_am')
    % plot(app.UIAxes2, f,y(1:L/2+1)); %绘制频域图像
    % title(app.UIAxes2,'调幅信号频域图像');
    % xlim(app.UIAxes2,[4000,12000]);  %范围有误,不能仅设置xlim
    %             ylim(app.UIAxes2,[2000, 4000, 0, 0.01]);
    % xlabel(app.UIAxes2,'f(Hz)'), ylabel(app.UIAxes2,'幅度');
    

    img

    我选用的是一段chirp啁啾信号,所以出图效果和你的有些差别。

    将输入信号更换为正弦波AM调制更为明显:

    clc,clear,close all;
    % [myRecording,fs] = audioread('chirp.wav');
    % load data
    fs = 200;
    n = -2:1/fs:2;
    myRecording = sin(2*pi*500/fs*n);
    
    L0= length(myRecording);
    t = (0:L0-1)/fs;
    %             assignin('base','t',t);
    x=myRecording;
    %             assignin('base','x',x);
    x_am=(2+x).*cos(2*pi*4000/fs*t);
    subplot(221)
    plot(n,x);
    % plot(app.UIAxes4,t,x);
    subplot(222)
    plot(t,x_am);
    title('调幅信号时域图像');
    xlabel('t(s)'), ylabel('幅度')
    % xlabel('t(s)'), ylabel(app.UIAxes,'幅度')
    % plot(app.UIAxes,t,x_am);
    % title(app.UIAxes,'调幅信号时域图像');
    % xlabel(app.UIAxes,'t(s)'), ylabel(app.UIAxes,'幅度')
    L1=length(x);
    y1=abs(fft(x)/L1);
    f1=fs*(0:(L1/2))/L1;
    % f1=app.fs*(0:(L1/2))/L1;
    subplot(223)
    plot(f1,y1(1:L1/2+1)); %绘制频域图像
    % plot(app.UIAxes3, f1,y1(1:L1/2+1)); %绘制频域图像
    %             xlim(app.UIAxes3,[4000,12000]);
    L=length(x_am);
    %             NFFT = 2^nextpow2(L); %确定 FFT 变换的长度
    %             y = fft(x_am, NFFT)/L;
    %             f = app.fs/2*linspace(0,1,NFFT/2+1); %频率向量
    %             plot(app.UIAxes2, f,2*abs(y(1:NFFT/2+1))); %绘制频域图像
    y=abs(fft(x_am)/L);
    L0=length(y);
    f=fs*(0:(L0/2))/L;
    % f=app.fs*(0:(L0/2))/L;
    subplot(224)
    plot(y(1:L/2+1)); %绘制频域图像
    title('调幅信号频域图像');
    % axis([2000, 4000, 0, 0.01]);
    xlabel('f(Hz)'), ylabel('幅度');
    % save('data.mat', 'x_am')
    % plot(app.UIAxes2, f,y(1:L/2+1)); %绘制频域图像
    % title(app.UIAxes2,'调幅信号频域图像');
    % xlim(app.UIAxes2,[4000,12000]);
    %             ylim(app.UIAxes2,[2000, 4000, 0, 0.01]);
    % xlabel(app.UIAxes2,'f(Hz)'), ylabel(app.UIAxes2,'幅度');
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月2日
  • 已采纳回答 6月24日
  • 创建了问题 6月24日