⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filterbank8.m

📁 8 通道双正交余弦调制滤波器组实现
💻 M
字号:
%************************************************************%
% 8 通道双正交余弦调制滤波器组实现
% 原型滤波器的实现 利用matlab的滤波器设计工具
% 滤波器的采样频率为 Fs:20000Hz 设计的低通原型的通带频率为625Hz 阻带衰减80db
% 滤波器的系数长度为512
clear; clc;
fid=fopen('fcoff.txt','r'); 
if(fid==-1)
    fprintf('cannot open the file!\n');
    return;
end
h0_str=fscanf(fid,'%s');
fclose(fid);
h0=str2num(h0_str);
clear h0_str;

% 8个分析滤波器和8个综合滤波器系数实现
Fs=10000;
M=8;                                 % 通道数
Delay = 2*2*M;                       % Delay = 2*s*M+d,其中s为正整数,0<= d <= 2*M-1
Theta = pi/4;
n = length(h0);
Hkn = zeros(M,n);
Gkn = zeros(M,n);
for k = 1:M
    for i = 1:n
        Hkn(k,i)=2*h0(i)*cos(((k-1)+0.5)*(i-1-Delay/2)*pi/M + (-1)^(k-1)*pi/4);
        Gkn(k,i)=2*h0(i)*cos(((k-1)+0.5)*(i-1-Delay/2)*pi/M - (-1)^(k-1)*pi/4);
    end
end

%************************************
% 时域系数观察
figure(1)
subplot(311)
stem(h0)
title('原型滤波器系数h0')
subplot(312)
stem(Hkn(1,:));
title('分析滤波器的系数H0')
subplot(313)
stem(Gkn(1,:));
title('综合滤波器的系数G0')
%***********************************
% 功率互补验证
sumh = zeros(1,512);
for k=1:M
    [H(k,:),w] = freqz(Hkn(k,:),1,512,Fs);
    h(k,:) = 20*log10(abs(H(k,:)+eps));
    sumh = abs(H(k,:)).^2 + sumh;
end
figure(2)
subplot(211)
for k=1:M
    plot(w/Fs,h(k,:));
    hold on;
end
hold off;
title('分析滤波器组的幅频响应')
sum=10*log10(sumh);
subplot(212);
plot(w/Fs,sum);grid
title('分析滤波器幅频响应和')
%**********************************************
% 测试信号生成
t = 0:1/Fs:0.3;
x=exp(j*2*pi*500*t)+0.1*randn(size(t))+exp(j*2*pi*800*t)+exp(j*2*pi*3000*t)+exp(j*2*pi*4000*t);
%x=exp(j*2*pi*500*t)+0.1*randn(size(t))+exp(j*2*pi*800*t)+exp(j*2*pi*300*t)+exp(j*2*pi*600*t);
%**********************************************
% 信号通过滤波器组
for k=1:M
    Hkdeci = mfilt.firdecim(M,Hkn(k,:));
    xk(k,:) = filter(Hkdeci,x);
    Xkinter =mfilt.firinterp(M,Gkn(k,:));
    xg(k,:) = filter(Xkinter,xk(k,:));
end
x_end = zeros(1,length(xg));                    % 恢复出来的信号
for k=1:M
    x_end = xg(k,:)+x_end;
end
figure(3)
subplot(211);
plot((1:1000),x(1:1000));
title('输入信号')
subplot(212);
plot((1:999),x_end(1:999))
title('输出信号')


figure(4)
subplot(211);
h=spectrum.periodogram;               
psd(h,x);                                        %输入信号频谱图
title('输入信号频谱')
subplot(212);
h=spectrum.periodogram;
psd(h,x_end);                                     %输出信号频谱图
title('输出信号频谱')





    
    










        
 
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -