AM调幅波时域图像除幅值平移外无变化,频谱图为0。
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,'幅度');
经试验调试发现,频域调幅信号没有波形的原因是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,'幅度');
我选用的是一段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,'幅度');
可以在命令行输入fdatool打开,也可以从下面的方法进入。
进入matlab,选择APP,注意这里的路径需要为matlab安装目录下的bin文件夹,不然有可能报错。
在APP下拉菜单里面找到“信号处理与通信”里面的“Filter Designer”,点击打开
打开后在如下图所示的界面中第一栏可以选择滤波器类型(低通、高通、带通等)以及滤波方法(巴特沃斯、切比雪夫、椭圆等),每种滤波方法特性不一样。第二栏指定滤波的阶数,可以指定也可以采用系统给出的最小阶数。第三栏设置采样频率和截止频率。第四栏一般不管。
如下图设置为低通、切比雪夫二型、15阶、采样48000Hz、截止12000Hz的滤波器,选定参数后,点击最下方的Design Filter可以显示当前滤波器的特性曲线,点击上方状态栏的不同图标可以更换去向类型。
将滤波器导出为函数,点击左上角File按钮,如下图选择,即可导出.m格式的Function文件,保存到同一文件夹下,就可以进行调用。使用filter函数调用,示例如下:
z1=filter(Chebyshev_two_high_15_100000_30000,z); %以30kHz为界,分开两路信号
基于new bing部分指引作答:
根据你提供的代码,我注意到你在绘制频谱图时遇到了问题。为了修正这个问题,你可以使用以下代码进行修改:
myRecording = getaudiodata(app.recorder);
L0 = length(myRecording);
t = (0:L0-1)/app.fs;
x = myRecording;
x_am = (2 + x) .* cos(2*pi*8000*t);
plot(app.UIAxes4, t, x);
title(app.UIAxes4, '原始信号时域图像');
xlabel(app.UIAxes4, 't (s)');
ylabel(app.UIAxes4, '幅度');
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));
title(app.UIAxes3, '原始信号频域图像');
xlabel(app.UIAxes3, 'f (Hz)');
ylabel(app.UIAxes3, '幅度');
L = length(x_am);
y = abs(fft(x_am) / L);
f = app.fs * (0:(L/2))/L;
plot(app.UIAxes2, f, y(1:L/2+1));
title(app.UIAxes2, '调幅信号频域图像');
xlabel(app.UIAxes2, 'f (Hz)');
ylabel(app.UIAxes2, '幅度');
这些修改将绘制原始信号和调幅信号的时域图像,并绘制它们的频谱图像。注意,代码中已经添加了标题和坐标轴标签以提高图像的可读性。确保调整图形对象的名称,以便与你的应用程序中的对象匹配。