gpt4 book ai didi

matlab - 为什么 MATLAB 内置函数的结果与我使用相同表达式自己定义函数时得到的结果不同?

转载 作者:行者123 更新时间:2023-12-02 08:04:10 27 4
gpt4 key购买 nike

我目前正在 matlab 中对某些信号进行频谱分析,我应该使用汉明窗函数 (https://www.mathworks.com/help/signal/ref/hamming.html) 进一步分析同一信号,但我遇到了一些不寻常的问题,当我得到错误的结果时使用内置函数 hamming(L) 并在我按照在 MATLAB 中定义的方式自己编写函数时获得正确的结果。这是代码:

%This is a signal i am analyzing and it has N points.
F1 = 55/450;
F2 = 67/450;
N = 450;
n = 0:(N-1);
x = 50*cos(2*pi*F1*n)+100*cos(2*pi*F2*n)

% Here is the code for plotting the signal in N points
figure
n = 0:(N-1);
stem(n,x);
xlabel('n');
ylabel('x[n]');
title('Discrete Signal x[n]');
pause

% Here i am using a built in function. It is of length N, the same as x[n].
n=0:(N-1);
window1 = hamming(N);
figure
y1 = x.*window1; %The proper way of windowing a function.
stem(n, y1);
title('Windowed Discrete Signal y[n]');
pause
% This yields some nonsensical graph even though the window function itself graphs properly.

% Here i looked at the expression on the site which is used for the built-in matlab function and wrote it myself.
n=0:(N-1);
window2 = 0.54-0.46*cos(2*pi*n./N);
figure
y2 = x.*window2;
stem(n, y2);
title('Windowed Discrete Signal y[n]');
pause
% Here it graphs everything perfectly.

这是我自己编写函数时得到的图形图像: Proper Windowed Function这是我使用内置函数时得到的: Nonsense Function

结论是,我不太了解将信号相乘时的计算方式。你能帮我理解为什么以及我应该如何修改函数才能计算出来吗?

最佳答案

问题是 window1,由 hamming 返回,是一个 Nx1 向量,而 x 是一个 1xN 向量。当您对它们执行逐元素乘法时,它将生成一个 N*N 矩阵。请参见下面的示例。如果您 reshape window1x 以使它们的形状匹配(例如 y1 = x.*window1';)

>> a = [1 2 3]

a =

1 2 3

>> b = [1; 2; 3]

b =

1
2
3

>> a.*b

ans =

1 2 3
2 4 6
3 6 9

关于matlab - 为什么 MATLAB 内置函数的结果与我使用相同表达式自己定义函数时得到的结果不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53526687/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com