飞道的博客

matlab数字信号处理源码

172人阅读  评论(0)

简单画一维函数曲线

clear all;
     close all;
     t= 0:0.01:10*pi;
     A=1;
     a=-0.4;
     ft=cos(a*t);
     st=sin(a*t);
     axis([-40,5,-2,2]);
     plot(t,ft);
      title('f(t)=cos(a*t)');
      
subplot(2,1,1);
plot(t,ft);
xlabel('w');
ylabel('F1(jw)');
title(' ft=cos(a*t)');

subplot(2,1,2);
plot(t,st);
xlabel('w');
ylabel('F1(jw)');
title(' st=sin(a*t)');

画幅频曲线


b0 = 0.05634;
b1 = [1  1];
b2 = [1 -1.0166 1];
a1 = [1 -0.683];
a2 = [1 -1.4461 0.7957];

b = b0*conv(b1,b2);
a = conv(a1,a2);

[h,w] = freqz(b,a,'whole',2001);


plot(w/pi,20*log10(abs(h)))
ax = gca;
ax.YLim = [-100 20];
ax.XTick = 0:.5:2;
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Magnitude (dB)')

画信号和频谱

离散信号

Fs = 1000;            % Sampling frequency
T = 1/Fs;             % Sampling period
L = 10;             % Length of signal
t = (0:L-1)*T;        % Time vector
S =  sin(2*pi*120*t);

plot(t,S)
title('Signal')
xlabel('t (milliseconds)')
ylabel('X(t)')

DFS

%{
   使用单个输入参数 x 的 fft 计算输入向量或矩阵的 DFT。如果 x 是向量,fft 计算向量的 DFT;如果 x 是矩形数组,fft 计算每个数组列的 DFT。
%例如,创建时间向量和信号:
%}
t = 0:1/100:1-1/100;                     % Time vector
x = sin(2*pi*5*t) + sin(2*pi*40*t);      % Signal
%计算信号的 DFT 以及变换后的序列的幅值和相位。通过将小幅值变换值设置为零来减少计算相位时的舍入误差。

y = fft(x);                               % Compute DFT of x
m = abs(y);                               % Magnitude
y(m<1e-6) = 0;
p = unwrap(angle(y));                     % Phase
%要以度为单位绘制幅值和相位,请键入以下命令:

f = (0:length(y)-1)*100/length(y);        % Frequency vector%归为0~100的量

subplot(3,1,1)
plot(t,x)
xlabel('n');
ylabel('x(n)');
title('Signal')


subplot(3,1,2)
plot(f,m)
xlabel('w');
ylabel('|F1(jw)|');
title('Magnitude')
ax = gca;
%ax.XTick = [15 40 60 85];

subplot(3,1,3)
plot(f,p*180/pi)
xlabel('w');
ylabel('arg(F1(jw))');
title('Phase')
%ax = gca;
%ax.XTick = [15 40 60 85];

转载:https://blog.csdn.net/FourierFisher/article/details/116848592
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场