第二章 离散时间信号与离散时间系统

与本章内容有关的Matlab文件主要是信号的产生、卷积和相关计算。

Contents

  1. rand
  2. randn
  3. sinc
  4. chirp
  5. conv
  6. xcorr

随机数产生 - rand

产生一均匀分布的白噪声信号 $u[n]$,画出其波形,并检验其分布情况。

rand可以用来产生均值为0.5,幅度在0-1之间均匀分布的伪随机数,我们在数字信号处理中使用 他近似均匀分布的白噪声信号。

均值为

$$\mu_u = \frac{1}{N}\sum_{n=0}^{N-1}u[n]$$

方差为

$$\sigma_u^2 = \frac{1}{N}\sum_{n=0}^{N-1}(u[n]-\mu_u)^2$$

clear                       % 清除内存中可能保留的Matlab的变量
N = 50000;                  % u[n] 的长度
u=rand(1,N);                % 调用rand,得到均匀分布的伪随机数
u_mean = mean(u);           % 求u[n]的均值
power_u = var(u);           % 求u[n]的方差
subplot(211)                % 在一个图上分成上下两个子图
plot(u(1:100));grid on;
ylabel('u[n]');
subplot(212);
hist(u,50);grid on;
ylabel('histogram of u[n]')

随机数产生 - randn

产生均匀分布、均值为0、功率为0.01的白噪声信号$$u[n]$$

p=0.1;N=500000;
u = randn(1,N);a=sqrt(p);
u=u*a;power_u = var(u);
subplot(211)
plot(u(1:100))
subplot(212)
hist(u,50);

Sinc函数

利用sinc文件产生sinc信号并显示波形 对于连续信号:

$$sinc(t) = \frac{\sin t}{t}$$

对于离散信号:

$$sinc(w)=\frac{\sin Nw}{\sin w}$$

n = 200;
stept = 4*pi/n;
t = -2*pi:stept:2*pi;
y=sinc(t);
clf;
plot(t,y,t,zeros(size(t)));grid on;
axis tight                          % 将坐标轴紧凑显示

Chirp信号

产生一个Chirp信号,其表达式为

$$ x(t) = \exp(j\alpha t^2) $$

该信号的频率是时变的,在雷达信号处理中有着广泛的应用。调用格式

x = chirp(T,F0,T1,F1)

其中T是横轴时间范围向量,F0是起始频率,F1是在T1时刻所具有的频率。

t = 0:0.001:1;
y = chirp(t,0,1,125); plot(t,y); % 产生Chirp信号

产生周期sinc信号

t = -10:0.01:10;
y = diric(t,5); plot(t,y);              % 产生周期sinc信号

产生高斯信号 For example, plot a 50 kHz Gaussian RF pulse with 60% bandwidth and sampled at a rate of 1 MHz. Truncate the pulse where the envelope falls 40 dB below the peak.

tc = gauspuls('cutoff',50E3,.6,[],-40);
t  = -tc : 1E-6 : tc;
y = gauspuls(t,50E3,.6); plot(t,y);     % 产生高斯信号

产生脉冲串信号 % Example 1: Generate an asymmetric sawtooth waveform with a % repetition frequency of 3 Hz and a sawtooth width of 0.1 sec. % The signal is to be 1 second long with a sample rate of 1kHz.

t = 0 : 1/1E3 : 1;  % 1 kHz sample freq for 1 sec
D = 0 : 1/3 : 1;    % 3 Hz repetition freq
y = pulstran(t,D,'tripuls',0.1,-1); plot(t,y); % 产生脉冲串信号

产生三角波脉冲信号 % Create a triangular pulse with width 0.4.

fs = 10000;         % Sampling frequency (samples/sec)
t = -1:1/fs:1;      % Time Vector
w = .4;             % Triangle Width
y = tripuls(t,w);   % Sampled aperiodic triangle
plot(t,y);
xlabel('Time (sec)');ylabel('Amplitude');

卷积 - Conv

实现两个序列的线性卷积。

$$ x[n] = \{1,2,3,4,5\} $$

$$ h[n] = \{6,2,3,6,4,2\} $$

计算$$ y[n] = x[n] \circest y[n]$$

N=5;M=6;L=N+M-1;
x = [1,2,3,4,5];nx=0:N-1;
h=[6,2,3,6,4,2];nh=0:M-1;
y=conv(x,h);ny=0:L-1;
subplot(131);stem(nx,x,'.');xlabel('n');ylabel('x[n]');grid on;
subplot(132);stem(nh,h,'.');xlabel('n');ylabel('h[n]');grid on;
subplot(133);stem(ny,y,'.');xlabel('n');ylabel('y[n]');grid on;

互相关 - Xcorr

可以用来计算信号的自相关和两个不同信号的互相关

rxy = xcorr(x,y)
rx = xcorr(x,Mlag,'flag')

格式1是求序列x,y的互相关; 格式2是求序列x的自相关,Mlag表示rx的单边长度,总的长度为2Mlag+1;flag是定标标志,若flag=biased,则表示是有偏估计,需要将rx都除以N;若flag=unbiased,则表示无偏估计,需要将rx除以(N-abs(m))

N = 500;p1=1;p2=0.1;f=1/8;Mlag=60;n=[0:N-1];
u=randn(1,N);
u1=u*sqrt(p1);u2=u*sqrt(p2);

s=sin(2*pi*f*n);

x1 = u1(1:N)+s;
x2 = u2(1:N)+s;

rx1=xcorr(x1,Mlag,'biased');
rx2=xcorr(x2,Mlag,'biased');

subplot(131);plot(x1);xlabel('n');ylabel('s');grid on;
subplot(132);plot(rx1);xlabel('lag');ylabel('rx1[l]');grid on;
subplot(133);plot(rx2);xlabel('lag');ylabel('rx2[l]');grid on;