Matlab 使用IFFT获取原始信号并解析VAL';s定理

Matlab 使用IFFT获取原始信号并解析VAL';s定理,matlab,signal-processing,fft,ifft,spectral-density,Matlab,Signal Processing,Fft,Ifft,Spectral Density,我有一个电流信号(以csv格式提取),是我从cadence模拟中获得的,时间超过30 ns。在FFT之前,我已经去除了直流偏移,并应用了加窗功能。通过sqrt(N)进行归一化FFT。我用fftshift(X)将零频率分量移到所需频谱的中心。我得到了我想要的FFT。我还想通过ifft返回我原来的加窗信号,但它没有显示我的加窗信号,而是只显示我使用的加窗函数的一个版本。我的样本信号是真实的,并不复杂 我还有一个问题。我的FFT前和FFT后的功率相同。如何在图形中以智能方式显示Parseval的the

我有一个电流信号(以csv格式提取),是我从cadence模拟中获得的,时间超过30 ns。在FFT之前,我已经去除了直流偏移,并应用了加窗功能。通过
sqrt(N)
进行归一化FFT。我用
fftshift(X)
将零频率分量移到所需频谱的中心。我得到了我想要的FFT。我还想通过
ifft
返回我原来的加窗信号,但它没有显示我的加窗信号,而是只显示我使用的加窗函数的一个版本。我的样本信号是真实的,并不复杂

我还有一个问题。我的FFT前和FFT后的功率相同。如何在图形中以智能方式显示Parseval的theroem

我还添加了我的MATLAB代码,没有上传csv和生成向量。我的
y
值是
Current\u wo\u dc

MATLAB代码:

N = length(Current_wo_dc);
ts = 1.0e-12;
Fs = 1/ts;
tmax = (N-1)*ts;
tm = 0:ts:tmax;
f = -Fs/2:Fs/(N-1):Fs/2;

fn=hanning(N);  % hanning window function
Z = Current_wo_dc'.*fn; 

Power_Z = sum(Z.^2); % power in time domain

%FFT
fftY = fft(Z);
y = fftshift(fftY);
Y = abs(y);
a3 = Y/sqrt(N);

Power_fftY = sum(fftY.*conj(fftY))/length(fftY); % power in frequency domain

%IFFT:
I = ifftshift(fftshift(Z));
II = I*sqrt(N);

%PSD
psd = a3.^2;
psd_db = 10*log10(psd);

subplot(311), plot(Z); % windowed signal
subplot(312), plot(a3); % fft across frequency bin not shifted along frequency
subplot(313), plot(II); % ifft 

据我所知,在你的代码中,你犯了一个错误。当您提到傅里叶逆变换时,您正在执行(
ifftshift(fftshift(Z))
),这不会改变任何东西。你应该把
I
定义为:
II=sqrt(N)*real(ifft(ifftshift(y))
@MuradOmar,我试过你的代码,但还是一样的。你可以做的是,在一个简单的教科书示例上尝试代码(其中任何一个),看看你是否得到了预期的结果,如果没有,那么你可以很容易地跟踪出了什么问题。我不太明白你在
I=ifftshift(fftshit(Z))
Z作为一个时域信号,这有什么意义?谢谢。我解决了。实际上,我的第一个图形的绘图名称有点错误,与图2和图3重叠。