在数字信号处理里面如何完成这个信号的重构?
本帖最后由 liangd123654 于 2014-11-2 13:03 编辑在数字信号处理里面如何完成这个信号的重构?
如题。
问题补充:
已知的就只有采样率FS,序列长度N,还有就是原始信号序列。信号各个频率成分的幅频相信息均不已知。
先假设只有2个频率成分。
图片中的问题描述不全面,如有误导,抱歉抱歉。 FFT 后取共轭 ,是得到什么?
需要FFT后求出 两个相位值吧 你这里边哪几个参数是已知的 hongh 发表于 2014-11-2 12:09
FFT 后取共轭 ,是得到什么?
需要FFT后求出 两个相位值吧
对原始信号FFT的结果取共轭得到一个新的序列。再对这个序列进行IFFT。 asma 发表于 2014-11-2 12:38
你这里边哪几个参数是已知的
已知的有:
FS
N
还有就是长度为N的原始信号序列。
MATLAB程序里有。 liangd123654 发表于 2014-11-2 12:55
对原始信号FFT的结果取共轭得到一个新的序列。再对这个序列进行IFFT。
我 的意思 是不明白 ,做共轭的意义。 只要保证采样不发生混叠就很容易处理,现在频谱泄露校正算法还是很精确的可以翻下我以前发的算法 again 发表于 2014-11-2 13:51
只要保证采样不发生混叠就很容易处理,现在频谱泄露校正算法还是很精确的可以翻下我以前发的算法 ...
你好。
绝对不会发生混叠。
翻了你的3页的帖子,没有发现。 能不能针对我的这个问题提供一些具体的方法呢? hongh 发表于 2014-11-2 13:23
我 的意思 是不明白 ,做共轭的意义。
一个余弦信号的相位如果变为原来的相反数,傅里叶变换的结果就会是原来的共轭。
MATLAB程序里面可以看到:f1(400Hz)、f2(1200Hz)都正好在FFT的频点上时,IFFT的结果就是要重建的信号。
但是当信号的频率不是40Hz的整倍数时,这种方法就失效了。 clear all;clc
N=256;
fs=1000;
f=51.1234;
a=1.2345;
ph=30.123;
dc=0.123;
t=0:N-1;
x=a*sin(2*pi*f*t/fs+ph*pi/180)+dc;
xfft=fft(x,N);
y=abs(xfft);
=max(y(2:N/2));
k=k+1;
z1=xfft(k)-(xfft(k-1)+xfft(k+1))/2;
z2=xfft(k+1)-(xfft(k)+xfft(k+2))/2;
ka=abs(z1)/abs(z2);
r=(2-ka)/(1+ka)
fo=(k-1+r)*fs/N
ao=2*pi*r*(1-r*r)*(abs(z1))/(N*sin(r*pi))
pho=(angle(z1)-pi*r)*180/pi+90
MATLAB输出结果,精度自己看
fo =
51.123401059088216
ao =
1.234499850166726
pho =
30.122670622875049
这个是单频信号,多频的话这个三点校正算法频率间隔需要5个以上才比较好,你可以去看看频谱泄漏校正算法相关数据,丁康老师、王兆华老师推荐可以看 本帖最后由 again 于 2014-11-2 21:51 编辑
两个频率的你看下
clear all;clc
N=256;
fs=1000;
f=51.1234;
a=1.2345;
ph=30.123;
dc=0.123;
f2=123.4567;
a2=0.54321;
ph2=9.87654;
t=0:N-1;
x=a*sin(2*pi*f*t/fs+ph*pi/180)+dc;
x=x+a2*sin(2*pi*f2*t/fs+ph2*pi/180);
xfft=fft(x,N);
y=abs(xfft);
=max(y(2:N/2));
k=k+1;
z1=xfft(k)-(xfft(k-1)+xfft(k+1))/2;
z2=xfft(k+1)-(xfft(k)+xfft(k+2))/2;
ka=abs(z1)/abs(z2);
r=(2-ka)/(1+ka)
fo=(k-1+r)*fs/N
ao=2*pi*r*(1-r*r)*(abs(z1))/(N*sin(r*pi))
pho=(angle(z1)-pi*r)*180/pi+90
y(k-2)=0;
y(k-1)=0;
y(k)=0;
y(k+1)=0;
y(k+2)=0;
=max(y(2:N/2));
k=k+1;
z1=xfft(k)-(xfft(k-1)+xfft(k+1))/2;
z2=xfft(k+1)-(xfft(k)+xfft(k+2))/2;
ka=abs(z1)/abs(z2);
r=(2-ka)/(1+ka)
fo2=(k-1+r)*fs/N
ao2=2*pi*r*(1-r*r)*(abs(z1))/(N*sin(r*pi))
pho2=(angle(z1)-pi*r)*180/pi+90
输出
r =
0.087606333308264
fo =
51.123462239485406
ao =
1.234492722429198
pho =
30.118693364380803
r =
-0.395071379304881
fo2 =
1.234567524245903e+02
ao2 =
0.543202651514619
pho2 =
9.875865191205620 坛里的高手真多啊!~~~ again 发表于 2014-11-2 21:49
两个频率的你看下
clear all;clc
N=256;
多谢提供代码。
两个我都看了,思路就是
首先进行信号频率估计,利用了频谱幅度信息提高了估计精度。
然后就得到对应的频率的幅相信息。
最后可以解决我的问题实现信号的重构。
然而问题在于这种方法虽然提高了频率估计精度,但是由于始终是基于FFT,频率分辨率依然没有提高。
也就是说双频的时候,对于第二个程序,当|f2-f|<fs/N 的时候两个频率估计都不准。
如果说的不对,还请指正。
使用fft等频率估计的方法始终受制于估计频率分辨率。所以我现在就想,能不能舍弃频率估计的思路,不用知道精确的频率,只是获得重构的信号。 liangd123654 发表于 2014-11-2 20:36
一个余弦信号的相位如果变为原来的相反数,傅里叶变换的结果就会是原来的共轭。
MATLAB程序里面可以看到 ...
取共轭,是时域中相位 变成相反数 ,还是相位差90 , 我记错了? hongh 发表于 2014-11-3 16:54
取共轭,是时域中相位 变成相反数 ,还是相位差90 , 我记错了?
你下载我发的那个程序 改改信号试一下就知道了。
页:
[1]