%IIR算法的Matlab实现,作者Roy,时间:2022-05-11
%本文将以正弦信号为例,在正弦信号上加高斯噪声和其他频段的正弦信号干扰
%通过rife算法估计出干扰频率,采用自适应滤波器IIR算法,滤除正弦波干扰信号。
clc,clear,close all;
f=200; %信号频率为
A=4; %设置正弦波幅值
N=1024; %采样点个数
n=0:N-1; %采样序列
fs=2000; %采样频率为 fs=2K
ts=1/fs; %采样间隔
T=N*ts; %采样时间
m=-fs/2:(fs/N):(fs/2-(fs/N)); %其中fs/N为采样分辨率
% % %
f1=20;
s_n=sin(2*pi*f1*n*ts);
subplot(4,2,1);plot(n*ts,s_n); title('原始信号:sin(2*pi*f1*n*ts)');
subplot(4,2,2);plot(m,abs(fftshift(fft(s_n)))); title('频谱分析');
SNR=10;
s_n=awgn(s_n,SNR); %SNR参数,可参考awgn函数
subplot(4,2,3);plot(n*ts,s_n); title('原始信号+高斯噪声');
subplot(4,2,4);plot(m,abs(fftshift(fft(s_n)))); title('频谱分析');
i_n=A*sin(2*pi*f*n*ts); %生成正弦波信号,干扰信号
xn=s_n+i_n; %添加干扰信号
subplot(4,2,5);plot(n*ts,xn); title('原始信号+高斯噪声+窄带干扰')
subplot(4,2,6);plot(m,abs(fftshift(fft(xn)))); title('频谱分析');
%%%使用rife算法进行频率估计
yw=abs(fft(xn)); %傅里叶变换
% subplot(4,1,4);plot(n,yw);
[valueMax,posMax] = max(yw(1:N)); %得到谱线最大值与坐标
if( yw(posMax+1) >= yw(posMax-1)) %判断r的值
r=1;
else
r=-1;
end
delta = yw(posMax+r)/(valueMax+yw(posMax+r));
fc = 1/T*(posMax-1+r*delta); %输出估计的频率值fc,一开始没有减1,导致误差比较大,可以将1/T*(posMax-1)、1/T*(posMax)分别输出与图像对比
result = strcat('Rife算法估计出的信号频率为',num2str(fc),'Hz;','实际信号频率是:',num2str(f),'Hz;');
disp(result);
% % % % % % % % % IIR滤波器的算法实现
beta=cos(2*pi*fc/fs);
alpha = 0.1;
mul_1=0;
mul_2=0;
mul_3=0;
add_1=0;
add_2=0;
add_3=0;
add_4=0;
add_5=0;
add_6=0;
lag_1=0;
lag_2=0;
for nn = 1 : N
mul_1=xn(nn)/2;
add_1=mul_1-lag_2;
mul_2=alpha*add_1;
add_2=mul_2+mul_1;
add_3=add_2-lag_1;
mul_3=(-beta)*add_3;
add_4=add_2+mul_3;
add_6=mul_2+lag_2;
y1(nn)=add_6+mul_1;
%%%%其中数据的滞后通过将变量滞后一轮输出实现
%%%%保证数据的滞后使用的数据是上一轮的,这三行代码顺序很重要
add_5=lag_1+mul_3;
lag_2=add_5;
lag_1=add_4;
end
% b1 =0;
% b0 = 0;
% f1 = 0;
% f0 = 0;
% adder1 = 0;
% multer1 = 0;
% adder2 = 0;
% multer2 = 0;
% adderb0 = 0;
% y1=iir(xn,fc,fs,100); 测试封装函数
% for mm = 1 : N
% xtemp = xn( mm )/2;
% b1 = b0 + multer2;
% b0 = f0;
% adder1 = xtemp - b1;
% multer1 = alpha * adder1;
% f1 = xtemp + multer1;
% adder2 = f1 - b0;
% multer2 = (-beta) * adder2;
% f0 = f1 + multer2;
% y1(mm) = b1 + multer1 + xtemp;
% end
subplot(4,2,7);plot(n*ts,y1); title('滤除窄带干扰后的信号')
subplot(4,2,8);plot(m,abs(fftshift(fft(y1)))); title('频谱分析');
剑藏锋
- 粉丝: 131
- 资源: 36
最新资源
- 车牌 ocr 计算机视觉项目 YOLOV7标记
- tailscale的安装程序
- AFT05MP075N-MDL-ADS ADS仿真模型
- 基于servlet+jsp+mysql做的一个简易的网上书店项目源码
- 该项目旨在使用 YOLOv3 物体检测算法统计输入视频中检测到的每辆车辆(摩托车、公共汽车、汽车、自行车、卡车、火车) .zip
- 关于四元数的误差的计算
- 基于Android的安卓新闻app源码+实验报告(满分大作业)
- 基于scrapy爬虫框架模板,将数据保存到Mysql数据库或者文件中
- 基于Python网易新闻数据分析可视化系统
- 该项目旨在探测森林和其他地区的火灾.zip
- 完整的OCR图片识别源码:已用python实现ocr功能并返回html结构,核心是rapidOCR改造而来
- 安卓开发-串口打开、接收与发送数据
- 一些自己用的Java小工具
- 这个 Jupyter 笔记本解释了如何在 Google Colab 上运行 YOLO,用于视频 .zip
- 深入了解Web系统性能优化.pdf
- 《如何培养孩子爱学习的好习惯》主题班会.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
- 5
前往页