噪声调频仿真基础:Matlab信号处理终极指南
发布时间: 2025-01-06 11:06:44 阅读量: 9 订阅数: 15
噪声干扰信号的Matlab仿真,噪声调频干扰matlab仿真,matlab
5星 · 资源好评率100%
![噪声调幅与噪声调频干扰matlab仿真](https://community.appinventor.mit.edu/uploads/default/original/3X/9/3/9335bbb3bc251b1365fc16e6c0007f1daa64088a.png)
# 摘要
本文旨在为噪声调频仿真研究提供一个全面的介绍,涵盖了基础理论、实践技巧以及进阶应用。首先介绍了噪声调频的基础概念及其在信号处理中的作用。随后,利用Matlab这一强大的信号处理工具,探讨了信号表示方法、仿真环境搭建、信号生成与分析以及噪声调制与解调的关键实践技巧。此外,文章深入探讨了信号处理的高级技术,如滤波器设计和信号降噪,并对噪声调频信号的性能进行了评估。最后,通过实际通信系统的仿真案例,展现了Matlab在噪声调频仿真中的应用,并对仿真结果进行了分析,验证了仿真结论的实际意义。本文的研究旨在为通信工程师和信号处理研究人员提供有价值的参考和实践指南。
# 关键字
噪声调频;Matlab;信号处理;仿真;性能评估;滤波器设计
参考资源链接:[MATLAB仿真实验:噪声调幅与调频干扰及其功率分析](https://wenku.csdn.net/doc/6412b4a6be7fbd1778d4052c?spm=1055.2635.3001.10343)
# 1. 噪声调频仿真基础概述
在现代通信系统中,噪声调频(Noise Frequency Modulation, NFM)是一种广泛应用于提高信号传输质量的技术。在本章节中,我们将首先探讨噪声调频的基本概念,以及它在仿真中的应用背景和重要性。
## 1.1 噪声调频技术简介
噪声调频是一种调制技术,其中信号的瞬时频率被噪声信号所调制。这种技术的优势在于它能够提升信号的抗干扰能力,改善系统的可靠性。在噪声调频中,信息的传输不直接体现在信号的幅度或频率变化上,而是通过噪声的调制过程来实现。
## 1.2 噪声调频信号的特点
噪声调频信号与传统调幅或调频信号相比,具有更高的频谱利用率和更好的保密性。其在接收端通常需要更为复杂的解调技术来还原原始信息。因此,对噪声调频信号的仿真研究,不仅能加深对调制技术的理解,而且对于设计和优化通信系统具有实际意义。
## 1.3 仿真在噪声调频研究中的作用
仿真提供了一个无风险的环境,使研究者能够在不进行实际硬件实验的情况下,对噪声调频系统的性能进行评估和优化。通过仿真,我们可以快速测试不同参数设置下系统的响应,进而调整和改进系统设计。本文将着重介绍噪声调频仿真的基础理论和实践技巧,以及其在现代通信系统中的高级应用。
# 2. ```
# 第二章:Matlab信号处理基础理论
## 2.1 信号处理的基本概念
### 2.1.1 信号与系统简介
信号处理是信息技术的核心,其关注点在于如何通过算法与工具来分析、修改与合成信号。在MATLAB环境下,工程师和科研人员可以设计、模拟和评估各种信号处理算法和系统。MATLAB提供了丰富的函数库,支持从基础信号操作到复杂信号处理任务的实现。
信号本身可以看作是信息的载体,可以是音频、视频、温度记录等。而系统则是对信号进行处理的实体,它接收输入信号,进行某种操作,然后输出处理结果。在信号处理的语境下,系统通常由数学模型或计算机程序表示。
### 2.1.2 信号的分类及特征
信号按照时间属性可分为连续信号和离散信号。连续信号是指在时间上连续存在的信号,而离散信号则是时间上离散的序列。在MATLAB中,连续信号通常用符号函数表示,而离散信号则用数组或向量表示。
信号还根据其特性分为确定信号和随机信号。确定信号具有明确的数学表达式,比如正弦波、方波等。随机信号则是无法预测的信号,比如噪声。MATLAB允许我们对这两类信号进行模拟、分析和处理。
```
由于输出需要满足特定的字数要求,并且我需要在满足内容要求的前提下逐步深入地创建文章的各个章节,以上是第二章节的开始部分。请告知是否需要继续生成后续内容,或是需要其他章节的内容。如果继续,请列出您希望生成的章节编号和相应的子章节内容。
# 3. Matlab信号处理实践技巧
在第二章中,我们探讨了Matlab信号处理的基础理论,包括信号处理的基本概念、噪声调频信号的数学模型以及Matlab中的信号表示方法。在本章中,我们将深入Matlab的实践应用,通过具体的技巧与步骤,掌握如何在Matlab环境中搭建噪声调频仿真环境,生成和分析噪声调频信号,以及如何对信号进行调制与解调。
## 3.1 噪声调频仿真环境搭建
### 3.1.1 Matlab仿真环境配置
为了进行噪声调频仿真,首先需要搭建一个合适的Matlab环境。Matlab提供了一个集成开发和数值计算环境,适合进行算法开发、数据分析、可视化以及仿真工作。
**步骤如下**:
1. 确保你的计算机满足Matlab运行的最低系统要求,包括安装相应的操作系统、足够的内存和硬盘空间。
2. 安装Matlab软件。可以从MathWorks官方网站下载最新版本的Matlab安装包,并按照指导完成安装。
3. 启动Matlab。在安装完成后,打开Matlab应用程序。初次启动可能会提示设置一些默认参数,例如工作目录。
4. 安装必要的工具箱。噪声调频仿真可能需要信号处理工具箱(Signal Processing Toolbox),通信工具箱(Communications Toolbox)等。在Matlab命令窗口中输入`ver`可以查看已安装的工具箱。
### 3.1.2 仿真参数设置与调整
在Matlab中进行仿真时,设置合适的参数至关重要。参数设置不仅影响仿真的准确性,还影响仿真的效率和结果的可重复性。
**参数设置建议**:
- 定义仿真的时长、采样率等基本参数。例如,可以通过设定变量`t = 0:1/8000:1`来创建一个采样率为8kHz的仿真时长为1秒的向量。
- 使用Matlab的图形用户界面(GUI)工具,例如`simscape`、`simulink`等,可以帮助用户可视化地设置和调整参数。
## 3.2 噪声调频信号的生成与分析
### 3.2.1 生成调频信号的Matlab代码实现
生成噪声调频信号是仿真过程中的关键步骤。我们可以通过Matlab编写脚本来生成具有特定参数的调频信号。
**示例代码**:
```matlab
% 定义仿真参数
Fs = 8000; % 采样频率
t = 0:1/Fs:1; % 仿真时长1秒
fc = 1000; % 载波频率
kf = 100; % 频率偏移系数
m = 0.5; % 调制指数
% 生成调制信号
mt = cos(2*pi*1*t);
% 生成噪声调频信号
f_dev = kf * mt;
n_dev = f_dev .* (rand(size(t)) - 0.5); % 加入随机噪声
nfm = cos(2*pi*fc*t + 2*pi*n_dev);
% 绘制信号图形
figure;
subplot(3,1,1);
plot(t, mt);
title('调制信号mt');
xlabel('时间 (s)');
ylabel('振幅');
subplot(3,1,2);
plot(t, f_dev);
title('频率偏移信号f_dev');
xlabel('时间 (s)');
ylabel('频率偏移');
subplot(3,1,3);
plot(t, nfm);
title('噪声调频信号nfm');
xlabel('时间 (s)');
ylabel('振幅');
```
**参数说明**:
- `Fs`:采样频率,决定信号处理的分辨率。
- `t`:时间向量,定义了仿真时长。
- `fc`:载波频率,是信号中频率分量的中心频率。
- `kf`:频率偏移系数,与调制指数`m`一起决定调频信号的带宽。
- `mt`:调制信号,通常是低频信号。
- `f_dev`:频率偏移信号,反映调制信号引起的频率变化。
- `n_dev`:加入的噪声信号,用于模拟实际信号中的噪声影响。
### 3.2.2 信号频谱分析和可视化
为了更好地理解生成的调频信号特性,我们需要对其进行频谱分析。频谱分析能帮助我们观察信号中频率成分的分布情况。
**频谱分析代码示例**:
```matlab
% 计算信号的快速傅里叶变换(FFT)
NFFT = length(t);
nfm_fft = fft(nfm, NFFT);
P2 = abs(nfm_fft/NFFT);
P1 = P2(1:NFFT/2+1);
P1(2:end-1) = 2*P1(2:end-1);
% 定义频率域
f = Fs*(0:(NFFT/2))/NFFT;
% 绘制信号的频谱
figure;
plot(f, P1);
title('噪声调频信号的频谱');
xlabel('频率 (Hz)');
ylabel('|P1(f)|');
```
**参数说明**:
- `NFFT`:快速傅里叶变换的点数。
- `nfm_fft`:调频信号的FFT结果。
- `P2` 和 `P1`:将FFT结果转换为双边和单边频谱。
- `f`:频率向量,用于绘制频谱图。
## 3.3 信号的噪声调制与解调
### 3.3.1 调制过程的Matlab仿真
调制是将信息信号加载到高频载波上的过程。在噪声调频仿真中,我们将模拟信号加载到载波上,同时引入噪声模拟真实通信环境。
**调制过程代码示例**:
```matlab
% 调制信号和载波信号
m = 0.5; % 调制指数
Ac = 1; % 载波幅度
fc = 1000; % 载波频率
fs = 8000; % 采样频率
t = 0:1/fs:1-1/fs; % 时间向量
mt = cos(2*pi*1*t); % 调制信号
% 噪声调频信号生成
n_dev = 2*rand(size(t))-1;
nfm = Ac * cos(2*pi*fc*t + 2*pi*m*integral(n_dev)/fs);
% 绘制调制信号和调频信号
figure;
subplot(2,1,1);
plot(t, mt);
title('调制信号mt');
xlabel('时间 (s)');
ylabel('振幅');
subplot(2,1,2);
plot(t, nfm);
title('噪声调频信号nfm');
xlabel('时间 (s)');
ylabel('振幅');
```
### 3.3.2 解调过程的Matlab仿真
解调是调制的逆过程,是从调制信号中提取信息信号的过程。在仿真中,我们通常使用锁相环(PLL)等方法实现解调。
**解调过程代码示例**:
```matlab
% 使用PLL进行解调
order = 3; % PLL滤波器的阶数
dt = 1/fs; % 时间间隔
k = 1; % 环路增益
[~, y, z] = plldisc(nfm, fc, dt, order, k);
% 绘制解调后的信号和原始调制信号对比
figure;
subplot(2,1,1);
plot(t, mt);
title('原始调制信号mt');
xlabel('时间 (s)');
ylabel('振幅');
subplot(2,1,2);
plot(t, y);
title('解调后的信号y');
xlabel('时间 (s)');
ylabel('振幅');
```
**参数说明**:
- `order`:PLL滤波器的阶数,影响解调的性能和稳定性。
- `dt`:时间间隔,决定了PLL的采样率。
- `k`:环路增益,是PLL的重要参数,影响锁定速度和抖动。
- `plldisc`:PLL的离散时间实现函数。
- `y`:解调后输出的信号。
通过以上代码和解释,我们能更好地理解如何在Matlab中通过编程实现噪声调频信号的调制与解调,及其频谱分析和可视化。这些技能对于进行深入的信号处理研究和实际通信系统开发至关重要。在下一章中,我们将探讨噪声调频仿真在通信系统中的进阶应用和分析。
# 4. 噪声调频仿真进阶应用
## 4.1 信号处理的高级技术
噪声调频仿真不仅仅局限于基本概念的应用,通过引入更高级的技术,可以进一步优化和增强信号处理能力。本节将探讨滤波器设计原理与应用以及信号降噪方法与实践,这些都是进阶应用中的关键组成部分。
### 4.1.1 滤波器设计原理与应用
滤波器在信号处理中扮演着至关重要的角色,它能够通过允许特定频率范围内的信号通过,同时阻止其他频率信号,从而达到提取或者抑制某些信号成分的目的。在噪声调频仿真中,滤波器的设计尤为关键,因为它们直接影响信号的质量和系统的性能。
#### 滤波器的基本类型
- **低通滤波器**:允许低于截止频率的信号通过,而阻止高于截止频率的信号。
- **高通滤波器**:与低通滤波器相反,它允许高于截止频率的信号通过。
- **带通滤波器**:允许一个特定频率范围内的信号通过,同时阻止其他频率的信号。
- **带阻滤波器**:也称为陷波器,它阻止一个特定频率范围内的信号通过,而允许其他频率的信号通过。
#### 滤波器设计方法
在Matlab中,滤波器可以通过内置函数进行设计,如`butter`(巴特沃斯滤波器设计)、`cheby1`(切比雪夫I型滤波器设计)、`ellip`(椭圆滤波器设计)等。设计过程中,通常需要确定滤波器的类型、阶数以及截止频率等参数。
以下是使用`butter`函数设计一个低通滤波器的Matlab代码示例:
```matlab
% 设计一个低通滤波器
N = 4; % 滤波器阶数
Wn = 0.3; % 归一化截止频率
[b, a] = butter(N, Wn, 'low'); % 生成滤波器系数
```
在上述代码中,`N`是滤波器的阶数,`Wn`是截止频率(以Nyquist频率的一半为单位),`b`和`a`是滤波器的分子和分母系数。在实际应用中,这些系数将被用在滤波器的实现过程中,以处理输入信号。
### 4.1.2 信号降噪方法与实践
信号降噪是信号处理中的一个重要领域,特别是在噪声调频仿真中,降噪技术可以显著提高信号的清晰度和系统的整体性能。常见的信号降噪方法包括频域降噪和时域降噪。
#### 频域降噪
在频域中进行降噪,首先需要将信号从时域转换到频域,然后对信号频谱中特定的频率成分进行处理,最后将处理后的信号转换回时域。在Matlab中,快速傅里叶变换(FFT)和逆快速傅里叶变换(IFFT)是实现这一过程的常用工具。
以下是使用FFT进行频域降噪的Matlab代码示例:
```matlab
% 假设x是含有噪声的信号
X = fft(x); % 对信号进行FFT变换
X_mod = X; % 对频谱进行修改,例如通过设置某些频率成分的值为零或调整它们的幅度
x_filtered = ifft(X_mod); % 对修改后的频谱进行IFFT变换得到降噪信号
```
在这个过程中,`X_mod`变量代表了修改后的信号频谱,根据降噪算法的不同,其处理方式也会有所不同。
#### 时域降噪
时域降噪通常采用滤波器来实现,如上节提到的使用不同类型的滤波器。此外,还可以使用更复杂的信号处理技术,如自适应滤波器、小波变换等。
以下是使用自适应滤波器进行时域降噪的Matlab代码示例:
```matlab
% 假设x是含有噪声的信号,d是纯净的参考信号
% 初始化一个自适应滤波器
filter = ...; % 自适应滤波器的初始化代码
% 使用自适应滤波器进行降噪处理
y = filter(x, d); % 自适应滤波器输出降噪后的信号
```
在这个例子中,`filter`可以是一个LMS(最小均方)滤波器或其他类型的自适应滤波器,`x`是含有噪声的信号,`d`是参考信号,`y`是经过自适应滤波处理后的信号。
## 4.2 噪声调频信号的性能评估
评估噪声调频信号的性能是仿真过程中不可或缺的环节。本节将详细介绍信噪比(SNR)与误码率(BER)分析以及性能优化与参数调整的策略。
### 4.2.1 信噪比(SNR)与误码率(BER)分析
信噪比(SNR)和误码率(BER)是衡量通信系统性能的两个重要指标。SNR表示信号功率与噪声功率的比值,通常以分贝(dB)为单位。而BER表示传输的比特中出现错误的概率,是评估数字通信系统可靠性的重要指标。
#### SNR的计算方法
在Matlab中,可以使用`snr`函数来计算信号的信噪比。以下是使用Matlab计算SNR的示例代码:
```matlab
% 假设x是原始信号,n是噪声信号
snr_value = snr(x, n);
```
这里,`x`是原始信号,`n`是噪声信号,`snr_value`是计算得到的信噪比值。
#### BER的计算方法
误码率的计算通常涉及到随机误差的模拟,可以使用Matlab内置函数`biterr`进行计算。以下是计算BER的示例代码:
```matlab
% 假设x是接收信号,y是发送信号
% x和y应当是相同长度的二进制数组
numErrors = biterr(y, x);
ber = numErrors / length(x);
```
在上述代码中,`x`是接收到的信号经过解调后的二进制表示,`y`是原始发送的二进制信号。`numErrors`是计算得到的错误比特数,而`ber`则是误码率。
### 4.2.2 性能优化与参数调整
在噪声调频仿真中,通过调整特定参数,可以达到性能优化的目的。这些参数包括调制器和解调器的参数、滤波器设计参数等。
例如,调整调制指数、滤波器的截止频率和阶数,可以影响信号的传输质量和系统的抗干扰能力。在Matlab仿真环境中,可以通过迭代调整参数,观察系统性能指标的变化,以寻找最优的参数组合。
这里是一个简单的参数调整和性能优化的Matlab代码示例:
```matlab
% 调整参数的初始值
modulation_index = 1.0;
filter_order = 4;
cutoff_freq = 0.3;
% 仿真循环,遍历不同的参数值
for index = 1:length(modulation_index_values)
for order = 1:length(filter_order_values)
for freq = 1:length(cutoff_freq_values)
% 更新参数值
current_modulation_index = modulation_index_values(index);
current_filter_order = filter_order_values(order);
current_cutoff_freq = cutoff_freq_values(freq);
% 根据更新的参数重新设计滤波器和调制器
% 进行信号仿真并计算SNR和BER
% 记录性能指标
SNR_values(index, order, freq) = ...;
BER_values(index, order, freq) = ...;
end
end
end
% 分析记录的性能指标,找到最优参数组合
[best_SNR, best_params] = max(SNR_values(:));
[best_BER, best_params] = min(BER_values(:));
```
在这个示例中,通过外层循环遍历不同的调制指数、滤波器阶数和截止频率值,来模拟不同的参数组合对系统性能的影响,最终找到能够达到最优性能的参数设置。
## 4.3 Matlab中的先进信号处理工具箱
Matlab提供了强大的信号处理工具箱,其中包含了一系列的高级函数和应用程序接口,以支持复杂的信号处理任务。本节将介绍这些工具箱的使用方法以及在复杂信号处理案例中的应用。
### 4.3.1 工具箱介绍与使用方法
Matlab的信号处理工具箱是一个包含有数百个函数的集合,这些函数能够对信号进行分析、处理、滤波、去噪、变换等操作。工具箱中的函数通常针对特定类型的信号处理任务进行了优化,使得用户能够更加容易地实现复杂的算法。
#### 信号处理工具箱中的关键功能
- **信号分析**:工具箱提供了快速傅里叶变换(FFT)、短时傅里叶变换(STFT)、小波变换(Wavelet Transform)等多种分析手段。
- **滤波器设计**:除了基础的滤波器设计函数,工具箱还提供了`fdatool`这样的滤波器设计和分析工具,便于用户图形化地设计和应用滤波器。
- **信号变换**:包括离散余弦变换(DCT)、离散正弦变换(DST)等变换工具,可以帮助用户从不同的视角理解信号。
- **信号增强**:如谱减法(Spectral Subtraction)、Wiener滤波器等去噪技术,用于提高信号的清晰度。
#### 使用信号处理工具箱的步骤
使用Matlab信号处理工具箱进行信号处理通常涉及以下步骤:
1. 导入数据:读取存储在不同格式文件中的信号数据。
2. 预处理:对信号进行预处理,如去除直流分量、归一化处理等。
3. 分析与处理:利用工具箱提供的函数对信号进行分析和处理,例如滤波、降噪、变换等。
4. 结果评估:评估信号处理后的结果,如计算SNR、BER等指标。
5. 优化与调整:根据评估结果,对信号处理参数进行调整和优化。
### 4.3.2 复杂信号处理案例分析
在实际应用中,信号处理工具箱能够解决许多复杂的信号处理问题。下面通过一个简化的案例来展示如何使用Matlab信号处理工具箱进行复杂信号处理。
#### 案例分析:语音信号增强
假设我们需要对一个受背景噪声影响的语音信号进行增强处理。以下是实现这个任务的Matlab代码:
```matlab
% 读取语音信号
[x, Fs] = audioread('noisy_speech.wav'); % 假设'noisy_speech.wav'是包含噪声的语音文件
% 设计一个谱减法降噪滤波器
filter = ...; % 谱减法降噪滤波器的初始化代码
% 对信号应用滤波器
x_enhanced = filter(x);
% 播放处理后的信号并保存
sound(x_enhanced, Fs); % 播放增强后的语音
audiowrite('enhanced_speech.wav', x_enhanced, Fs); % 保存增强后的语音文件
```
在这个案例中,`filter`代表一个谱减法降噪滤波器实例,`x`是原始含噪语音信号,`Fs`是采样频率。使用`sound`函数可以播放处理后的语音,而`audiowrite`函数则用于将增强后的语音保存到文件中。
通过这样的案例分析,我们可以看到Matlab信号处理工具箱在解决复杂信号处理问题中的强大能力。用户可以利用工具箱中的各种高级功能,灵活地解决各种信号处理任务。
在本章节中,我们深入了解了噪声调频仿真中的高级信号处理技术,以及如何使用Matlab进行性能评估和优化。此外,我们也探索了Matlab信号处理工具箱的高级功能,及其在处理复杂信号时的应用。这些知识点对于从事信号处理与通信系统仿真的专业人士而言,是非常有帮助的。
# 5. Matlab噪声调频仿真案例研究
## 5.1 实际通信系统的仿真案例
### 5.1.1 无线通信系统仿真概述
在无线通信系统中,信号的质量直接受到信道环境的影响。信道中可能会产生各种类型的干扰,例如多径效应、多普勒效应和各种噪声。为了确保通信系统的可靠性和有效性,对这些影响的仿真研究变得至关重要。
噪声调频(NFM)是无线电通信中的一种调制方式,通过改变载波频率来传递信息。在Matlab环境下进行NFM仿真不仅可以帮助我们更好地理解信号在信道中的传输特性,还能用于评估解调器的性能。
### 5.1.2 噪声调频在通信系统中的应用
下面我们将通过一个仿真案例来研究噪声调频在通信系统中的应用。这个案例会涉及以下步骤:
1. **信号生成**:创建一个基带信号和一个载波信号。
2. **调频过程**:将基带信号通过调频技术应用到载波上。
3. **信道模型**:引入噪声和多径效应等信道特征。
4. **接收与解调**:接收信号后进行解调处理,并尝试恢复原始基带信号。
## 5.2 仿真结果分析与验证
### 5.2.1 实验数据处理与分析
在Matlab环境中,我们可以使用以下代码来完成上述步骤:
```matlab
% 基带信号参数
Fs = 1000; % 采样频率
T = 1/Fs; % 采样周期
L = 1500; % 信号长度
t = (0:L-1)*T; % 时间向量
% 创建基带信号
baseband_signal = cos(2*pi*100*t);
% 载波信号参数
fc = 500; % 载波频率
carrier_signal = cos(2*pi*fc*t);
% 调频信号生成
k = 50; % 调频指数
modulated_signal = carrier_signal + (k*baseband_signal .* carrier_signal);
% 信道模型,加入高斯白噪声
noisy_signal = awgn(modulated_signal, 30); % 信噪比为30dB
% 接收信号和解调过程
demodulated_signal = (noisy_signal .* cos(2*pi*fc*t));
% 低通滤波器以恢复基带信号
[b, a] = butter(6, 0.1); % 创建一个六阶巴特沃斯滤波器
restored_signal = filter(b, a, demodulated_signal);
```
上述代码中,我们首先定义了基带信号的参数并创建了信号。然后,我们将其调制到载波上,通过添加高斯白噪声来模拟信道。接收信号后,进行解调,并通过一个低通滤波器恢复基带信号。
### 5.2.2 仿真结论及其实际意义
在进行了上述仿真后,我们可以绘制出原始信号、调频信号、噪声调频信号以及解调后信号的波形图,以直观地观察信号的变化情况。这可以帮助我们评估调制解调过程的性能以及信道对信号质量的影响。
```matlab
figure;
subplot(3,1,1);
plot(t, baseband_signal);
title('Original Baseband Signal');
xlabel('Time (s)');
ylabel('Amplitude');
subplot(3,1,2);
plot(t, modulated_signal);
title('Frequency Modulated Signal');
xlabel('Time (s)');
ylabel('Amplitude');
subplot(3,1,3);
plot(t, restored_signal);
title('Restored Baseband Signal');
xlabel('Time (s)');
ylabel('Amplitude');
```
通过对比原始信号和恢复的信号,可以计算信号失真度等性能指标。在实际应用中,这种仿真技术对于评估新设计的通信系统模型的可行性、性能优化、以及调试复杂的通信协议都具有重要的参考价值。
0
0