cammer534 发表于 2008-12-7 17:30

请教如何加窗函数,去噪?

可不可以 加个窗函数去掉正弦信号随机白噪声啊???
fs=1;%设定采样频率
N=128;
n=0:N-1;
t=(0:1/fs:(N-1)/fs)';
f0=0.05;%设定正弦信号频率
f=(0:N-1)*fs/N;
x0=cos(2*pi*f0*t);n=0:N-1;x=x(:);%生成正弦信号
x1=x+randn(size(t));
y=fft(x1,N);
。。。。。。
后面的怎么写呢?望老师指点下,谢拉

vican_lee 发表于 2008-12-7 21:34

把 你 设定的正玄波 频率以外的 频率设为零就可以了.
程序偶就不帮你写了..

cammer534 发表于 2008-12-8 10:36

回复 沙发 vican_lee 的帖子

你看下 程序是这样的不?怎么去噪后,效果不好。帮忙 看下
fs=1;%设定采样频率
N=128;
n=0:N-1;
t=(0:1/fs:(N-1)/fs)';
f0=0.05;      %设定正弦信号频率
f=(0:N-1)*fs/N;
x0=cos(2*pi*f0*t);n=0:N-1;x=x(:);%生成正弦信号
x1=x0+randn(size(t));
y=fft(x1,N);

fmin=0.0499999;          %最小截止频率,为0时是低通,不为0时是带通
fmax=0.0500001;         %最高截止频率
nfft=2^nextpow2(N);       %取大于并接近n的2的幂次方为FFT长度
nmin=round(fmin*nfft/fs+1); %四舍五入取整求最小截止频率对应数组元素的下标
nmax=round(fmax*nfft/fs+1); %四舍五入取整求最大截止频率对应数组元素的下标
% %滤波******************************************************
y1=fft(x1,nfft);            %fft结果存入y中
a=zeros(1,nfft);            %建立一个长度为nfft元素全为0的向量
a(nmin:nmax)=y(nmin:nmax);      %将y正频率阻带内的元素值置为0
a(nfft-nmax+1:nfft-nmin+1)=y(nfft-nmax+1:nfft-nmin+1); %将y负频率阻带内的元素值置为0
y1=ifft(a,nfft);          %逆fft
y1=(real(y1(1:N)))';       %滤波后的信号,取变换实部n个结果为滤波列向量
figure;
subplot(211);plot(t,x0);grid;
subplot(212);plot(t,y1);grid ;

vican_lee 发表于 2008-12-8 11:46

对称点搞错了,   第7点的对称点是 123点,你的对称点在122点上了,所以多了一个频率出来了.
把你的程序自己改一下,记住,matlab的下标是从1开始的

cammer534 发表于 2008-12-8 20:04

回复 地板 vican_lee 的帖子

程序改了下,但是去噪后的信号,怎么有点相位失真啊??帮忙看下
fs=2;%设定采样频率
N=128;
n=0:N-1;
t=(0:1/fs:(N-1)/fs)';
f0=0.05;%设定正弦信号频率
f=(0:N/2-1)*fs/N;
x=sin(2*pi*f0*t);%生成正弦信号
noisex=x+randn(size(t));
noisey=fft(noisex,N);
figure(1);
subplot(311);stem(t,x);xlabel('t');ylabel('y');title('正弦信号y=2*pi*10t时域波形');grid;
y=fft(x,N);
y=2*abs(y)/N;
subplot(312);plot(f,y(1:N/2));grid;
fmin=0.0468;          %最小截止频率,为0时是低通,不为0时是带通
fmax=0.0469;         %最高截止频率
nfft=2^nextpow2(N);       %取大于并接近n的2的幂次方为FFT长度
nmin=round(fmin*nfft/fs+1); %四舍五入取整求最小截止频率对应数组元素的下标
nmax=round(fmax*nfft/fs+1); %四舍五入取整求最大截止频率对应数组元素的下标
% %滤波******************************************************
y=fft(noisex,nfft);            %fft结果存入y中
a=zeros(1,nfft);            %建立一个长度为nfft元素全为0的向量
a(nmin:nmax)=y(nmin:nmax);      %将y正频率阻带内的元素值置为0
a(nfft-nmax+2:nfft-nmin+2)=y(nfft-nmax+2:nfft-nmin+2); %将y负频率阻带内的元素值置为0
y1=ifft(a,nfft);          %逆fft
y1=(real(y1(1:N)))';       %滤波后的信号,取变换实部n个结果为滤波列向量
% ifaf=frft(y1,-0.913);   %原始信号去噪后的信号
subplot(313);plot(t,y1);grid on;
% subplot(312);plot(u,abs(ifaf));grid on;

[ 本帖最后由 cammer534 于 2008-12-8 20:08 编辑 ]

vican_lee 发表于 2008-12-8 22:30

你的频率分辨率是 fs/N = 2/128 = 0.0078125Hz
而你的 f0=0.05,
理论上应该在谱线的6.4位置上..由于频率分辨率的问题,你的最大值出现在谱线7上,
而你滤波的时候把谱线6 置零了.也就是6.4谱线的位置也置零了...
所以出现了频率相位的失真.你仔细看看,应该你的结果频率也有失真的.
解决的办法有两个,我没具体实验过,
1.就是做频谱矫正,论坛有专门的主题讲这个问题,
2.就是在滤波的时候不要直接清零,做一个插值,怎么插呢?这个我正在做一些理论的论证,和准备做一些实验.

对了...最好把你频率矫正以后的结果放上来我看看....我只是知道问题出在哪儿.但我也没做过具体的实验..

[ 本帖最后由 vican_lee 于 2008-12-8 22:32 编辑 ]

cammer534 发表于 2008-12-9 16:17

回复 6楼 vican_lee 的帖子

谢谢 您了。学到不少,我在自己看下相关问题。

大鹏之举 发表于 2008-12-24 15:26

回复 6楼 vican_lee 的帖子

很厉害!很专业!

旧言虐心 发表于 2017-1-3 09:39

你这个也没加窗啊自己截断的对吗
页: [1]
查看完整版本: 请教如何加窗函数,去噪?