本文共 2276 字,大约阅读时间需要 7 分钟。
利用DFT的循环卷积特性,可以用DFT计算线性卷积:
若序列x[k]的长度为N,序列h[k]的长度为M,则**L≥N+M-1点循环卷积等于x[k]与h[k]的线性卷积。
具体操作步骤如下:
线性卷积过程用矩阵表示:
DFT计算有限序列线性卷积:
x = [1 2 3 4];h = [5 6 7];%L = length(x)+length(h)-1;L=4;for L=[4 5 6 7 8 9] XE = fft(x,L); HE = fft(h,L); y1 = ifft(XE.*HE); k1 = 0:L-1; subplot(2,3,L-3); stem(k1,real(y1));axis([0 6 0 55]); s.color = 'red'; hold on k2 = 0:5; y2 = conv(x,h); stem(k2,y2);axis([0 6 0 55]); hold on s.color = 'green'; title('计算不同L的线性卷积结果',L); xlabel('k');ylabel('幅值'); L=L+1;end
当L = length(x) + length(h) - 1时,循环卷积与线性卷积结果相同
x = [1 2 0 1];h = [2 2 1 1];L = length(x)+length(h)-1;XE = fft(x,L);HE = fft(h,L);y1 = ifft(XE.*HE);k = 0:L-1;subplot(3,1,1);stem(k,real(y1));axis([0 6 0 7]);title('由DFT计算线性卷积结果');xlabel('k');ylabel('幅值');y2 = conv(x,h);subplot(3,1,2);stem(k,y2)title('直接计算线性卷积结果');xlabel('k');ylabel('幅值');error = y1-y2;subplot(3,1,3);stem(k,abs(error));xlabel('k');ylabel('幅值');title('误差');
[m,fs]=audioread('女生声音.mp3');L=length(m);N=L/32;m1=m(1:N);fm1=fft(m1);f=(0:N/2-1)*fs/N;subplot(2,1,1)plot(f,abs(fm1(1:N/2))/max(abs(fm1)))title('女生声音频谱');grid on;axis([0,4000,0,1])[m,fs]=audioread('男生声音.mp3');L=length(m);N=L/32;m1=m(1:N);fm1=fft(m1);f=(0:N/2-1)*fs/N;subplot(2,1,2)plot(f,abs(fm1(1:N/2))/max(abs(fm1)))title('男生声音频谱');grid on;axis([0,4000,0,1])
for N = [30 60] L=512; f1=100; f2=120; fs=600 T=1/fs; ws=2*pi*fs; %矩形窗 t=(0:N-1)*T; x=cos(2*pi*f1*t)+cos(2*pi*f2*t); X=fftshift(fft(x,L)); w=(-ws/2+(0:L-1)*ws/L)/(2*pi); plot(w,abs(X)); hold on title('矩形窗N=30 N=60的频谱') ylabel('幅度谱');end
for N = [48 24] L=512; f1=100;f2=150; fs=600; T=1/fs; ws=2*pi*fs; t=(0:N-1)*T; f=cos(2*pi*f1*t)+0.15*cos(2*pi*f2*t); wh=(hamming(N))'; f=f.*wh; F=fftshift(fft(f,L)); w=(-ws/2+(0:L-1)*ws/L)/(2*pi); plot(w,abs(F)); hold on title('Hamming窗N=48 N=24的频谱') xlabel('频率(Hz)')end
[m,fs]=audioread('小星星.wav');L=length(m);N=L/32;m1=m(1:N);fm1=fft(m1);f=(0:N/2-1)*fs/N;plot(f,abs(fm1(1:N/2))/max(abs(fm1)))grid on;axis([0,4000,0,1])title('分析小星星音乐的频谱成分')
转载地址:http://kjugf.baihongyu.com/