matlab如何作出信号频谱图?
1个回答
展开全部
看看这个————matlab如何做频谱分析% ----------------------------------------------------------------------------------------------------------------
% 方案1:“x = a*cos(2*pi*w*t)”的形式:
% ----------------------------------------------------------------------------------------------------------------
% 注意:1.时域的持续时间范围应较大;
% 2.频率w与序列k的对应关系(N为序列总长度):w = 1/dt * k/N;
% 3.采样频率1/dt应大于 w 的2倍
% 4.结果曲线的峰值的横坐标对应的就是w和-w值
% ----------------------------------------------------------------------------------------------------------------
a = 0.75;
w = pi/3;
dt = 0.2;
t = [-30*pi:dt:30*pi];
N = size(t, 2);
x = a*cos(2*pi*w*t);
y = fft(x);
y = fftshift(y);
figure;
subplot(2,1,1);
plot(t,x);
subplot(2,1,2);
plot(1/dt*(-N/2+1:N/2)/N, abs(y));
% ----------------------------------------------------------------------------------------------------------------
% 方案2:“x = a*cos(w*t)”的形式:
% ----------------------------------------------------------------------------------------------------------------
% 注意:1.时域的持续时间范围应较大;
% 2.频率w与序列k的对应关系(N为序列总长度):w = 1/dt *2*pi* k/N;
% 3.采样频率1/dt应大于 w/(2*pi) 的2倍
% 4.结果曲线的峰值的横坐标对应的就是w和-w值
% ----------------------------------------------------------------------------------------------------------------
a = 0.75;
w = pi/3;
dt = 1;
t = [-20*pi:dt:20*pi];
N = size(t, 2);
x = a*cos(w*t);
y = fft(x);
y = fftshift(y);
figure;
subplot(2,1,1);
plot(t,x);
subplot(2,1,2);
plot(1/dt*2*pi*(-N/2:N/2-1)/N, abs(y));
备注:由于使用了fftshift,所以得到的频谱序列关于原点对称,如果不需要负半轴的话自行修改一下就ok了function f=frequency(x,fs)
dtlen=length(x);
t=(0:dtlen-1)/fs;
subplot(211);
plot(t,x);
axis tight;
y=abs(fft(x))*2/dtlen;
ff=(0:dtlen/2-1)*fs/dtlen;
subplot(212);
f=y(1:floor(dtlen/2));
plot(ff,f);
axis tight;
return;
% 方案1:“x = a*cos(2*pi*w*t)”的形式:
% ----------------------------------------------------------------------------------------------------------------
% 注意:1.时域的持续时间范围应较大;
% 2.频率w与序列k的对应关系(N为序列总长度):w = 1/dt * k/N;
% 3.采样频率1/dt应大于 w 的2倍
% 4.结果曲线的峰值的横坐标对应的就是w和-w值
% ----------------------------------------------------------------------------------------------------------------
a = 0.75;
w = pi/3;
dt = 0.2;
t = [-30*pi:dt:30*pi];
N = size(t, 2);
x = a*cos(2*pi*w*t);
y = fft(x);
y = fftshift(y);
figure;
subplot(2,1,1);
plot(t,x);
subplot(2,1,2);
plot(1/dt*(-N/2+1:N/2)/N, abs(y));
% ----------------------------------------------------------------------------------------------------------------
% 方案2:“x = a*cos(w*t)”的形式:
% ----------------------------------------------------------------------------------------------------------------
% 注意:1.时域的持续时间范围应较大;
% 2.频率w与序列k的对应关系(N为序列总长度):w = 1/dt *2*pi* k/N;
% 3.采样频率1/dt应大于 w/(2*pi) 的2倍
% 4.结果曲线的峰值的横坐标对应的就是w和-w值
% ----------------------------------------------------------------------------------------------------------------
a = 0.75;
w = pi/3;
dt = 1;
t = [-20*pi:dt:20*pi];
N = size(t, 2);
x = a*cos(w*t);
y = fft(x);
y = fftshift(y);
figure;
subplot(2,1,1);
plot(t,x);
subplot(2,1,2);
plot(1/dt*2*pi*(-N/2:N/2-1)/N, abs(y));
备注:由于使用了fftshift,所以得到的频谱序列关于原点对称,如果不需要负半轴的话自行修改一下就ok了function f=frequency(x,fs)
dtlen=length(x);
t=(0:dtlen-1)/fs;
subplot(211);
plot(t,x);
axis tight;
y=abs(fft(x))*2/dtlen;
ff=(0:dtlen/2-1)*fs/dtlen;
subplot(212);
f=y(1:floor(dtlen/2));
plot(ff,f);
axis tight;
return;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询