matlab同一个代码结果不同,为什么当我使用相同的表达式定义函数时,matlab内置函数的结果与我得到的结果不同?...

我目前正在用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.

结论是,我不明白,当把信号相乘出来的时候,它是如何工作的。你能帮助我理解为什么以及如何修改函数来解决问题吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 Matlab 中的 "fplot" 函数来实现。 以下是一个示例代码: ``` x = -10:0.1:10; y1 = sin(x); y2 = cos(x); y3 = x.^2; figure fplot(y1, 'r') hold on fplot(y2, 'g') fplot(y3, 'b') legend('y = sin(x)', 'y = cos(x)', 'y = x^2') xlabel('x') ylabel('y') title('Different Functions Plot') ``` 这段代码定义了 x 的取值范围为 -10 到 10,并分别计算出 y1=sin(x)、y2=cos(x) 和 y3=x^2 的值。 然后使用 "fplot" 函数绘制出三个函数的图像,并在同一张图中显示。标题、x 轴标签和 y 轴标签等信息也可以在图中添加。 ### 回答2: 可以使用MATLAB中的subplot函数来实现在一张图上画出不同自变量的函数图像。 下面是一个示例代码: ```MATLAB % 定义函数 f = @(x) x.^2; % 这里以y = x^2为例 % 定义自变量取值范围 x = -5:0.1:5; % 自变量的范围为-5到5,步长为0.1 % 绘制图像 figure; subplot(2,2,1); % 创建一个2x2的图像矩阵,并选中第一个子图 plot(x, f(x)); xlabel('x'); ylabel('f(x)'); title('自变量取值范围:-5到5'); subplot(2,2,2); % 选中第二个子图 plot(x, f(x+1)); xlabel('x'); ylabel('f(x)'); title('自变量取值范围:-4到6'); subplot(2,2,3); % 选中第三个子图 plot(x, f(x-2)); xlabel('x'); ylabel('f(x)'); title('自变量取值范围:-7到3'); subplot(2,2,4); % 选中第四个子图 plot(x, f(x+3)); xlabel('x'); ylabel('f(x)'); title('自变量取值范围:-2到8'); ``` 上述代码中,我们首先定义了一个函数f,然后定义了自变量的范围x。接着使用subplot函数创建一个2x2的图像矩阵,并使用plot函数在每个子图中画出不同自变量的函数图像。最后通过不同的标题和坐标轴标签来区分不同自变量范围的图像。 可以根据需要修改自变量的取值范围和函数定义,以满足实际问题的需求。 ### 回答3: 当使用MATLAB画函数图像,可以使用`plot`函数来实现。以下是一个简单的示例代码,通过一个函数`my_function`绘制不同自变量的函数图像并将其画在一张图上。 ```matlab % 定义自变量范围 x = -10:0.1:10; % 自变量取值范围从-10到10,步长为0.1 % 定义函数 function y = my_function(x) % 这里写入你的函数表达式,例如 y = x.^2,表示计算y = x的平方 y = x.^2; end % 绘制函数图像 plot(x, my_function(x)) xlabel('自变量 x') ylabel('函数值 y') title('函数图像') ``` 在这段代码中,首先定义了自变量的范围`x`,然后通过`my_function`函数定义了函数表达式。接下来,使用`plot`函数绘制函数图像,其中`x`是自变量的值,`my_function(x)`是对应自变量值的函数值。最后,通过`xlabel`、`ylabel`和`title`函数添加坐标轴的标签和图像的标题。 你可以根据实际需要修改函数表达式以及自变量的范围,运行代码即可得到相应的函数图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值