Ta đặt tên hàm mới này thành new_conv.Hàm này sử dụng kĩ thuật overlap-save.Chia tín hiệu dài thànhnhiều khối nhỏ.Sử dung fft để tính đầu ra .chỉ lấy L điểm cuối của mỗi khối.Đoạn chương
Trang 1Họ Tên : Nguyễn Kim Thành
MSSV : 20083484
Lớp : Kỹ Thuật Đo – K53
Bài tập lớn : XỬ LÝ SỐ TÍN HIỆU
Project 5: HIGH-SPEED CONVOLUTION
EXERCISE 5.1:FFT conv Function
1.Viết lại hàm conv sử dụng thuật toán overlap-save
Ta đặt tên hàm mới này thành new_conv.Hàm này sử dụng kĩ thuật overlap-save.Chia tín hiệu dài thànhnhiều khối nhỏ.Sử dung fft để tính đầu ra chỉ lấy L điểm cuối của mỗi khối.Đoạn chương trình viết trên MATLAB như sau:
%Đầu vào là 2 tín hiệu cần nhân chập và chiều dài của FFT ta sẽ sử dụng
%Đầu ra là tín hiệu y là chập tuyến tính cần tìm
Trang 2Ta cũng có thể dung kĩ thuật overlap-add để tính nhân châp.Kĩ thuât này sẽ lấy L điểm đầu.
%Đầu vào là 2 tín hiệu cần nhân chập và chiều dài của FFT ta sẽ sử dụng
%Đầu ra là tín hiệu y là chập tuyến tính cần tìm
N = 2.^(ceil(log(N)/log(2))); % Đưa N thành lũy thừa của 2
L = N- nb + 1; %Chiều dài của khối chập
Trang 3%%Kết quả hài hàm trên giống nhau.
EXERCISE 5.2:Crossover Point
A,B,C.
Ta khởi tạo 2 tín hiệu ngẫu nhiên có chiều dài biến thiên trong khoảng từ 80 đến 800.Khoảng này
có thể thay đổi tùy theo tốc độ của máy tính.Chương trình thử nghiệm đo tốc độ của hàm new_conv ta vừa viết với hàm conv của MATLAB như sau:
for i=80:800
x=1.8e+20*randn(1,i)+7*j; % tạo tín hiệu ngẫu nhiên x
y=1.8e+20*randn(1,i)+8*j; % Tạo tín hiệu ngẫu nhiên y
tic;conv(x,y);t1(i-79)=toc; %Tính thời gian của hàm conv
tic;new_conv(x,y);t2(i-79)=toc; %Tính thời gian của hàm new_ conv
end;
Trang 4D.Vẽ đồ thị thời gian thự hiện 2 hàm để xác định lúc nào thì hàm ta mới viết tỏ ra hiệu quả
n=80:800;
>> plot(n,10000*t1,n,10000*t2);
Nhìn trên đồ thị ta thấy 2 đồ thị cắt nhau tại những điểm là lũy thừa của 2(các điểm cắt là tại
N=128,256,512.Khi chiều dài của tín hiệu gần đến lũy thừa của 2 thì thời gian tính toán tăng đột
ngột.Nhưng khi đến lũy thừa của 2 thì thời gian tinh toán giảm đến mưc thấp nhất.Vì vậy tại những độ dàinhỏ hàm conv thì nhanh nhưng với những độ dài lớn thì hàm new_conv tỏ ra nhanh hơn rõ rệt
E.Kiểm tra với đầu vào là tín hiệu thực.
Nếu đầu vào là tín hiệu thực thì DFT của chúng là một tín hiệu liên hợp đối xứng Chính vì vậy để tính IFFT nhanh hơn ta có thể mặc định tín hiệu vào là ‘symmetric’.Một chỉnh sửa nhỏ của hàm new_conv ta được 1 hàm mới Đặt tên hàm này là new_conv2
Đoạn code trên MATLAB như sau:
%%%%%%%%%%%%%%
%Đầu vào là 2 tín hiệu cần nhân chập và chiều dài của FFT ta sẽ sử dụng
%Đầu ra là tín hiệu y là chập tuyến tính cần tìm
Trang 6EXERCISE 5.3:Compare with FIR Filtering
Trang 7D.Vẽ 2 hàm thời gian thực hiện để so sánh tốc độ của chúng.
Ta sẽ viết tiếp đoạn chương trình đã viết ở phần C
%%%%%%%%%
Trang 8t1 =
0.1321 0.0496 0.0345 0.0276 0.0340 0.0405 0.0358 0.0328 0.0435 0.0479 0.0675 0.0811
Trang 9EXERCISE 3.1:Definition of Resolution
A.Khởi tạo và vẽ phổ biên độ với tần số thay đổi
Ta viết 1 vòng lặp để thay đổi tần số và quan sát phổ pha.Chương trình trên MATLAB như sau:
Trang 10plot(n,abs(fft(y,64)));title('pho bien do cua y[n]');xlabel('n');
ylabel('A[n]');
end
Nhap w2=2
Trang 11Nhap w2=1.5
Nhap w2=1.3
Trang 12Nhap w2=1.2
Nhap w2=1.1
%%%%%%%%%
Trang 13Ta nhận thấy khi ŒW giảm dần từ 1 xuống 0.1 thì 2 đỉnh dần tiến về nhau.khi ŒW=0.1 thì gần như ta chỉquan sát thấy 1 đỉnh.
Trang 14Nhap w2=1.3
Nhap w2=1.1
Trang 15Nhap w2=1.08
Nhap w2=1.05
Trang 16Nhận thấy kết quả vẫn giống như phần A nhưng ŒW nhỏ nhất để 2 đỉnh hợp lại thành 1 giảm xuống còn ŒW=0.05
Trang 17Nhap w2=1.3
Nhap w2=1.1
Trang 18Nhap w2=1.04
Nhận thấy kết quả vẫn giống như phần A nhưng ŒW nhỏ nhất để 2 đỉnh hợp lại thành 1 giảm xuống còn ŒW=0.04
Tóm lại để phân biệt được các đỉnh thì ŒW ≥ 2π /L
EXERCISE 3.2:Peak Finding
A,B.Viết hàm Peak Finding
Hàm trên được viết trên MATLAB như sau:
Trang 19end
%%%%%%%%%%
C.Kiểm tra hàm trên với cửa sổ chữ nhật
Chương trình trên MATLAB như sau:
Ta thử với tín hiệu hình sin y[n]
Columns 15 through 28
-27.0092 25.9882 -22.3081 16.1420 -7.9718 -1.4667 11.2715 -20.4830 28.2001 -33.6896 36.4741 -36.3885 33.5970 -28.5695
Columns 29 through 42
22.0192 -14.8106 7.8491 -1.9662 -2.1855 4.2128 -4.0296 1.8643 1.7736 -6.1625 10.4659-13.8443 15.5674 -15.1135
Columns 43 through 56
12.2413 7.0268 0.1404 8.6015 17.5069 25.9199 32.9315 37.7732 39.9115 39.1150 35.4821 29.4292 -21.6382 12.9721
Columns 57 through 64
Trang 22EXERCISE 3.3:Measure Resolution
A.Hàm peak_finding ta vừa viết có thể trả về số lượng peak của tín hiệu.Ta có thể kiểm tra nó:
B.Viết 1 script khởi tạo tín hiệu và tính toán
Chương trình viết trên MATLAB như sau:
Trang 24delta=0.03 Score=0 phantram
Nhận thấy khi ŒW tiến gần đến 4π /L=0.19 thì score =100%
Khi ŒW<2π /L=0.09 thì score tiến về 0%
Ta có thể chỉnh sửa script trên để không những tính điểm theo ŒW mà còn theo độ dài L của FFT(Tốt nhất là lấy L là lũy thừa của 2).Sau đó script này có thể vẽ đồ thị của score phụ thuộ ŒW và L.Đoạn scriptđược sửa lại như sau:
%%%%%%%%%%
function resolution1(s)
if (~strcmp(s,'chunhat'))&(~strcmp(s,'hamming'))&(~strcmp(s,'hanning'))
disp('Khong phai cua so.chi chon:chunhat,hamming,hanning');
Trang 26delta=0.08 Score=30 phantram
Trang 27delta=0.035 Score=0 phantram
D.kiểm tra với hàm cửa sổ hamming,hanning
Trang 28delta=0.15 Score=80 phantramNhap delta=0.14
delta=0.14 Score=30 phantramNhap delta=0.13
delta=0.13 Score=40 phantramNhap delta=0.12
delta=0.12 Score=30 phantramNhap delta=0.11
delta=0.11 Score=20 phantramNhap delta=0.1
delta=0.1 Score=40 phantramNhap delta=0.09
delta=0.09 Score=0 phantramNhap delta=0.08
delta=0.08 Score=0 phantramNhap delta=1