中国石油大学(北京)
China University of Petroleum
基于MATLAB的数字
信号处理
实验名称:DFT和DCT的应用
姓名:
学号:
日期:2017.4.10
1. 用FFT 计算线性卷积(预习实验指导书p9内容)
两个序列:x1=[1 2 3 4 5 6]; x2=[3 2 1 1 2 3 4],用DFT 求两者的循环卷积,
(1) 取FFT 长度L=10,问哪些点上的循环卷积=线性卷积?
(2) 取FFT 长度L=12,结果又如何?
程序代码:
x1=[1 2 3 4 5 6];x2=[3 2 1 1 2 3 4];Y1=conv(x1,x2);
N=10;m=length(x1)+length(x2)-1;n=0:m-1;
subplot(311);
stem(n,Y1);
title('线性卷积结果');
x1=[x1,zeros(1,N-length(x1))];
x2=[x2,zeros(1,N-length(x1))];
xk1=fft(x1,N);
xk2=fft(x2,N);
Yk=xk1.*xk2;
y1=ifft(Yk,N);
subplot(312);
stem(0:N-1,y1);
title('长度取10的循环卷积结果');
N=12;
x1=[x1,zeros(1,N-length(x1))];
x2=[x2,zeros(1,N-length(x1))];
xk1=fft(x1,N);
xk2=fft(x2,N);
Yk1=xk1.*xk2;
y2=ifft(Yk1,N);
subplot(313);
stem(0:N-1,y2);
title('长度取12的循环卷积结果');
结果:
2. 探地雷达信号谱分析
线性卷积结果
长度取10的循环卷积结
果
长度取12的循环卷积结果
附件一是采样的一组探地雷达数据“radar-data.txt ”, 探地雷达探测的是水泥板的厚度,探地雷达接收的信号中含有水泥板上表面和下表面的反射波,采样率为7000Hz ,
(1) 读取这组数据,画出其的时域波形;
(2) 用DFT 对这组数据进行谱分析,画出信号的幅谱图,横轴采用模拟频率;
(3) 检测出上、下表面反射波的频率。
读取数据文件参考程序段如下:
d=load('radar-data.txt');
plot(d);grid
程序代码:
clear;
d=load('radar-data.txt');
subplot(211);plot(d);
grid
Fs=7000;
N=2000;
n=0:N-1;
Xk=fft(d,N);
f=n/N*Fs/(2*pi);
subplot(212);plot(f,abs(Xk));grid
a=max(abs(Xk));
max1=0;
for f=280:1:290;
if abs(Xk)>max1;
max1=abs(Xk);
end
if abs(Xk)<max1;
max2=abs(Xk);
end
end
结果:
-1-0.5
0.5
1
05
10
15
20
3. 基于DCT的图象压缩
附件二是像素为256*256的灰度图像“lena.bmp”,用DCT对该图像进行压缩。
(1)将Lena(256*256)分成8*8的块;
(2)做8*8块的DCT;
(3)用模板Mask将高频DCT系数去掉;
(4)做IDCT恢复压缩后的图象;
(5)改变Mask,观察压缩后的图象的失真情况。
(6)将Lena(256*256)分成16*16的块,重复(2)~(5)步骤。
图像压缩参考程序如下:
I=imread('lena256_256.bmp','bmp');
Mask1=[1 1 1 1 1 1 1 0;
1 1 1 1 1 1 0 0;
1 1 1 1 1 0 0 0;
1 1 1 1 0 0 0 0;
1 1 1 0 0 0 0 0;
1 1 0 0 0 0 0 0;
1 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0;];
for i=1:32
for j=1:32
J1((i-1)*8+1:i*8,(j-1)*8+1:j*8)=idct2(dct2(I((i-1)*8+1:i*8,(j-1)*8+1:j*8)).*Mask1);
end
end
imshow(I,[]);title('Original Image');
figure;
imshow(J1,[]);title('compress Image');
结果:
8*8
改变高频信号:
16*16
Original Image
compress Image
Original Image
compress Image
Original Image compress Image。