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

📄 xiaoiir_filter.m

📁 用matlab语言仿真iir滤波器的性能和参数,程序中有详尽的说明
💻 M
字号:
clear all;                    	     				
clc;                              				
N=256;        %number of sample.                    			 	
fs=600;       %frequency of sample.                     			     
dt=1/fs;      %time interval of sample.                                  		
for k=1:N;    %gerenate integrated signal with f1,f2,f3.                
   f1=250;                         			 	
   f2=100;                         			 	
   f3=270;                       				
   y(k)=sin(2*pi*f1*k*dt)+sin(2*pi*f2*k*dt)+sin(2*pi*f3*k*dt);  
end

min(y);
max(y);
y=y*1024*8;
y=round(y);
n=1:256;
subplot(4,1,1)
plot(n,y,'b');
max(y);
A=y.';
%following code save data in vector into the file in the disc.
[filename,pathname] = uiputfile({'*.bin';'*.dat';'*.*'},'Save as'); 
fid = fopen([pathname,filename],'w'); 
if fid~=-1 %not equal to -1
  count=fprintf(fid,'%x\n',y+(y<0)*2^16);% write the data in vector 'y' to the file whose number is 'fid'. 
  if(fclose(fid)==-1) 
    error('Can not close the file!'); 
  end 
else 
  error('Can not open the file!'); 
end 

y
lp=200;       %frequency of cut-off.                            
wn1=2*lp/fs;  %归一化的截止频率。                            
[z1,p1,k1] = CHEBY1(3,0.5,wn1); %滤波器的零极点表示。          
[b1,a1] = CHEBY1(3,0.5,wn1);   %滤波器的传输函数表示。           
[H,f]=freqz(b1,a1,N/2,fs);     %滤波器的频率响应
subplot(4,1,2);                %绘制滤波器的频率响应。
plot(f,abs(H),'b'); 
grid;
%hold on;
%b1=[0.1598,0.4768,0.4768,0.1589];

%a1=[-0.1268,0.5239,-0.1257];
%[H1,f]=freqz(b2,a2,N/2,fs);
%plot(f,abs(H1),'r');

b1=b1/(8*1.0711)            %将参数按比列系数缩小。      		
a1=a1/(8*1.0711)          %为DSP程序做准备,MATLAB 程序不需要。           


yy1=filter(b1,a1,y);           %滤波: input signal--->y, output signal--->yy1;   	  

b1
a1

y=fft(y,N);                    %将原输入信号做FFT变换。     	  
pyy=y.*conj(y);                %做原信号的256点的功率谱分析。"A.*A" 表示矩阵对应的元素相乘,而不矩阵相乘      	  
f=(0:(N/2-1));
for i=1:N/2-1;                 %还原为模拟频率。    
   f(i)=f(i)*fs/N;
end
%figure(1);
subplot(4,1,3);
plot(f,pyy(1:N/2))             %绘制原输入信号的功率谱图。          
grid;


y=fft(yy1,N);                  %滤波后的输出信号的FFT变换。    	 
pyy=y.*conj(y);                %计算输出信号的功率谱密度。 
f=(0:(N/2-1));
for i=1:N/2-1;                 %还原为模拟频率。    
   f(i)=f(i)*fs/N;
end
%figure(2);
subplot(4,1,4);
plot(f,pyy(1:N/2));           %绘制原输出信号的功率谱图。                     
grid;

%程序的整体思路:(1):产生滤波的输入信号。
%               (2):根据截止频率、波纹系数、通带频率设置滤波器。([b1,a1] = CHEBY1(3,0.5,wn1);)   
%               (3):对输入信号滤波。(yy1=filter(b1,a1,y))
%               (4):对输出信号做频谱分析。(FFT)
%本实列要求使用MATLAB产生滤波前的3正弦合成信号,然后设计一个3阶低通切比雪夫滤波器,
%滤除信号中的高频信号,并使用频谱分析方法,查看滤波效果。MATLAB仿真后,使用得到的滤波参数
%,进行DSP编程,在DSP中实现低通滤波,并使用CCS的频谱分析功能,查看DSP的滤波效果。
%   由于本实列前两个过程比较复杂,所以一般在MATLAB中验证算法,并设计滤波的参数,再将此参数
%应用到DSP汇编语言程序中,从而简化编程过程。然后将滤波后的信号通过DA输出,使用示波器查看程序
%运行的正确性。也可以将滤波后的信号存储在DSP的内部RAM中,使用CCS参看滤波后信号的时域和频域图。


%count=fprintf(fid,'%x\n',y+(y<0)*2^16);
%以上语句是把y向量中的数据以十六进制的格式写到文件中去。
%对于y向量中的正数,就直接写,如果是负数,对于32bit的要加上2^16后方能得到正确的结果。
%
%
%
%
%
%

⌨️ 快捷键说明

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